好文档 - 专业文书写作范文服务资料分享网站

优先队列实验报告

天下 分享 时间: 加入收藏 我要投稿 点赞

优先队列实验报告

一、使用说明

1.开始编译后,因为优先队列未创建,要求输入队列元素个数与各元素值,以此新建并初始化优先队列。

2.优先队列创建成功后,出现选择菜单,有查找、插入、删除、显示四个功能。

3.查找是查找值最大的元素,并询问是否删除此元素;删除操作用来删除该元素;插入是通过输入一个元素值来将它加在队列底端;显示操作显示自动排列后的各个元素值。 二、算法实现

1.本实验构造静态顺序存储结构来存储优先队列的元素,此静态顺序存储结构有两个结构成员:ElemType *elem; int length; 一个为数据元素存储空间基址,另一个为表长。 2.新建并初始化优先队列后,会调整优先队列的元素排列。执行插入后,也会如此做。 3.所谓调整排列,就是利用大顶堆,将元素值较大的元素不断上调,直到元素值最大的元素调至大顶堆顶部。

4.选择删除后,返回队头第一个元素后,静态顺序表元素从第二个开始依次前移,覆盖第一个元素。若队列清空,会给与提示。

5.插入操作是将新元素先插入队列底端,再进行调整。

6.查找最大值:因为优先队列中队头就是最大值,返回此值即可。 三、总结

1.优先队列实质是堆,堆通过模拟二叉树的结构(实质是静态顺寻表)来进行调整。 2.优先队列可通过定义的不同决定成为最小或最大优先队列。

3.优先队列只允许在底端加入元素,并从顶端取出元素,除此之外别无其它存取元素的途径。 4.新添加的元素并非依照被推入的次序排列,而是自动依照元素的权值排列。

源代码:

#include\等 */ #include\

#include\

typedef int ElemType;

typedef struct /*静态查找表的顺序存储结构 */

{ ElemType *elem; /* 数据元素存储空间基址,建表时按实际长度分配,0号单元留空 */ int length; /* 表长度 */ }SSTable;

void Creat_Seq(SSTable &ST,int n)

{ /* 操作结果: 构造一个含n个数据元素的静态顺序查找表ST(数据来自数组r) */ int i,temp; ST.elem=(ElemType *)malloc((n+1) * sizeof(ElemType)); /* 动态生成n个数据元素空间(0号单元不用) */

if(!(ST).elem) { printf(\

exit(0);

} /*内存分配失败结束程序*/

for(i=1;i<=n;i++) { scanf(\ *(ST.elem+i)=temp; /* 依次赋值给ST */ }

ST.length=n; }

void printf(SSTable &ST) { }

void heapadjust(SSTable &ST,int s,int m) {

int rc,j;

rc= ST.elem[s]; for(j=2*s;j<=m;j*=2) {

if(j

if(ST.elem[j]

break;

ST.elem[s]=ST.elem[j]; for(i=1;i<=ST.length;i++) }

printf(\int i;

if(ST.length==0) printf(\队列已被清空,请插入新元素。\\n\else { printf(\优化队列元素值依次为:\

s=j; }

ST.elem[s]=rc;

}

void heap(SSTable &ST) { int j,i;

for(i=ST.length/2;i>0;i--)

heapadjust(ST,i,ST.length);

}

void heapsort(SSTable &ST)

{ /* 在顺序表ST中顺序查找其关键字等于key的数据元素。若找到,则函数值为 */ /* 该元素在表中的位置,否则为0。算法9.1 */

int j,i;

for(i=ST.length/2;i>0;i--)

heapadjust(ST,i,ST.length); // }

void insert(SSTable &ST,int add) { }

void deletequeue(SSTable &ST) {

ST.elem[++ST.length]=add; printf(ST);

for(i=ST.length;i>1;i--) {

j=ST.elem[1];

ST.elem[1]=ST.elem[i]; ST.elem[i]=j;

heapadjust(ST,1,i-1);

}

else { } }

int i,j;

if(ST.length==1) { ST.elem[1]=NULL; ST.length--; printf(\队列已清空。\\n\}

j=ST.elem[1];

ST.elem[1]=ST.elem[ST.length]; ST.elem[ST.length]=j;

heapadjust(ST,1,ST.length-1);

ST.length--;

printf(\该元素已删除。\\n\

int main() {

printf(\\\n\ printf(\ 欢迎进入优化队列世界 | \\n\ printf(\\\n\ printf(\ printf(\ printf(\

/*创建一个新的优化队列*/

printf(\您还未创建优化队列,请创建!\\n\

printf(\请输入新队列元素个数:\

SSTable ST;

int n,num,add; char c;

//

scanf(\

printf(\请输入各元素的值(整数):\Creat_Seq(ST,n);

heap(ST);

///选择功能

printf(\优化队列已创建,\printf(ST);

printf(\请按回车键以继续。\\n\scanf(\scanf(\

system(\

printf(\请选择以下功能\\n\

printf(\ <<<< <<< ☆☆☆☆☆☆☆☆☆☆ >>>> >>>> >>>>\\n\

<<<< <<<< <<<< <<<<

<<< >>>> >>>> >>>>\\n\<<< 1.插入新元素 >>>> >>>> >>>>\\n\<<< 2.查找最大值元素 >>>> >>>> >>>>\\n\<<< 3.删除最大值元素 >>>> >>>> >>>>\\n\

printf(\ printf(\ printf(\ printf(\

printf(\ <<<< <<< 4.显示各元素值 >>>> >>>> >>>>\\n\ // printf(\ <<<< <<< 5.根据条件查询 >>>> >>>> >>>>\\n\ printf(\ <<<< <<< 0.退出 >>>> >>>> >>>>\\n\ ///

scanf(\ while(num) {

switch(num) {

case 1:printf(\请输入要插入的元素的值:\ //

//

scanf(\ system(\ insert(ST,add); heap(ST);

printf(\ <<<< <<< >>>> >>>> >>>>\\n\printf(\ <<<< <<< ☆☆☆☆☆☆☆☆☆☆ >>>> >>>> >>>>\\n\

优先队列实验报告

优先队列实验报告一、使用说明1.开始编译后,因为优先队列未创建,要求输入队列元素个数与各元素值,以此新建并初始化优先队列。2.优先队列创建成功后,出现选择菜单,有查找、插入、删除、显示四个功能。3.查找是查找值最大的元素,并询问是否删除此元素;删除操作用来删除该元素;插入是通过输入一个元素值来将它加在队列底端;显示操作显示自动排
推荐度:
点击下载文档文档为doc格式
47w8x0tgwm0zn011pbdn
领取福利

微信扫码领取福利

微信扫码分享