数据结构实验七:队列实验.doc_第1页
数据结构实验七:队列实验.doc_第2页
数据结构实验七:队列实验.doc_第3页
数据结构实验七:队列实验.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一,实验题目实验七:假设以数组sem存放循环队列的元素,同时设变量rear和num分别作为队尾指针和队中元素个数记录。试讨论判别此循环队列的队满条件,写出相应的入队和出队算法,并通过运行验证之。二,问题分析本程序要求实现用数组sem存放循环队列的元素,并设变量rear和num分别作为队尾指针和队中元素个数记录。实现出队和入队操作。完成这些功能需要解决的关键问题是建立队列,插入一个对列元素和队列元素的出队。1, 数据的输入形式和输入值的范围:队列元素为整数。插入的队列元素也为整数。2, 结果的输出形式:根据选择菜单,结果输出的可以使队列元素,可以使出队或入队后的队列。3, 测试数据:(1)一开始输入的队列元素为:456,34,543,123,56,87 (2)选择菜单2后,入队的队列元素为45 (3)选择菜单1后,队列的首元素出队三,概要设计(1)为了实现上述程序的功能,需要:A,构造一个空队列set()B,实现队列元素的入队功能C,实现队列元素的出队功能insert()D,队列的输出main()E,在屏幕上显示菜单操作(2)本程序包含5个函数:del()a,主函数main()b,建立空队列函数set()display()c,队列元素入队函数insert()d,队列元素出队函数del()e,队列元素输出函数display()各函数间关系如右图所示:四,详细设计(1)结点类型定义:typedef struct node int semaxlen;int rear,num;seqstack;(2)队列置空函数伪代码:seqstack *set()seqstack *s;s=(seqstack*)malloc(sizeof(seqstack);s-rear=0; s-num=0;return s;(3)队列入队函数伪代码:seqstack *insert(seqstack *p,int x)if(p-num=maxlen) printf(队列已满!n); else if(p-rearserear=x; p-rear+; p-num+; if(p-rear=maxlen) p-se0=x; p-rear=1; p-num+;return p;(4)队列入队函数伪代码:seqstack *del(seqstack *p)p-num-; return p;(5)输出队列元素伪代码:void display(seqstack *p) int i;if(p-numrear)for(i=0;inum;i+) printf(%d ,p-sep-rear-p-num+i);elsefor(i=0;inum;i+) printf(%d ,p-se(maxlen+p-rear-p-num+i)%maxlen);五,源代码#include stdio.h#include malloc.h#define maxlen 100typedef struct node /队列的结构定义int semaxlen;int rear,num;seqstack;seqstack *set() /建立空队列函数seqstack *s;s=(seqstack*)malloc(sizeof(seqstack);/申请空间s-rear=0;s-num=0;return s;seqstack *insert(seqstack *p,int x) /向队列中插入元素函数if(p-num=maxlen) /如果元素的个数大于队列的最大长度printf(队列已满!n); /则输出队列已满else /当队列元素未满时if(p-rearsep-rear=x; /则直接将元素插在队尾即可 p-rear+; /使p指向刚插入的元素 p-num+; /元素的个数加1 if(p-rear=maxlen) /如果队尾元素的下标等于队列的最大值 p-se0=x; /则将元素插在队列的首位置 p-rear=1; /将尾指针指向下标为1的位置 p-num+; /元素个数加1return p; /返回该队列seqstack *del(seqstack *p) /队列的出队函数p-num-; /出队时,队列中的元素个数减一return p; /返回该列队void display(seqstack *p) /输出队列中元素的函数int i;if(p-numrear) /如果队列中的元素个数小于队尾元素的下标for(i=0;inum;i+)printf(%d ,p-sep-rear-p-num+i); /输出队列中的元素else /如果队列中的元素个数大于队尾元素的下标for(i=0;inum;i+)printf(%d ,p-se(maxlen+p-rear-p-num+i)%maxlen); /输出队列中的元素void main() /主函数seqstack *s; /定义一个队列结构类型指针sint x;s=set(); /调用建立空队列函数printf(输入队列的元素、当输入0是表示输入结束n);scanf(%d,&x);while(x!=0) /当x不等于0时s=insert(s,x); /调用队列插入函数,插入元素xscanf(%d,&x);do /实现菜单选择功能printf(1.队列元素出队即删除n);printf(2.输入要插入队列的元素n);printf(3.输出队列的队列元素n);printf(0.退出n);printf(请选择你需要对该队列的操作:n);scanf(%d,&x);switch(x)case 1:s=del(s); /队列元素出队break;case 2:printf(请输入要插入的数据元素:n);scanf(%d,&x);s=insert(s,x);break;case 3:display(s);printf(n);break;default:break;while(x!=0);六,调试分析当直接将元素插在队尾时,在使用时混淆了数组和指针的使用方法,导致错误,应该是p-sep-rear=x,而却写成p-serear=x导致了错误。错误提示如下:七,使用手册用户在使用时,根据界面提示,首

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论