队列存储与操作实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验四队列存储与操作

一、实验目的

1、掌握队列的特点(先进先出FIFO)及基本操作,如入队、出队等,队列顺序存储结构、链式存储结构和循环队列的实现,以便在实际问题背景下灵活运用。

二、实验内容

1.顺序队列的实现和运算

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

3.循环队列的实现和运

三、详细设计:

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

#include

#define OK 1

#define ERROR 0

typedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等typedef int QElemType;

#define MAXQSIZE 100 // 最大队列长度(对于循环队列,最大队列长度要减1)

typedef struct

{

QElemType *base; // 初始化的动态分配存储空间

int front; // 头指针,若队列不空,指向队列头元素

int rear; // 尾指针,若队列不空,指向队列尾元素的下一个位置

}SqQueue;

Status InitQueue(SqQueue &Q)

{

// 构造一个空队列Q,该队列预定义大小为MAXQSIZE

Q.base = (QElemType *)malloc (MAXQSIZE * sizeof(QElemType));

if(!Q.base) return ERROR;

Q.front = Q.rear = 0;

return OK;

}

Status EnQueue(SqQueue &Q,QElemType e)

{

// 插入元素e为Q的新的队尾元素

if((Q.rear + 1)% MAXQSIZE == Q.front)return ERROR;

Q.base[Q.rear] = e ;

Q.rear = (Q.rear + 1) % MAXQSIZE;

return OK;

}

Status DeQueue(SqQueue &Q, QElemType &e)

{

// 若队列不空, 则删除Q的队头元素, 用e返回其值, 并返回OK; 否则返回ERROR

if(Q.front == Q.rear) return ERROR;

e = Q.base[Q.front];

Q.front = (Q.front +1) % MAXQSIZE;

相关文档
最新文档