队列存储与操作实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验四队列存储与操作
一. 实验目的
1、掌握队列顺序存储结构(循环队列)及实现及操作
2、掌握队列的链接存储结构及实现及操作
二. 实验内容
1、建立一个空顺序存储结构队列;对已建立的队列进行插入、删除、取队头元素等基本操作。
2、建立一个空链式存储结构队列;对已建立的队列进行插入、删除、取队头元素等基本操作。
三、详细设计:
1、顺序队列的实现:
#include
using namespace std;
const int Size=100;
typedef char DataType;
class CirQueue
{
public:
CirQueue()
{
front=rear=0;//构造队列,初始化一个空的循环队列,front和rear指向
}
~CirQueue(){}
void EnQueue(DataType x)
{
if((rear+1)%Size==front)
{
cout<<"队列已经满了"< return; } rear=(rear+1)%Size;//队尾指针在循环的意义下加 data[rear]=x; cout< return; } DataType GetQueue()//取队头 { if(isEmpty()) { cout<<"队列为空"< return 0; } int i; i=(front+1)%Size; return data[i]; } DataType DeQueue() { if(isEmpty()) { cout<<"队列为空"< return 0; } front=(front+1)%Size;//队头指针在循环的意义下加 return data[front]; } int isEmpty()//是否为空 { if(front==rear) { return 1; } else{ return 0; } } private: DataType data[Size]; int front,rear; }; int main() { CirQueue a; int index; DataType temp; do { cout<<"**********************************"< cout<<"1、入队操作"< cout<<"2、取队头操作"< cout<<"3、出队操作"< cout<<"4、判断队列是否为空"< cout<<"5、退出"< cout<<"**********************************"< cin>>index; if(index==5){return 0;} switch(index) { case 1: cout<<"请输入要入队的元素"< cin>>temp; a.EnQueue(temp); break; case 2: temp=a.GetQueue(); if(temp!=0) { cout<<"队头的元素为"< } break; case 3: temp=a.DeQueue(); if(temp!=0) { cout<<"出队的元素为"< } break; case 4: bool temp; temp=a.isEmpty(); if(temp) { cout<<"空队"< }else{ cout<<"非空队"< } break; } }while(index); return 0; } 2、链队列的实现: #include using namespace std; const int Size=100; typedef char DataType; struct Node { DataType data; Node *next; }; class LinkQueue { public: LinkQueue() { auto head=new Node; head->next=NULL; front=rear=head; } ~LinkQueue(){} void EnQueue(DataType x) { auto s=new Node; s->data=x; s->next=NULL;//申Θ?请?一?个?数簓据Y域 ?为aX的?结á点?s rear->next=s; rear=s; } DataType GetQueue()//取?队ó头 ? { if(isEmpty()) { cout<<"队ó列 为a空?"< return 0; }