资源预览内容
第1页 / 共10页
第2页 / 共10页
第3页 / 共10页
第4页 / 共10页
第5页 / 共10页
第6页 / 共10页
第7页 / 共10页
第8页 / 共10页
第9页 / 共10页
第10页 / 共10页
亲,该文档总共10页全部预览完了,如果喜欢就下载吧!
资源描述
电子信息学院实验报告书课 程 名: 数据结构 题 目: 队列子系统 实验类别 验证 班 级: BX1001 学 号: 101003020141 姓 名: 赵艳 2011年 10 月 11 日 算法设计与分析 实验报告 - 9 -1、 实验目的(1) 掌握栈的特点及其描述方法;(2) 用链式存储结构实现一个队列;(3) 掌握队列的各种基本操作;(4) 掌握队列的简单应用程序。2、 实验内容(1) 设计一个字符型的链队列。(2) 编写进队、出队、读队头元素、显示队列中全部元素的程序。(3) 设计一个输入限制性的双队列,要求: 输入只能在一端进行,而输出可以选择从队头输出或队尾输出,全部选择完毕后能显示所选择的输出结果。 设计一个选择式菜单,以菜单方式选择队列的各种基本操作。 菜单形式如下:队列子系统* 1-进 队 * 2-出 队 * 3-读 队 头 元 素 * 4-显 示 * 5-双 队 列 * 0-退 出 *请选择菜单号(05):3、 实验步骤和源程序(1) 实验步骤开始定义队列元素的类型,然后定义五个函数,分别是进队函数、出队函数、显示队列函数、读队首元素函数、从两端输出队列函数,最后是主函数对这几个函数的调用。进栈函数主要是开辟空间,构造新结点,并将新结点插入队尾。出栈是通过将队头结点从队列中断开,最后一个结点出队回收头结点来实现。读队头函数是通过断开队头结点,赋值于x带回主调函数来实现。从队尾出队和从队头出队过程相似,都是首先判断队是否为空,再使元素出队来实现的。主函数是运用 printf()创造一个选择菜单还有switch()选择语句以及对定义过的函数的调用来实现的。(2) 源程序 #include typedef struct queuenode int data; struct queuenode *next; QueueNode; typedef struct QueueNode *front,*rear; LinkQueue; void InQueue(LinkQueue *q) int x; QueueNode *p=new QueueNode; printf(ntt请键入一个整数:); scanf(%d,&x); getchar(); p-data=x; p-next=NULL; if(q-front=NULL) q-front=p; else q-rear-next=p; q-rear=p; if(p) printf(ntt %d进队成功! ,x); int OutQueue(LinkQueue *q,int *v) QueueNode *p; if(q-front=NULL) return 0; else p=q-front; *v=p-data; q-front=p-next; if(q-front=NULL) q-rear=NULL; delete p; return 1; void ShowQueue(LinkQueue *q) QueueNode *p=q-front; if(p=NULL) printf(ntt队列为空!n); else printf(ntt队列中的元素为:); while(p!=NULL) printf(%6d,p-data); p=p-next; printf(n); void ReadFront(LinkQueue *q) if(q=NULL|q-front=NULL) printf(ntt队列为空!没有队顶元素!n); else printf(ntt队首元素是: %4d n,q-front-data); #define QUEUEMAX 20 int queueQUEUEMAX; int front=-1; int rear=-1; void InQueue(int val) rear=(rear+)%QUEUEMAX; if(front=rear) printf(ntt队列已满!); else queuerear=val; int OutQueue_rear() int t; if(front=rear) return -1; t=queuerear-; if(rear0&front!=-1) rear=QUEUEMAX-1; return t; int OutQueue_front() int t; if(front=rear) return -1; t=queue+front; if(front=QUEUEMAX) front=0; return t; void DQ() int choice; int out5; int in5=5,4,3,2,1; int t,pos=0,i; for(i=0;i5;i+) InQueue(ini); printf(ntt初始化顺序是: ); for(i=0;i5;i+) printf(%d,ini); printf(nntt 1-从头出队 2-从尾出队nn); while(front!=rear) printf(tt请输入选择(1或2):); scanf(%d,&choice); switch(choice) case 1: t=OutQueue_front(); outpos+=t; break; case 2: t=OutQueue_rear(); outpos+=t;break; printf(ntt数据输出顺序是: ); for(i=0;ifront=q-rear=NULL; while(i) printf(n); printf(ntt 队 列 子 系 统 ); printf(ntt*); printf(ntt* 1-进 队 *); printf(ntt* 2-出 队 *); printf(ntt* 3-读 队 头 元 素 *); printf(ntt* 4-显 示 *); printf(ntt* 5-双 队 列 *); printf(ntt* 6-返 回 *); printf(ntt*); printf(ntt 请选择菜单号(0-5): ); scanf(%c,&choice); getchar(); switch(choice) case1: InQueue(q);break; case2: if(OutQueue(q,&val)=0) printf(ntt队列为空!n); else printf(ntt出队元素为: %d,val); break; case3: ReadFront(q); break; case4: ShowQueue(q); break; case5:DQ();break; case0: i=0; break; default:; if(choice=1|choice=2|choice=3|choice=4|choice=5) printf(nntt按【Enter】键继续,按任意键返回主菜单,n); w=getchar(); if(w!=xA) i=0; 4. 测试数据与实验结果(可以抓图粘贴)5.结果分析与实验体会 程序成功运行,结果准确,这个实验式书上原来的程序,我在看题目的过程中觉得每个程序分开来其实不难。 而且刚刚看过栈相关函数,所以觉得栈和队列处理有很多共同之处,看起来就相对简单了。进队和出队时要判断队满和队空,而且判断方法和栈的处理有一定区别,这个值得注意。读队首元素时也要记得判断队
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号