队列子系统.docx

上传人:b****5 文档编号:7384593 上传时间:2023-01-23 格式:DOCX 页数:9 大小:42KB
下载 相关 举报
队列子系统.docx_第1页
第1页 / 共9页
队列子系统.docx_第2页
第2页 / 共9页
队列子系统.docx_第3页
第3页 / 共9页
队列子系统.docx_第4页
第4页 / 共9页
队列子系统.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

队列子系统.docx

《队列子系统.docx》由会员分享,可在线阅读,更多相关《队列子系统.docx(9页珍藏版)》请在冰豆网上搜索。

队列子系统.docx

队列子系统

电子信息学院

实验报告书

课程名:

数据结构

题目:

队列子系统

实验类别验证

班级:

BX1001

学号:

101003020141

姓名:

赵艳

 

2011年10月11日

1、实验目的

(1)掌握栈的特点及其描述方法;

(2)用链式存储结构实现一个队列;

(3)掌握队列的各种基本操作;

(4)掌握队列的简单应用程序。

2、实验内容

(1)设计一个字符型的链队列。

(2)编写进队、出队、读队头元素、显示队列中全部元素的程序。

(3)设计一个输入限制性的双队列,要求:

输入只能在一端进行,而输出可以选择从队头输出或队尾输出,全部选择完毕后能显示所选择的输出结果。

设计一个选择式菜单,以菜单方式选择队列的各种基本操作。

菜单形式如下:

队列子系统

*********************************************

*1---------进队*

*2---------出队*

*3---------读队头元素*

*4---------显示*

*5---------双队列*

*0---------退出*

**********************************************

请选择菜单号(0—5):

3、实验步骤和源程序

(1)实验步骤

开始定义队列元素的类型,然后定义五个函数,分别是进队函数、出队函数、显示队列函数、读队首元素函数、从两端输出队列函数,最后是主函数对这几个函数的调用。

进栈函数主要是开辟空间,构造新结点,并将新结点插入队尾。

出栈是通过将队头结点从队列中断开,最后一个结点出队回收头结点来实现。

读队头函数是通过断开队头结点,赋值于x带回主调函数来实现。

从队尾出队和从队头出队过程相似,都是首先判断队是否为空,再使元素出队来实现的。

主函数是运用printf()创造一个选择菜单还有switch()选择语句以及对定义过的函数的调用来实现的。

(2)源程序

#include

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;

p->next=NULL;

if(q->front==NULL)

q->front=p;

elseq->rear->next=p;

q->rear=p;

if(p)

printf("\n\t\t%d进队成功!

",x);

}

intOutQueue(LinkQueue*q,int*v)

{QueueNode*p;

if(q->front==NULL)

return0;

else

{p=q->front;

*v=p->data;

q->front=p->next;

if(q->front=NULL)

q->rear=NULL;

deletep;

return1;

}

}

voidShowQueue(LinkQueue*q)

{QueueNode*p=q->front;

if(p==NULL)

printf("\n\t\t队列为空!

\n");

else

{printf("\n\t\t队列中的元素为:

");

while(p!

=NULL)

{printf("%6d",p->data);

p=p->next;

}

printf("\n");

}

}

voidReadFront(LinkQueue*q)

{if(q==NULL||q->front==NULL)

printf("\n\t\t队列为空!

没有队顶元素!

\n");

else

printf("\n\t\t队首元素是:

%4d\n",q->front->data);}

#defineQUEUEMAX20

intqueue[QUEUEMAX];

intfront=-1;

intrear=-1;

voidInQueue(intval)

{rear=(rear++)%QUEUEMAX;

if(front==rear)

printf("\n\t\t队列已满!

");

else

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()

{intt;

if(front==rear)

return-1;

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]);

printf("\n\t\t初始化顺序是:

");

for(i=0;i<5;i++)

printf("[%d]",in[i]);

printf("\n\n\t\t1------从头出队2------从尾出队\n\n");

while(front!

=rear)

{printf("\t\t请输入选择(1或2):

");

scanf("%d",&choice);

switch(choice)

{case1:

t=OutQueue_front();

out[pos++]=t;

break;

case2:

t=OutQueue_rear();

out[pos++]=t;

break;

}

}

printf("\n\t\t数据输出顺序是:

");

for(i=0;i<5;i++)

printf("[%d]",out[i]);

printf("\n");

getchar();

}

voidmain()

{LinkQueue*q=newLinkQueue;

intval,i=1;

charw,choice;

q->front=q->rear=NULL;

while(i)

{

printf("\n");

printf("\n\t\t队列子系统");

printf("\n\t\t**************************************************************");

printf("\n\t\t*1------进队*");

printf("\n\t\t*2------出队*");

printf("\n\t\t*3------读队头元素*");

printf("\n\t\t*4------显示*");

printf("\n\t\t*5------双队列*");

printf("\n\t\t*6------返回*");

printf("\n\t\t**************************************************************");

printf("\n\t\t请选择菜单号(0--5):

");

scanf("%c",&choice);getchar();

switch(choice)

{case'1':

InQueue(q);break;

case'2':

if(OutQueue(q,&val)==0)

printf("\n\t\t队列为空!

\n");

else

printf("\n\t\t出队元素为:

%d",val);

break;

case'3':

ReadFront(q);

break;

case'4':

ShowQueue(q);

break;

case'5':

DQ();

break;

case'0':

i=0;

break;

default:

;

}

if(choice=='1'||choice=='2'||choice=='3'||choice=='4'||choice=='5')

{printf("\n\n\t\t按【Enter】键继续,按任意键返回主菜单,\n");

w=getchar();

if(w!

='\xA')

i=0;

}

}

}

4.测试数据与实验结果(可以抓图粘贴)

5.结果分析与实验体会

程序成功运行,结果准确,这个实验式书上原来的程序,我在看题目的过程中觉得每个程序分开来其实不难。

而且刚刚看过栈相关函数,所以觉得栈和队列处理有很多共同之处,看起来就相对简单了。

进队和出队时要判断队满和队空,而且判断方法和栈的处理有一定区别,这个值得注意。

读队首元素时也要记得判断队是否为空,队列只能单端输入,但是可以双端输出,我们可以选择在队尾输出或者队首输出。

在输出队列元素时,队列头尾两个指针要注意,很容易出错,一不小心就会使元素不能调用。

我们在编写程序时更应该全神贯注,否则容易出错,后面检查时错误较多会影响我们编程的积极性,而且不易发现。

所以我们在编程时能不错尽量不要出错。

最后,我觉得这个验证性实验很有意义,我们对队列的性质更加了解了。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 学科竞赛

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1