队列实验报告.docx

上传人:b****5 文档编号:27779297 上传时间:2023-07-05 格式:DOCX 页数:11 大小:75KB
下载 相关 举报
队列实验报告.docx_第1页
第1页 / 共11页
队列实验报告.docx_第2页
第2页 / 共11页
队列实验报告.docx_第3页
第3页 / 共11页
队列实验报告.docx_第4页
第4页 / 共11页
队列实验报告.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

队列实验报告.docx

《队列实验报告.docx》由会员分享,可在线阅读,更多相关《队列实验报告.docx(11页珍藏版)》请在冰豆网上搜索。

队列实验报告.docx

队列实验报告

一.实验项目名称

循环队列和链式队列的创建

二、实验目的

1、掌握队列的特点(先进先出FIFO)及基本操作,如入队、出队等,

2、队列顺序存储结构、链式存储结构和循环队列的实现,以便在实际问题背景下灵活应用。

三、实验内容

1.链式队列的实现和运算

2.循环队列的实现和运算

四、主要仪器设备及耗材

VC++6.0运行环境实现其操作

五.程序算法

(1)循环队列操作的算法

1>进队列

Voidenqueue(seqqueue&q,elemtypex)

{

if((q.rear+1)%maxsize==q.front)

cout<<”overflow”;

else{

q.rear=(q.rear+1)%maxsize;//编号加1或循环回第一个单元

q.queue[q.rear]=x;

}

}

2>出队列

Voiddlqueue(seqqueue&q)

{

if(q.rear==q.front)cout<<”underflow”;

else

q.front=(q.front+1)%maxsize;

}

3>取对头元素

elemtypegethead(seqqueueq)

{if(q.rear==q.front)

{cout<<”underflow”;

returnNULL;}

elsereturnq.queue[(q.front+1)%maxsize];

//front指向队头前一个位置

}

4>判队列空否

intempty(seqqueueq)

{

if(q.rear==q.front)reurn1;

elsereturn0;

}

(2).链队列操作的算法

1>.链队列上的初始化

voidINIQUEUE(linkqueue&s)

{link*p;

p=newlink;

p->next=NULL;//p是结构体指针类型,用->

s.front=p;//s是结构体变量,用.

s.rear=p;//头尾指针都指向头结点

}

2>.入队列

voidpush(linkqueue&s,elemtypex)

{

link*p;//p是结构体指针类型,用->

 p=newlink;

p->data=x;

p->next=s.rear->next;//s是结构体变量,用.

s.rear->next=p;

s.rear=p;//插入最后

}

3>判队空

intempty(linkqueues)

{if(s.front==s.rear)return1;

elsereturn0;

}

4>.取队头元素

elemtypegethead(linkqueues)

{

if(s.front==s.rear)returnNULL;

elseretuens.front->next->data;

}

5>.出队列

voidpop(linkqueue&s)

{link*p;

p=s.front->next;

if(p->next==NULL)//链队列中只有一个元素,需要修改rear指针{s.front->next=NULL;

s.rear=s.front;}

else

s.front->next=p->next;//rear不用变

delete(p);

}

六.程序源代码

a.循环队列源代码

#include

#defineMAXN20

structseq

{

charqueue[MAXN];

intfront,rear;

};

voidiniq(seq&q)

{

q.front=q.rear=MAXN-1;

}

voidenq(seq&q,charx)

{

if((q.rear+1)%MAXN==q.front)

cout<<"overflow";

else{

q.rear=(q.rear+1)%MAXN;

q.queue[q.rear]=x;

}

//return(0);

}

voiddlq(seq&q)

{

if(q.rear==q.front)

cout<<"underflow";

else

q.front=(q.front+1)%MAXN;

}

 

intgethead(seq&q)//取队头元素

{if(q.rear==q.front)//判断是否队列为空

cout<<"underflow";

else

returnq.queue[(q.front+1)%MAXN];

}

main()

{seqq;

inti,y;

iniq(q);

cout<<"输入元素入队0为止"<

cin>>i;

while(i)

{

enq(q,i);

cin>>i;

}

y=gethead(q);

cout<<"队头为="<

dlq(q);

y=gethead(q);

cout<<"执行一次删除队头后,队头为="<

}

b.链队列的源代码

#include

typedefstructQNode

{

chardata;

QNode*next;

}QNode,*QueuePtr;

typedefstruct

{

QueuePtrfront;

QueuePtrrear;

}LinkQueue;

InitQueue(LinkQueue&Q)

{

Q.front=Q.rear=newQNode;

Q.front->next=NULL;

return0;

}

EnQueue(LinkQueue&Q,chare)

{

QueuePtrp;

p=newQNode;

p->data=e;

p->next=NULL;

Q.rear->next=p;

Q.rear=p;

return0;

}

voiddisp(LinkQueue&Q)//打印队列

{

QueuePtrp;

p=Q.front->next;

while(p!

=NULL)

{

cout<data<<"->";

p=p->next;

}

}

 

DeQueue(LinkQueue&Q,char&e)

{

QueuePtrp;

if(Q.front==Q.rear)return1;

p=Q.front->next;

e=p->data;

Q.front->next=p->next;

if(Q.rear==p)

Q.rear=Q.front;

deletep;

return0;

}

voidmain()

{

LinkQueueQ;

chare,e1;

InitQueue(Q);

cout<<"输入队列元素,0时结束:

"<

cin>>e;

while(e!

='0'){

EnQueue(Q,e);

cin>>e;

}

cout<<"队列为:

"<

disp(Q);

DeQueue(Q,e1);

cout<

"<

cout<<"队列为:

"<

disp(Q);

cout<

}

六.程序输入数据及实验结果

a.循环队列实验结果

c.链队列实验结果

七、思考讨论题或体会或对改进实验的建议

(1)体会

a.C++语言知识不懂,需要好好学习;

b.对单链表不够熟悉,要多练习创建单链表及其基本操作。

八、参考资料

a.《数据结构》李根强主编中国国水利水电出版社

b.《C++语言程序设计》郑莉董渊何江舟编清华大学出版社

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

当前位置:首页 > 初中教育 > 数学

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

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