试验 循环队列的基本操作及应用

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

数据结构实验报告

--—-试验三循环队列的基本操作及应用

一、问题描述:

熟悉并掌握循环队列的相关操作,自己设计程序,实现循环队列的构造、清空、销毁及队列元素的插入和删除等相关操作。

二、数据结构设计:

#define MAXQSIZE 10 //最大队列长度

struct SqQueue

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

Int front; //头指针,若队列不空,只想对列头元素

int rear;//尾指针,若队列不空,指向队列尾元素的

//下一个位置

};

三、功能设计:

程序中所涉及到的函数如下:

Status InitQueue(SqQueue &Q) //构造一个空队列Q Status DestroyQueue(SqQueue&Q) //销毁队列Q,Q 不再存在

Status ClearQueue(SqQueue &Q) //将Q清为空队列

Status QueueEmpty(SqQueue Q)//若队列Q

为空队列,则

//返回TRUE,否则返回FALSE

int QueueLength(SqQueue Q) //返回Q的元素个数,即队列长度

Status GetHead(SqQueueQ,QElemType &e)//若队列不空,则用e返回Q的对

//头元素,并返回OK,否则返回ERROR

Status EnQueue(SqQueue &Q,QElemType e)//插入元素e为Q的新的队尾元素

Status DeQueue(SqQueue&Q,QElemType &e)//若队列不空,则删除Q的队头

//元素,用e返回其值,并返回

//OK,否则返回ERROR

Status QueueTraverse(SqQueue Q,void(*vi)(QElemType))//从队头到队尾依次

//对队列Q中每个元素调用函数

//vi()。一旦vi失败,则操作失败

四、源程序:

//c1.h(程序名)

#include〈string.h>

#include〈ctype。h>

#include // malloc()等

#include

#include〈stdio.h> //EOF(=^Z或F6),NULL

#include<stdlib。h〉// atoi()

#include〈io.h> // eof()

#include〈math。h〉//floor(),ceil(),abs()

#include<process。h〉// exit()

#include // cout,cin

// 函数结果状态代码

#define TRUE 1

#define FALSE 0

#define OK 1

#define ERROR0

#defineINFEASIBLE-1

//#define OVERFLOW—2 因为在math.h中已定义OVERFLOW的值为3,故去掉此

//行

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

typedef int Boolean; // Boolean是布尔类型,其值是TRUE或FALSE

// c3-3。h

#define MAXQSIZE 10

struct SqQueue

QElemType *base;

ﻩint front;

ﻩint rear;

};

#include"c1。h”

typedef int QElemType;

#include"c3—3.h”

StatusInitQueue(SqQueue&Q)

{//构造一个空队列Q

ﻩQ.base=(QElemType*)malloc(MAXQSIZE*sizeof(QElemType));ﻩif(!Q.base)//储存分配失败

exit(OVERFLOW);

Q.front=Q.rear=0;

return OK;

}

Status DestroyQueue(SqQueue &Q)

{//销毁队列Q,Q不再存在

ﻩif(Q。base)

free(Q.base);

ﻩQ.base=NULL;

ﻩQ.front=Q.rear=0;

return OK;

}

Status ClearQueue(SqQueue &Q)

{//将Q清为空队列

ﻩQ.front=Q.rear=0;

return OK;

}

Status QueueEmpty(SqQueue Q)

{//若队列Q为空队列,则返回TREU,否则返回FALSE

if(Q.front==Q.rear)//队列空的标志

ﻩreturn TRUE;

ﻩelse

ﻩﻩreturn FALSE;

int QueueLength(SqQueue Q)

{//Q

return(Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;

Status GetHead(SqQueue Q,QElemType &e)

{//

ﻩif(Q。front==Q.rear)//队列空

ﻩﻩreturn ERROR;

e=*(Q.base+Q.front);

return OK;

Status EnQueue(SqQueue &Q,QElemType e)

相关文档
最新文档