1、(3) 设计一个输入限制性的双队列,要求: 输入只能在一端进行,而输出可以选择从队头输出或队尾输出,全部选择完毕后能显示所选择的输出结果。设计一个选择式菜单,以菜单方式选择队列的各种基本操作。 菜单形式如下:* 1-进 队 * 2-出 队 * 3-读 队 头 元 素 * 4-显 示 * 5-双 队 列 * 0-退 出 *请选择菜单号(05):3、 实验步骤和源程序(1) 实验步骤开始定义队列元素的类型,然后定义五个函数,分别是进队函数、出队函数、显示队列函数、读队首元素函数、从两端输出队列函数,最后是主函数对这几个函数的调用。进栈函数主要是开辟空间,构造新结点,并将新结点插入队尾。出栈是通过将
2、队头结点从队列中断开,最后一个结点出队回收头结点来实现。读队头函数是通过断开队头结点,赋值于x带回主调函数来实现。从队尾出队和从队头出队过程相似,都是首先判断队是否为空,再使元素出队来实现的。主函数是运用 printf()创造一个选择菜单还有switch()选择语句以及对定义过的函数的调用来实现的。(2) 源程序 #includetypedef struct queuenode int data;struct queuenode *next;QueueNode;typedef struct QueueNode *front,*rear; LinkQueue;void InQueue(LinkQ
3、ueue *q) int x;QueueNode *p=new QueueNode;printf(ntt请键入一个整数:);scanf(%d,&x);getchar();p-data=x;next=NULL;if(q-front=NULL) q-front=p;else q-rear-next=p;q-rear=p;if(p) ntt %d进队成功! ,x); int OutQueue(LinkQueue *q,int *v) QueueNode *p;front=NULL) return 0; else p=q-front; *v=p-data;front=p-next;front=NULL
4、) rear=NULL;delete p;return 1; void ShowQueue(LinkQueue *q) QueueNode *p=q- if(p=NULL) ntt队列为空!nelse printf(ntt队列中的元素为: while(p!=NULL) printf(%6d,p-data); p=p- printf(void ReadFront(LinkQueue *q) if(q=NULL|q-没有队顶元素!else ntt队首元素是: %4d n,q-front-#define QUEUEMAX 20 int queueQUEUEMAX;int front=-1;int r
5、ear=-1;void InQueue(int val) rear=(rear+)%QUEUEMAX;if(front=rear) ntt队列已满! 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() t=queue+front; if(front=QUEUEMAX) front=0; return t;void DQ() int choice; int
6、out5; int in5=5,4,3,2,1; int t,pos=0,i;for(i=0;iwhile(i) ntt 队 列 子 系 统 ntt*ntt* 1-进 队 *ntt* 2-出 队 *ntt* 3-读 队 头 元 素 *ntt* 4-显 示 *ntt* 5-双 队 列 *ntt* 6-返 回 *ntt 请选择菜单号(0-5):%cswitch(choice) case1: InQueue(q);break; case2 if(OutQueue(q,&val)=0) printf( elsentt出队元素为: %d,val);3 ReadFront(q);case4 ShowQue
7、ue(q);5 DQ();0 i=0;default:; if(choice=|choice=) nntt按【Enter】键继续,按任意键返回主菜单,n w=getchar(); if(w!=xA4. 测试数据与实验结果(可以抓图粘贴)5.结果分析与实验体会 程序成功运行,结果准确,这个实验式书上原来的程序,我在看题目的过程中觉得每个程序分开来其实不难。 而且刚刚看过栈相关函数,所以觉得栈和队列处理有很多共同之处,看起来就相对简单了。进队和出队时要判断队满和队空,而且判断方法和栈的处理有一定区别,这个值得注意。读队首元素时也要记得判断队是否为空,队列只能单端输入,但是可以双端输出,我们可以选择在队尾输出或者队首输出。在输出队列元素时,队列头尾两个指针要注意,很容易出错,一不小心就会使元素不能调用。我们在编写程序时更应该全神贯注,否则容易出错,后面检查时错误较多会影响我们编程的积极性,而且不易发现。所以我们在编程时能不错尽量不要出错。最后,我觉得这个验证性实验很有意义,我们对队列的性质更加了解了。