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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

实验4栈与队列实验 续.docx

1、实验4栈与队列实验 续实验4:栈与队列实验 续学生姓名: 张皓然 学 号: 5501215001 专业班级: 本硕151 一、实验目的:(1)掌握链接存储队列的进队和出队等基本操作。(2)掌握环行队列的进队和出队等基本操作。(3)加深对队列结构的理解,逐步培养解决实际问题的编程能力。二、链队列实验要求:(1)编写链接队列的基本操作函数。typedef struct QNode int data; struct QNode *next;QNode,*QueuePtr;typedef struct QueuePtr front; /队头指针 QueuePtr rear; /队尾指针LinkQueu

2、e;进队操作 EnQueue(LinkQueue &Q, int e)出队操作,队空DeQueue(LinkQueue &Q, int &e)输出队列中元素 0utputQueue(LinkQueue Q)(2)调用上述函数实现下列操作,操作步骤如下。调用进队函数建立一个队列。读取队列中的第一个元素。从队列中删除元素。输出队列中的所有元素。注意 每完成一个步骤就必须及时输出队列中元素,以便观察操作结果。三、链队列实现代码及注释:/链接队列的实现#include #includeusing namespace std;#define ERROR 1#define OK 0#define OVER

3、FLOW -1#define MAXQSIZE 100 /最大队列长度typedef struct QNode/结点 int data;/数据域 QNode *next;/指针域 QNode,*QueuePtr;typedef struct QueuePtr front;/队头指针 QueuePtr rear; /队尾指针LinkQueue;int initqueue(LinkQueue &q) /构造一个空队列并进行初始化 int m; QNode *p; q.front=q.rear=(QNode*)malloc(sizeof(QNode);/申请头结点 if(!q.front) exit

4、(OVERFLOW); /存储空间分配失败 q.front-next=NULL;/空队列 cout初始化队列:(0代表结束)data=m;/m为数据值 q.rear-next=p;/队尾的指针域指向p p-next=NULL;/p的指针域为空 q.rear=p;/队尾指针后移 return OK;int gethead(LinkQueue q) /用e返回队头的值 int e; if(q.front=q.rear) coutnext-data;/第一个节点为头结点,所以需要next cout队头的值为:eendl; return OK;int enqueue(LinkQueue &q) /插入

5、元素e为新的队尾元素 int e; QNode *p; p=(QNode*)malloc(sizeof(QNode); if(!p) exit(OVERFLOW); coute; p-data=e;/p的数据域为e p-next=NULL;/p的next为空 q.rear-next=p;/队尾的指针域指向新的结点 q.rear=p;/ 队尾指针后移 return OK;int dequeue(LinkQueue &q) /删除队头元素,并用e返回所删除的值 int e; if(q.front=q.rear) coutnext;/p指向第一个元素 e=p-data;/e取得第一个元素的值 q.f

6、ront-next=p-next;/头结点指向第二个元素 if(q.rear=p) q.rear=q.front; /这种情况是只有一个元素的情况,被删除后队尾指针指向的地方没有意义,需要等于队头指针 free(p);/释放p的空间 cout删除成功!被删除队头的值为:eendl; return OK;int showqueue(LinkQueue &q) /遍历队列元素 QNode *p; if(q.front=q.rear) coutnext; cout队列里的值为:; while(p!=NULL) coutdatanext; coutendl; return OK;void menu()

7、/菜单 cout*n; cout* 链队列基本操作 *n; cout*n; cout* 1.输出队头的值 *n; cout* 2.向队尾插入新元素 *n; cout* 3.删除队头 *n; cout* 4.遍历队列 *n; cout* 5.初始化队列 *n; cout* 0.退出 *n; cout*n;cout请输入要选择的选项(0-5):n;int main() int k=1; LinkQueue q; menu(); while(k) /循环操作 coutk; switch(k) case 0:break; case 1:gethead(q);showqueue(q);break; ca

8、se 2:enqueue(q);showqueue(q);break; case 3:dequeue(q);showqueue(q);break; case 4:showqueue(q);break; case 5:initqueue(q);showqueue(q); break; default: couterror!n;break;/默认选项 return 0; 四、链队列测试结果:建立一个队列的功能1.输入的形式和输入值的范围:输入若干正整数,用空格分隔,用0来表示结束。2.输出的形式:按输入顺序输出。3.测试数据:输入5 2 3 6 9 0后,输出5 2 3 6 9(2)取队头元素功能

9、1.取出队头元素是:52.输出队列元素是:5 2 3 6 9(3)删除队头元素功能1.删除队列数据元素是:52.输出队列元素是:2 3 6 9(4)输出队列所有元素功能输出队列所有元素是:2 3 6 9(5)结束功能输入0结束程序!五、循环队列实验要求:编写环型队列的基本操作函数。#define MAXSIZE 100 /最大队列长度,最多只能插入MAXSIZE-1个数据typedef struct int *base; /初始化的动态分配存储空间 int front; /头指针,若队列不为空,指向队列头元素 int rear; /为指针,若队列不为空,指向队列尾元素的下一个位置SqQueue

10、;进队操作,返回1为队满 EnQueue(SqQueue &Q, int e)出队操作,返回1为队空 DeQueue(SqQueue &Q, int &e)输出队列中元素 OutputQueue(SqQueue &Q)(4)调用上述函数实现下列操作,操作步骤如下:调用进队函数建立一个队列。读取队列中的第一个元素。从队列中删除元素。输出队列中的所有元素。注意 每完成一个步骤就必须及时输出队列中元素,以便观察操作结果。六、循环队列实现代码及注释#include #includeusing namespace std;/符号定义 #define ERROR 1#define OK 0#define

11、OVERFLOW -1#define MAXQSIZE 100 /最大队列长度typedef struct int *base; /初始化的动态分配存储空间基地址 int front; /头指针,若队列不空,指向队列头元素 int rear; /尾指针,若队列不空,指向队列尾元素的下一个位置 sqqueue;int initsqqueue(sqqueue &q) /构造一个空队列并进行初始化 int m; q.base=(int*)malloc(MAXQSIZE*sizeof(int); if(!q.base) exit(OVERFLOW); /存储空间分配失败 q.front=q.rear=

12、0; while(scanf(%d,&m)!=EOF&m!=0) q.baseq.rear=m; q.rear+; return OK;int getsqhead(sqqueue q) int e; if(q.rear=q.front) cout队列为空!n; return ERROR; /队列空 e=q.baseq.front; cout队头的值为eendl; return OK;int ensqqueue(sqqueue &q) /插入元素e为新的队尾元素 if(q.rear+1)%MAXQSIZE=q.front) cout队列满!n; return ERROR; /队列满 int e;

13、 coute; q.baseq.rear=e;/插入e q.rear=(q.rear+1)%MAXQSIZE;/新的队尾 return OK;int desqqueue(sqqueue &q) /删除队头元素 if(q.rear=q.front) cout删除失败n; return -1; /队列空 int e; e=q.baseq.front; cout删除成功!所删除的队头的值为:eendl; q.front=(q.front+1)%MAXQSIZE;/指针后移 return OK;int showsqqueue(sqqueue q) /遍历队列元素 int n; n=q.front; i

14、f(q.front=q.rear) cout队列为空!n; return -1; cout队列里的值为:; while(n!=q.rear) coutq.basen ; n=(n+1)%MAXQSIZE; coutendl; return OK;void menu()/菜单 cout*n; cout* 循环队列测试 *n; cout*n; cout* 1.输出队头的值 *n; cout* 2.向队尾插入新元素 *n; cout* 3.删除队头 *n; cout* 4.遍历队列 *n; cout* 5.初始化队列 *n; cout* 0.退出 *n; cout*n; cout请输入要选择的选项(

15、0-5):n; int main() int k=1; sqqueue q; menu(); while(k) /循环操作 coutk; switch(k) case 0:break; case 1:getsqhead(q);showsqqueue(q);break; case 2:ensqqueue(q);showsqqueue(q);break; case 3:desqqueue(q);showsqqueue(q);break; case 4:showsqqueue(q);break; case 5:initsqqueue(q);showsqqueue(q); break; default

16、: couterror!n;break;/默认选项 return 0;七、循环队列实验调试结果:/环型队列(1)初始化队列(2)建立一个队列的功能1.输入的形式和输入值的范围:输入若干正整数,用空格分隔,用0来表示结束。2.输出的形式:按输入顺序输出。3.测试数据:输入11 12 13 14 15 0后,输出11 12 13 14 15(3)取队头元素功能1.取出队头元素是:112.输出队列元素是:11 12 13 14 15(4)删除队头元素功能1.删除队列数据元素是:112.输出队列元素是:12 13 14 15(5)输出队列所有元素功能输出队列所有元素是:12 13 14 15(6)进队功能1.输入进队的元素:162.输出所有的(7)结束功能输入0结束程序!8、实验体会在初始化队列中,要求的是用0代表输入的结束,可以用while循环来判断输入是否终止。 while(scanf(%d,&m)!=EOF&m!=0) q.baseq.rear=m; q.rear+; 当m等于0时,判断条件为false,不再读入数据。

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

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