1、实验4队列子系统验证性实验4:队列子系统班级: H1001 学号: 09 姓名: 陆俊 实验日期: 2011.10.19、10.26 1实验目的(1)掌握队列的特点及其描述方法。(2)用链式结构实现一个队列。(3)掌握队列的各种基本操作。(4)掌握队列的简单应用程序。2实验内容(1)设计一个字符型的链队列。(2)编写队列的进队、出队、读队头元素、显示队列中全部元素程序。(3)设计一个输入限制性的双队列,要求:输入只能在一端进行,而输出可以选择从队头输出或队尾输出,全部选择完毕后能显示所选择的输出结果。设计一个选择式菜单,以菜单方式选择队列的各种基本操作。菜单形式如下: 队 列 子 系 统 *
2、* 1-进 队 * * 2-出 队 * * 3-读 队 头 元 素 * * 4-显 示 * * 5-双 队 列 * * 0-退 出 * *请选择菜单号(0-5):3实验程序#includetypedef 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(%
3、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 S
4、howQueue(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队首元素是:%4dn,q-front-data);#define QUEUEMAX 20int q
5、ueueQUEUEMAX;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
6、; else t=queue+front; if(front=QUEUEMAX) front=0; return t;int 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(ntt 1-从头出队 2-从尾出队nn); while(front!=rear) printf(tt请输入选择(1 或 2):); scanf(%d,&choice); sw
7、itch(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-显
8、示 *); printf(ntt* 5-双 队 列 *); printf(ntt* 0-退 出 *); printf(ntt*); printf(ntt 请选择菜单号(0-5):); scanf(%c,&choice); getchar(); switch(choice) case 1: InQueue(q);break; case 2: if(OutQueue(q,&val)=0) printf(ntt队列为空!n); else printf(ntt出队元素为:%d,val); break; case 3: ReadFront(q); break; case 4: ShowQueue(q);
9、 break; case 5: DQ(); break; case 0: 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实验小结这次的实验花了90分钟(两节课)的时间把程序代码打完运行了一遍,从完成时间上来说,要比上次实验的又快了点。这次的程序代码在第一次运行时提示出现了很多错误,然后我就一个个地都纠正了几次。除了提示只有一个错误的那个错误外,其他都是我漏打某些语句的单词造成的error,主要还是有点粗心啊!最后一个错误是DQ双列表上漏了加一个返回值,加上去就行了,而书上没有加。可能是新版的书有很多错误的原因吧,没注意就按着书上的代码打了下来,结果有了些错误。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1