队列的基本操作及其应用

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

广西工学院计算机学院

《数据结构》课程实验报告书实验四队列的基本操作及其应用

学生姓名:李四

学号:2012

班级:计Y124

指导老师:王日凤

专业:计算机学院软件学院

提交日期:2013年6月20日

1.实验目的

1)通过对队列特点的分析,掌握队列的存储结构及其基本操作,学会定义队列的顺序存储结构和链式存储结构,在实际问题中灵活运用。

2)掌握队列先进先出的特点,掌握队列的基本操作,如出队列、入队列、判队列空、判队列满等,熟悉各种操作的实现方法。

3)通过具体的应用实例,进一步熟悉和掌握队列的实际应用。

2.实验内容

(1)建立一个含n个数据的队列,实现队列的基本操作。包括:

▪//1. 初始化,构造一个空队列

void initQueue(Queue &Q)

▪//2. 判断队列空, 空则返回true

bool QueueEmpty(seqQueue &Q)

▪//3. 判断队列满, 满则返回true

bool QueueFull(seqQueue &Q)

▪//4. 取队头元素, 用x返回队头元素,返回true;空队列则返回false

Bool QueueHead(seqQueue &Q, elementType &x)

▪//5. 入队列,在队尾插入新元素x (流程图)

bool pushQueue (seqQueue &Q, elementType x)

▪//6. 出队列,用x带回队头元素,并在队头删除,返回true,队列空则返回false(流程图)bool popQueue (seqQueue &Q, elementType &x)

▪//7. 输出队列,从队头到队尾依次输出

void printQueue(seqQueue Q)

(2)队列应用:利用队列操作打印杨辉三角形的前n行(如n=7)。

3.实验要求

(1)上机前交实验源程序(纸质版),由学习委员统一收好交老师(附上不交同学名单)。

(2)用一切你能想到的办法解决遇到的问题,培养解决问题的能力。

(3)实验课上进行答辩。

(4)实验报告当场交。报告内容包括:实验目的、实验内容、实验代码、实验输入输出结果以及实验体会供五部分。

3.主要算法

3.1 顺序存储结构

(1)结构定义:

#include

#include

#include

#include//各个头文件

#define OK 1

#define ERROR 0

#define OVERFLOW -2//定义宏参

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

typedef int QElemType;//引用整型数据类型别名

//顺序表的储存结构

typedef struct

{

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

int front;//头指针

int rear;//尾指针

}SqQueue;

int N;

//======================函数声明=========================// int InitQueue(SqQueue &Q);//初始化

void creatQueue(SqQueue &Q,int n);//创建

int QueueLength(SqQueue &Q);//求长度

void EnQueue(SqQueue &Q,QElemType e);//入队

int DeQueue(SqQueue &Q);//出队

int QueueTraverse(SqQueue &Q);//显示队列

int GetHead(SqQueue Q);//取头元素

int DestroyQueue(SqQueue &Q);//销毁顺序表

int ClearQueue(SqQueue &Q);//清空顺序表

int yanghui(int n);//杨辉三角

int ElemptyQueue(SqQueue &Q);//判空

//======================函数声明=========================//

//构造空队列

int InitQueue(SqQueue &Q)

{//操作结果:构造一个空队列Q

printf("输入分配空间大小: ");

scanf(" %d",&N);

Q.base=(QElemType *)malloc(N*sizeof(QElemType));//动态分配内存空间,以下同样

if(!Q.base||N<0||N>MAXQSIZE)

{ //若n值不合理,则返回ERROR,以下同样

printf("构造失败!");

printf("\n\t\t按任意键返回主菜单!");

getch();

return ERROR;

}

Q.front=Q.rear=0;//队列设置为空,以下同样

printf("构造成功!");

printf("\n\t\t按任意键返回主菜单!");

getch();

return OK;

}

//初始化队列

int InitQue(SqQueue &Q,int n)

{ //操作结果:初始化一个空队列

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

if(!Q.base||n<0||n>MAXQSIZE)

return ERROR;

Q.front=Q.rear=0;

return OK;

}

//创建队列

void creatQueue(SqQueue &Q,int n)

{ //初始条件:Q已经存在

//操作结果:向队列输入n个元素

int m;

if(!Q.base||n<0||n>N)

{

printf("初始化未完成或超出队列长度,无法创建!");

printf("\n\t\t按任意键返回主菜单!");

getch();

return;

}

相关文档
最新文档