ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:116.34KB ,
资源ID:3515106      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3515106.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(链队列和循环队列数据结构实验.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

链队列和循环队列数据结构实验.docx

1、链队列和循环队列数据结构实验淮海工学院计算机科学系实验报告书课程名: 数据结构 题 目: 数据结构实验 链队列和循环队列 班 级: 学 号: 姓 名: 线性数据结构算法实现与应用报告要求1目的与要求:1)掌握栈与队列的数据类型描述及特点;2)掌握栈的顺序和链式存储存表示与基本算法的实现;3)掌握队列的链式存储表示与基本操作算法实现;4) 掌握栈与队列在实际问题中的应用和基本编程技巧;5)按照实验题目要求,独立完成实际程序的编写编写、调试和运行,并通过用例数据的运行过程抓获相关屏面验证程序设计的正确性;7)认真书写实验报告,并按时提交。2 实验内容或题目以下题目学生根据自己的兴趣和能力可选作一道

2、作为实验题目:1) 根据栈数据结构,分别建立一个顺序栈和链式栈并实现其上基本操作(出栈和入栈等);2) 根据队列数据结构,分别建立链队列和循环队列,并完成其上的基本操作(出入队列等);3) 参考书上表达式求值例题,应用栈的基本操作实现带括号表达式求值运算及其进出栈模拟过程(给出程序执行过程中栈的变化过程);4) 阅读P83栈与递归的实现一节内容和3阶汉诺塔问题。使用栈数据结构解决3阶汉诺塔问题,编写程序并模拟栈及其汉诺塔的搬运过程(给出程序执行过程栈的变化过程与圆盘的搬动状态)。5) 其它实际应用举例(如打印杨辉三角形)。3 实验步骤与源程序 链队列#include#include#inclu

3、de#define OK 1#define ERROR 0#define OVERFLOW 0typedef struct QNode int data; struct QNode *next;QNode,*QueuePtr;typedef struct QueuePtr front; QueuePtr rear;LinkQueue;int InitQueue(LinkQueue &Q) Q.rear=Q.front=(QueuePtr)malloc(sizeof(QNode); if(!Q.rear) exit(OVERFLOW); Q.front-next=NULL; return OK;

4、void QueueEmpty(LinkQueue Q) if(Q.front=Q.rear) printf(该链队为空:); else printf(该链队不为空:);void EnQueue(LinkQueue &Q,int e) QueuePtr p; p=(QueuePtr)malloc(sizeof(QNode); if(!p) printf(error); p-data=e; Q.rear-next=p; Q.rear=p; printf(元素%d入队成功,e);int EnnQueue(LinkQueue &Q,int e) QueuePtr p; p=(QueuePtr)mal

5、loc(sizeof(QNode); if(!p) return ERROR; p-data=e; Q.rear-next=p; Q.rear=p; return OK;void DeQueue(LinkQueue &Q) QueuePtr p; if(Q.front=Q.rear) printf(该链队为空); p=Q.front-next; Q.front-next=p-next; if(Q.rear=p) Q.rear=Q.front; free(p); printf(队首元素删除成功);void GetHead(LinkQueue &Q) QueuePtr p; if(Q.front=

6、Q.rear) printf(该链队为空); p=Q.front-next; printf(队首元素为:%d,p-data);void OutQueue(LinkQueue &Q) QueuePtr p; if(Q.front=Q.rear) printf(该链队为空); p=Q.front-next; while(p!=Q.rear-next) printf(%d,p-data); p=p-next; void LengthQueue(LinkQueue &Q) int f=0; QueuePtr p; if(Q.front=Q.rear) printf(该队列的长度是:%d,f); els

7、e p=Q.front-next; while(p!=Q.rear-next) p=p-next; f+; printf(该队列的长度是:%d,f); void main() system(cls); int flag=1,i; LinkQueue Q; InitQueue(Q); printf(*链队列功能菜单*n); printf(1:初始化链队列, 2:判断链队列是否为空, 3:进入队列, 4:取出队首元素n); printf(5:输出该队列的所有元素,6:输出该队列的长度, 7:结束程序, 8:清屏n); while(flag) printf(n请输入操作符:); scanf(%d,&

8、i); switch(i) case 1: int e,n,k; printf(请输入队列的长度:); scanf(%d,&n); printf(请输入队列的元素:); for(e=1;e=n;e+) scanf(%d,&k); EnnQueue(Q,k); printf(初始化链队成功); break; case 2: QueueEmpty(Q); break; case 3: int j; printf(请输入要进入队列的元素); scanf(%d,&j); EnQueue(Q,j); break; case 4: GetHead(Q); break; case 5: printf(该队列

9、的元素是:); OutQueue(Q); break; case 6: LengthQueue(Q); break; case 7: flag=0; break; case 8: system(cls); break; printf(程序结束);循环队列#include#include#include#define MAXSIZE 10;#define OK 1;#define ERROR 0;#define OVERFLOW 0;typedef struct int *data; int front ; int rear;SqQueue;int InitQueue_Sq(SqQueue &Q

10、) Q.data=(int*)malloc(10*sizeof(int); if(!Q.data) exit(0); Q.front=Q.rear=0; return OK;int EnQueue_Sq(SqQueue &Q,int e) if(Q.rear+1)%10=Q.front) return ERROR; Q.dataQ.rear=e; Q.rear=(Q.rear+1)%10; return OK;void IfEmpty(SqQueue Q) if(Q.rear=Q.front) printf(该循环队列是空队列n); else printf(该循环队列不是空队列n);void

11、IfFull(SqQueue Q) if(Q.rear+1)%10=Q.front) printf(该循环队列已满n); else printf(该循环队列未满n);void InQueue_Sq(SqQueue &Q,int e) if(Q.rear+1)%10=Q.front) printf(循环队列已满n); else Q.dataQ.rear=e; Q.rear=(Q.rear+1)%10; printf(元素%d成功进入循环队列n,e); void DeQueue_Sq(SqQueue &Q) int e; if(Q.front=Q.rear) printf(循环队列为空n); e=

12、Q.dataQ.front; printf(循环队列队首元素是:%dn,e);void DE_Sq(SqQueue &Q) int *w; w=&Q.dataQ.front; Q.front=Q.front+1; printf(队首元数%d删除成功n,*w);int Length_Sq(SqQueue &Q) int s; s=(Q.rear-Q.front+10); return s%10;int OutQueue_Sq(SqQueue Q) SqQueue p; p=Q; int i,n; n=Length_Sq(p); for(i=0;in;i+) printf(%d,p.datap.f

13、ront); p.front+; return OK;void Delet(SqQueue &Q) free(Q.data); printf(释放成功);void main() system(cls); printf(*循环队列功能菜单*n); printf(1.初始化队列输入的数不超过10个,2.判断队列是否空,3.判断队列是否满, n); printf(4.将元素入队, 5.取队列首元素, 6.队列的长度, 7.遍历循环队列,n); printf(8.删除队首元素, 9.释放队列, 10.清屏, 0.结束程序,n); int flag=1,i; SqQueue Q; InitQueue_S

14、q(Q); while (flag) printf(请输入操作符:); scanf(%d,&i); switch(i) case 1: int n,j,m; printf(请输入初始化元素的个数:); scanf(%d,&n); printf(请输入元素:); for(j=0;jn;j+) scanf(%d,&m); EnQueue_Sq(Q,m); break; case 2: IfEmpty(Q); break; case 3: IfFull(Q); break; case 4: int k; printf(请输入要进入循环队列的元素:); scanf(%d,&k); InQueue_Sq

15、(Q,k); break; case 5: DeQueue_Sq(Q); break; case 6: int f; f=Length_Sq(Q); printf(该循环队列的长度为:%dn,f); break; case 7: printf(该循环队列为:); OutQueue_Sq(Q); printf(n); break; case 8: DE_Sq(Q); break; case 9: Delet(Q); break; case 10: system(cls); break; case 0: flag=0; break; printf(程序结束);4 测试数据与实验结果(可以抓图粘贴) 链队列执行结果循环队列执行结果:5 结果分析与实验体会通过此次的数据结构实验,让我对队列的基本结构有了进一步了解了,以及队列上一些基本操作的实现,掌握了队列在我们实际生活中的应用以及在编程时的基本技巧.不过在编程过程中还是出现了让人头疼的地方,不过同过自己的翻阅资料还是可以独立的解决编程中的问题的,通过本次的实验让自己所学的知识得到了进一步的巩固,加深了对C语言的了解.

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1