队列实验报告

  • 格式:docx
  • 大小:46.54 KB
  • 文档页数:8

下载文档原格式

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

一.实验项目名称

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

二、实验目的

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

2、队列顺序存储结构、链式存储结构和循环队列的实现,以便在

实际问题背景下灵活应用。

三、实验内容

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

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

四、主要仪器设备及耗材

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

五.程序算法

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

1>进队列

Void enqueue (seqqueue &q, elemtype x)

{

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

cout<< ” overflow”;

else {

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

q.queue[q.rear]=x;

}

}

2>出队列

Void dlqueue(seqqueue &q )

{

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

else

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

}

3>取对头元素

elemtype gethead(seqqueue q )

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

{ cout<<” underflow;”

return NULL;}

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

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

}

4>判队列空否

int empty(seqqueue q )

{

if (q.rear= =q.front)

else return 0;

reurn 1;

}

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

1>.链队列上的初始化

void INIQUEUE( linkqueue&s)

{link *p; p=new

link;

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

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

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

->

}

2>.入队列

void push(linkqueue &s, elemtype x)

{

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

p=new link;

p->data=x;

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

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

.

}

3>判队空

int empty( linkqueue s )

{if (s.front= =s.rear) return 1;

else return 0;

}

4>.取队头元素

elemtype gethead( linkqueue s )

{

if (s.front= =s.rear)

else retuen

return NULL; s.front->next->data;

}

5>.出队列

void pop(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

#define MAXN20

struct seq

{

char queue[MAXN];

int front, rear;

};

void iniq(seq&q)

{

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

}

void enq(seq &q,char x)

{

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

cout<<"overflow";

else {

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

q.queue[q.rear]=x;

}

//return(0);

}

void dlq(seq &q)

{

if (q.rear == q.front)

cout<<"underflow";

else

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

}

int gethead(seq &q)// 取队头元素

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

cout<<"underflow";

else

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

}

main()

{seq q;

int i,y;

iniq(q);

0 为止 "<

cout<<" 输入元素入队

cin>>i;

while(i)

{

enq( q,i);

cin>>i;

}

y=gethead( q);

cout<<" 队头为 ="<

dlq( q);

y=gethead( q);

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

}

b.链队列的源代码

#include

typedef struct QNode

{

char data;

QNode *next;

}QNode,*QueuePtr;

typedef struct

{

QueuePtr front;