验证性实验4 队列子系统文档格式.docx
- 文档编号:20021770
- 上传时间:2023-01-15
- 格式:DOCX
- 页数:9
- 大小:40.04KB
验证性实验4 队列子系统文档格式.docx
《验证性实验4 队列子系统文档格式.docx》由会员分享,可在线阅读,更多相关《验证性实验4 队列子系统文档格式.docx(9页珍藏版)》请在冰豆网上搜索。
(3)设计一个输入限制性的双队列,要求:
①输入只能在一端进行,而输出可以选择从队头输出或队尾输出,全部选择完毕后能显示所选择的输出结果。
②设计一个选择式菜单,以菜单方式选择队列的各种基本操作。
菜单形式如下:
队列子系统
*********************************************
*1---------进队*
*2---------出队*
*3---------读队头元素*
*4---------显示*
*5---------双队列*
*0---------退出*
**********************************************
请选择菜单号(0—5):
3、实验步骤和源程序
(1)实验步骤
开始定义队列元素的类型,然后定义五个函数,分别是进队函数、出队函数、显示队列函数、读队首元素函数、从两端输出队列函数,最后是主函数对这几个函数的调用。
进栈函数主要是开辟空间,构造新结点,并将新结点插入队尾。
出栈是通过将队头结点从队列中断开,最后一个结点出队回收头结点来实现。
读队头函数是通过断开队头结点,赋值于x带回主调函数来实现。
从队尾出队和从队头出队过程相似,都是首先判断队是否为空,再使元素出队来实现的。
主函数是运用printf()创造一个选择菜单还有switch()选择语句以及对定义过的函数的调用来实现的。
(2)源程序
#include<
stdio.h>
typedefstructqueuenode
{intdata;
structqueuenode*next;
}QueueNode;
typedefstruct
{QueueNode*front,*rear;
}
LinkQueue;
voidInQueue(LinkQueue*q)
{intx;
QueueNode*p=newQueueNode;
printf("
\n\t\t请键入一个整数:
"
);
scanf("
%d"
&
x);
getchar();
p->
data=x;
next=NULL;
if(q->
front==NULL)
q->
front=p;
elseq->
rear->
next=p;
q->
rear=p;
if(p)
\n\t\t%d进队成功!
"
x);
}
intOutQueue(LinkQueue*q,int*v)
{QueueNode*p;
front==NULL)
return0;
else
{p=q->
front;
*v=p->
data;
front=p->
next;
front=NULL)
rear=NULL;
deletep;
return1;
}
voidShowQueue(LinkQueue*q)
{QueueNode*p=q->
if(p==NULL)
\n\t\t队列为空!
\n"
else
{printf("
\n\t\t队列中的元素为:
while(p!
=NULL)
{printf("
%6d"
p->
data);
p=p->
printf("
voidReadFront(LinkQueue*q)
{if(q==NULL||q->
没有队顶元素!
else
\n\t\t队首元素是:
%4d\n"
q->
front->
#defineQUEUEMAX20
intqueue[QUEUEMAX];
intfront=-1;
intrear=-1;
voidInQueue(intval)
{rear=(rear++)%QUEUEMAX;
if(front==rear)
\n\t\t队列已满!
queue[rear]=val;
}
intOutQueue_rear()
{intt;
if(front==rear)
return-1;
t=queue[rear--];
if(rear<
0&
&
front!
=-1)
rear=QUEUEMAX-1;
returnt;
intOutQueue_front()
t=queue[++front];
if(front==QUEUEMAX)
front=0;
returnt;
voidDQ()
{intchoice;
intout[5];
intin[5]={5,4,3,2,1};
intt,pos=0,i;
for(i=0;
i<
5;
i++)
InQueue(in[i]);
\n\t\t初始化顺序是:
for(i=0;
[%d]"
in[i]);
\n\n\t\t1------从头出队2------从尾出队\n\n"
while(front!
=rear)
\t\t请输入选择(1或2):
choice);
switch(choice)
{case1:
t=OutQueue_front();
out[pos++]=t;
break;
case2:
t=OutQueue_rear();
\n\t\t数据输出顺序是:
out[i]);
getchar();
voidmain()
{LinkQueue*q=newLinkQueue;
intval,i=1;
charw,choice;
front=q->
while(i)
{
\n\t\t队列子系统"
\n\t\t**************************************************************"
\n\t\t*1------进队*"
\n\t\t*2------出队*"
\n\t\t*3------读队头元素*"
\n\t\t*4------显示*"
\n\t\t*5------双队列*"
\n\t\t*6------返回*"
\n\t\t请选择菜单号(0--5):
%c"
switch(choice)
{case'
1'
:
InQueue(q);
break;
case'
2'
if(OutQueue(q,&
val)==0)
printf("
else
\n\t\t出队元素为:
%d"
val);
3'
ReadFront(q);
case'
4'
ShowQueue(q);
5'
DQ();
0'
i=0;
default:
;
if(choice=='
||choice=='
)
\n\n\t\t按【Enter】键继续,按任意键返回主菜单,\n"
w=getchar();
if(w!
='
\xA'
4.测试数据与实验结果(可以抓图粘贴)
5.结果分析与实验体会
程序成功运行,结果准确,这个实验式书上原来的程序,我在看题目的过程中觉得每个程序分开来其实不难。
而且刚刚看过栈相关函数,所以觉得栈和队列处理有很多共同之处,看起来就相对简单了。
进队和出队时要判断队满和队空,而且判断方法和栈的处理有一定区别,这个值得注意。
读队首元素时也要记得判断队是否为空,队列只能单端输入,但是可以双端输出,我们可以选择在队尾输出或者队首输出。
在输出队列元素时,队列头尾两个指针要注意,很容易出错,一不小心就会使元素不能调用。
我们在编写程序时更应该全神贯注,否则容易出错,后面检查时错误较多会影响我们编程的积极性,而且不易发现。
所以我们在编程时能不错尽量不要出错。
最后,我觉得这个验证性实验很有意义,我们对队列的性质更加了解了。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 验证性实验4 队列子系统 验证 实验 队列 子系统