最新队列操作实验报告范文word版 12页Word格式.docx
《最新队列操作实验报告范文word版 12页Word格式.docx》由会员分享,可在线阅读,更多相关《最新队列操作实验报告范文word版 12页Word格式.docx(10页珍藏版)》请在冰豆网上搜索。
实验四队列存储与操作
一.实验目的
1、掌握队列顺序存储结构(循环队列)及实现及操作
2、掌握队列的链接存储结构及实现及操作
二.实验内容
1、建立一个空顺序存储结构队列;
对已建立的队列进行插入、删除、取队头元素等基本操作。
2、建立一个空链式存储结构队列;
三、详细设计:
1、顺序队列的实现:
#include<
iostream>
usingnamespacestd;
constintSize=100;
typedefcharDataType;
classCirQueue
{
public:
CirQueue(){}~CirQueue(){}voidEnQueue(DataTypex){if((rear+1)%Size==front){}cout<
<
"
队列已经满了"
endl;
return;
front=rear=0;
//构造队列,初始化一个空的循环队列,front和rear指向
};
}data[rear]=x;
cout<
x<
已入队"
DataTypeGetQueue()//取队头{}DataTypeDeQueue(){}intisEmpty()//是否为空{}DataTypedata[Size];
intfront,rear;
if(front==rear){}else{}return0;
return1;
if(isEmpty()){}front=(front+1)%Size;
//队头指针在循环的意义下加returndata[front];
队列为空"
return0;
if(isEmpty()){}inti;
i=(front+1)%Size;
returndata[i];
private:
intmain()
intindex;
DataTypetemp;
do{cout<
**********************************"
1、入队操作"
2、取队头操作"
3、出队操作"
4、判断队列是否为空"
5、退出"
cin>
>
index;
if(index==5){return0;
}switch(index){case1:
cout<
请输入要入队的元素"
temp;
a.EnQueue(temp);
break;
temp=a.GetQueue();
if(temp!
=0){}cout<
队头的元素为"
temp<
"
case2:
temp=a.DeQueue();
出队的元素为"
case3:
booltemp;
temp=a.isEmpty();
if(temp){cout<
空队"
非空队"
}else{case4:
}}break;
}while(index);
2、链队列的实现:
#include<
usingnamespacestd;
typedefcharDataType;
structNode
classLinkQueue{
LinkQueue(){}~LinkQueue(){}voidEnQueue(DataTypex){}DataTypeGetQueue()//取?
队ó
头?
{if(isEmpty()){}cout<
列为a空?
autos=newNode;
s->
data=x;
next=NULL;
//申Θ?
请?
一?
个?
数簓据Y域?
为aX的?
结á
点?
srear->
next=s;
rear=s;
autohead=newNode;
head->
front=rear=head;
DataTypedata;
Node*next;
}returnfront->
next->
data;
DataTypeDeQueue(){}intisEmpty()//是?
否?
为a空?
{}Node*front,*rear;
//队ó
和í
尾2指?
针?
if(isEmpty()){}autop=newNode;
//用?
于?
暂Y存?
元a素?
DataTypex;
数簓据Yp=front->
next;
x=p->
front->
next=p->
if(p->
next==NULL){}deletep;
returnx;
rear=front;
intmain(){
LinkQueuea;
intindex;
1、¢入?
操ù
作痢?
篇三:
队列存储与操作实验报告
一、实验目的
1、掌握队列的特点(先进先出FIFO)及基本操作,如入队、出队等,队列顺序存储结构、链式存储结构和循环队列的实现,以便在实际问题背景下灵活运用。
二、实验内容
1.顺序队列的实现和运算
2.链式队列的实现和运算
3.循环队列的实现和运
CirQueue()
front=rear=0;
//构造队列,初,front和rear指向
}
~CirQueue(){}
voidEnQueue(DataTypex)
if((rear+1)%Size==front)
return;
rear=(rear+1)%Size;
//队尾指针在循环的意义下加
data[rear]=x;
DataTypeGetQueue()//取队头
if(isEmpty())
return0;
inti;
i=(front+1)%Size;
returndata[i];
DataTypeDeQueue()
front=(front+1)%Size;
//队头指针在循环的意义下加
returndata[front];
intisEmpty()//是否为空
if(front==rear)
return1;
else{
private:
DataTypedata[Size];
intfront,rear;
CirQueuea;
DataTypetemp;
do
cin>
if(index==5){return0;
switch(index)
case1:
a.EnQueue(temp);
break;
temp=a.GetQueue();
if(temp!
=0)
case3:
temp=a.DeQueue();
case4:
booltemp;
temp=a.isEmpty();
if(temp)
}else{
}while(index);
2、循环队列的实现:
malloc.h>
stdio.h>
#defineOK1
#defineERROR0
typedefintStatus;
//Status是函数的类型,其值是函数结果状态代码,如OK等typedefintQElemType;
#defineMAXQSIZE100//最大队列长度(对于循环队列,最大队列长度要减1)
typedefstruct
QElemType*base;
//初始化的动态分配存储空间
intfront;
//头指针,若队列不空,指向队列头元素
intrear;
//尾指针,若队列不空,指向队列尾元素的下一个位置
}SqQueue;
StatusInitQueue(SqQueue&
Q)
//构造一个空队列Q,该队列预定义大小为MAXQSIZE
Q.base=(QElemType*)malloc(MAXQSIZE*sizeof(QElemType));
if(!
Q.base)returnERROR;
Q.front=Q.rear=0;
returnOK;
StatusEnQueue(SqQueue&
Q,QElemTypee)
//插入元素e为Q的新的队尾元素
if((Q.rear+1)%MAXQSIZE==Q.front)returnERROR;
Q.base[Q.rear]=e;
Q.rear=(Q.rear+1)%MAXQSIZE;
StatusDeQueue(SqQueue&
Q,QElemType&
e)
//若队列不空,则删除Q的队头元素,用e返回其值,并返回OK;
否则返回ERROR
if(Q.front==Q.rear)returnERROR;
e=Q.base[Q.front];
Q.front=(Q.front+1)%MAXQSIZE;
StatusGetHead(SqQueueQ,QElemType&
//若队列不空,则用e返回队头元素,并返回OK,否则返回ERROR
intQueueLength(SqQueueQ)
//返回Q的元素个数
return(Q.rear+MAXQSIZE-Q.front)%MAXQSIZE;
StatusQueueTraverse(SqQueueQ)
//若队列不空,则从队头到队尾依次输出各个队列元素,并返回OK;
否则返回ERROR.
i=Q.front;
if(Q.front==Q.rear)printf("
空队!
);
printf("
队列为is:
while(i<
Q.rear)
%d"
Q.base[i]);
i=i+1;
\n"
inta;
SqQueueS;
QElemTypex,e;
if(InitQueue(S))//判断顺序表是否创建成功