链队列和循环队列数据结构实验Word文档下载推荐.docx
- 文档编号:16420493
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:14
- 大小:116.34KB
链队列和循环队列数据结构实验Word文档下载推荐.docx
《链队列和循环队列数据结构实验Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《链队列和循环队列数据结构实验Word文档下载推荐.docx(14页珍藏版)》请在冰豆网上搜索。
使用栈数据结构解决3阶汉诺塔问题,编写程序并模拟栈及其汉诺塔的搬运过程(给出程序执行过程栈的变化过程与圆盘的搬动状态)。
5)其它实际应用举例(如打印杨辉三角形)。
3实验步骤与源程序
链队列
#include<
stdio.h>
stdlib.h>
process.h>
#defineOK1
#defineERROR0
#defineOVERFLOW0
typedefstructQNode
{
intdata;
structQNode*next;
}QNode,*QueuePtr;
typedefstruct
QueuePtrfront;
QueuePtrrear;
}LinkQueue;
intInitQueue(LinkQueue&
Q)
Q.rear=Q.front=(QueuePtr)malloc(sizeof(QNode));
if(!
Q.rear)
exit(OVERFLOW);
Q.front->
next=NULL;
returnOK;
}
voidQueueEmpty(LinkQueueQ)
if(Q.front==Q.rear)
printf("
该链队为空:
"
);
else
该链队不为空:
voidEnQueue(LinkQueue&
Q,inte)
QueuePtrp;
p=(QueuePtr)malloc(sizeof(QNode));
p)
error"
p->
data=e;
Q.rear->
next=p;
Q.rear=p;
printf("
元素%d入队成功"
e);
intEnnQueue(LinkQueue&
returnERROR;
voidDeQueue(LinkQueue&
该链队为空"
p=Q.front->
next;
next=p->
if(Q.rear==p)
Q.rear=Q.front;
free(p);
队首元素删除成功"
voidGetHead(LinkQueue&
队首元素为:
%d"
p->
data);
voidOutQueue(LinkQueue&
while(p!
=Q.rear->
next)
{
p=p->
}
voidLengthQueue(LinkQueue&
intf=0;
该队列的长度是:
f);
p=Q.front->
while(p!
{
p=p->
f++;
}
voidmain()
system("
cls"
intflag=1,i;
LinkQueueQ;
InitQueue(Q);
************************链队列功能菜单***********************\n"
1:
初始化链队列,2:
判断链队列是否为空,3:
进入队列,4:
取出队首元素\n"
5:
输出该队列的所有元素,6:
输出该队列的长度,7:
结束程序,8:
清屏\n"
while(flag)
\n请输入操作符:
scanf("
&
i);
switch(i)
case1:
inte,n,k;
printf("
请输入队列的长度:
scanf("
n);
请输入队列的元素:
for(e=1;
e<
=n;
e++)
{
scanf("
k);
EnnQueue(Q,k);
}
初始化链队成功"
break;
case2:
QueueEmpty(Q);
case3:
intj;
请输入要进入队列的元素"
j);
EnQueue(Q,j);
case4:
GetHead(Q);
case5:
该队列的元素是:
OutQueue(Q);
case6:
LengthQueue(Q);
case7:
flag=0;
case8:
system("
程序结束"
循环队列
#defineMAXSIZE10;
#defineOK1;
#defineERROR0;
#defineOVERFLOW0;
typedefstruct
int*data;
intfront;
intrear;
}SqQueue;
intInitQueue_Sq(SqQueue&
Q.data=(int*)malloc(10*sizeof(int));
Q.data)
exit(0);
Q.front=Q.rear=0;
intEnQueue_Sq(SqQueue&
if((Q.rear+1)%10==Q.front)
Q.data[Q.rear]=e;
Q.rear=(Q.rear+1)%10;
voidIfEmpty(SqQueueQ)
if(Q.rear=Q.front)
该循环队列是空队列\n"
该循环队列不是空队列\n"
voidIfFull(SqQueueQ)
该循环队列已满\n"
该循环队列未满\n"
voidInQueue_Sq(SqQueue&
循环队列已满\n"
Q.data[Q.rear]=e;
Q.rear=(Q.rear+1)%10;
元素%d成功进入循环队列\n"
voidDeQueue_Sq(SqQueue&
inte;
循环队列为空\n"
e=Q.data[Q.front];
循环队列队首元素是:
%d\n"
voidDE_Sq(SqQueue&
int*w;
w=&
Q.data[Q.front];
Q.front=Q.front+1;
队首元数%d删除成功\n"
*w);
intLength_Sq(SqQueue&
ints;
s=(Q.rear-Q.front+10);
returns%10;
intOutQueue_Sq(SqQueueQ)
SqQueuep;
p=Q;
inti,n;
n=Length_Sq(p);
for(i=0;
i<
n;
i++)
p.data[p.front]);
p.front++;
voidDelet(SqQueue&
free(Q.data);
释放成功"
**********************循环队列功能菜单***********************\n"
1.初始化队列输入的数不超过10个,2.判断队列是否空,3.判断队列是否满,\n"
4.将元素入队,5.取队列首元素,6.队列的长度,7.遍历循环队列,\n"
8.删除队首元素,9.释放队列,10.清屏,0.结束程序,\n"
SqQueueQ;
InitQueue_Sq(Q);
while(flag)
请输入操作符:
intn,j,m;
请输入初始化元素的个数:
请输入元素:
for(j=0;
j<
j++)
m);
EnQueue_Sq(Q,m);
IfEmpty(Q);
IfFull(Q);
intk;
请输入要进入循环队列的元素:
InQueue_Sq(Q,k);
DeQueue_Sq(Q);
intf;
f=Length_Sq(Q);
该循环队列的长度为:
该循环队列为:
OutQueue_Sq(Q);
\n"
DE_Sq(Q);
case9:
Delet(Q);
case10:
case0:
4测试数据与实验结果(可以抓图粘贴)
链队列执行结果
循环队列执行结果:
5结果分析与实验体会
通过此次的数据结构实验,让我对队列的基本结构有了进一步了解了,以及队列上一些基本操作的实现,掌握了队列在我们实际生活中的应用以及在编程时的基本技巧.不过在编程过程中还是出现了让人头疼的地方,不过同过自己的翻阅资料还是可以独立的解决编程中的问题的,通过本次的实验让自己所学的知识得到了进一步的巩固,加深了对C语言的了解.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 队列 循环 数据结构 实验