数据结构队列实验报告

发布 2019-08-30 21:59:40 阅读 1152

队列实验报告。

小组成员:******xx日期:******xx

1、需求分析(***)

1.链队列。

1)在本演示程序中,首先要链队列添加一个头结点,并判断队列是否为空,它只允许在表的一端进行插入,而在另一端删除元素,允许插入的一段叫队尾,允许删除的一端则为对头,接着访问队列中所有元素,并输出,输出是每个元素之间用空格来完成。最后销毁队列,释放空间。

2)演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“欢迎来到链队列”“元素入队”“元素出队”“销毁队列”“清空队列”之后。由用户在键盘上输入演示程序中规定的运算命令,相应的运算数据和显示结果显示在其后。

3)程序执行的命令包括:

欢迎来到链队列。

1输出队列长度。

2元素入队。

3元素出队。

4销毁队列。

5清空队列。

6对头元素。

7退出链队列。

4)测试数据。入队 1

分别执行“元素入队”“元素出队”“销毁队列”“清空队列”等操作。

2.顺序队列。

1)在本演示程序中,首先要顺序队列添加一个头结点,并判断队列是否为空,它只允许在表的一端进行插入,而在另一端删除元素,允许插入的一段叫队尾,允许删除的一端则为对头,接着访问队列中所有元素,并输出,输出是每个元素之间用空格来完成。

2)演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“欢迎来到链队列”“元素入队”“元素出队”“取得头结点”“输出显示”之后。由用户在键盘上输入演示程序中规定的运算命令,相应的运算数据和显示结果显示在其后。

3)程序执行的命令包括:

欢迎来到顺序队列。

1入队。2出队。

3判断是否为空。

4取得头结点。

5输出显示。

6退出顺序队列。

4)测试数据。入队 1

分别执行“元素入队”“元素出队”等操作。

3循环队列。

1)在本演示程序中,首先要顺序队列添加一个头结点,并判断队列是否为空,初始化建空队列时,令front=rear=0,每当插入新的队列尾元素时,“尾指针增1”;每当删除队列头元素时,“头指针增1”。

接着访问队列中所有元素,并输出,输出是每个元素之间用空格来完成。

2)演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“欢迎来到链队列”“元素入队”“元素出队”“取得头结点”“输出显示”之后。由用户在键盘上输入演示程序中规定的运算命令,相应的运算数据和显示结果显示在其后。

3)程序执行的命令包括:

欢迎来到循环队列。

1入队。2出队。

3判断是否为空。

4取得头结点。

5输出显示。

6退出顺序队列。

4)测试数据。入队 1

分别执行“元素入队”“元素出队”等操作。

2.概要设计(***x)

为实现上述算法,需要顺序表的抽象数据类型,抽象数据类型定义如下:

adt queue

数据关系: r=

基本操作:initqueue (&q)

操作结果:构造一个空队列。

destroyqueue (&q)

初始条件:队列q已存在。

操作结果:队列q已被销毁。

clearqueue(&q)

初始条件:队列q已存在。

操作结果:将q清为空队列。

queueempty(q)

初始条件:队列q已存在。

操作结果:若q为空队列,则返回true,否则false。

queuelength(q)

初始条件:队列q已存在。

操作结果:返回q元素的个数,即队列的长度。

gethead(q,&e)

初始条件:q为非空队列。

操作结果:用e返回q的队头元素。

enqueue (&q,e)

初始条件:队列q已存在。

操作结果:插入e返回q的新的队尾元素。

dequeue (&q,&e)

初始条件:q为非空队列。

操作结果:删除q的队头元素,并用e返回其值。

adt queue

2.单链队列。

typedefstructqnode

qelemtype;

structqnode *next;//指针域。

qnode,*queueptr;

typedefstruct

3)元素的入队。

int ensqueue1(squeue1 *q, datatype e) /入队*/

4)元素的出队。

int desqueue1(squeue1 *q,datatype *e) /出队*/

*e=q->data[q->front];

q->front=(q->front+1)%maxsize;

return 1;

5)判断队列是否为空。

int queueempty1(squeue1 q) /判断是否为空。

6)队头元素的取值的算法。

int gethead1(squeue1 *q,datatype *e) /取对头元素。

7)遍历顺序队列的算法。

void display1(squeue1 q) /遍历顺序对列。

printf("");

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

1)构造空队列的算法。

void initqueue2(linkqueue *q)

//构造一个空队列q

q->front=q->rear=malloc(sizeof(qnode));

if(!q->front)

exit(1);

q->front->next=null;

2)元素的入队算法。

void enqueue2(linkqueue *q, qelemtype e)//将元素e进队。

queueptr p;

p=(queueptr)malloc(sizeof(qnode));创建新节点。

if(!p)//如果内存分配成功。

exit(1);

p->data=e;//初始化新节点数据为e

p->next=null;

q->rear->next=p;

q->rear=p;

3)元素的出队的算法。

int dequeue2(linkqueue *q,qelemtype e)//队头结点出队,将出队的元素存入e

queueptr p;

if(q->front==q->rear)//队列为空。

return 0;

p=q->front->next;//初始化temp为要出队的结点指针。

if(q->front->next==q->rear)//要出队的结点为最后一个结点。

q->rear=q->front;

e=p->data;//要出队的数据元素为e

q->front->next=p->next;//使下一个结点变为对头。

free(p);/删除要出队的结点。

return e;

4)队列的长度算法。

void queuelength2(linkqueue *q)//返回队列长度。

queueptr p;

int i=0;

p=q->front->next;

while(p)

printf("链队列长度为:%d",i);

5)队列的销毁。

void destroyqueue2(linkqueue *q)

while(q->front)

q->rear=q->front->next;

数据结构实验报告排序

昆明理工大学信息工程与自动化学院学生实验报告。2011 2012学年第1学期 课程名称 数据结构 用c语言描述开课实验室 计算中心室 2011年月日。1 实验内容和目的。目的 了解和初步掌握排序的概念和一些有关知识,大体上掌握了排序方法的基本思想 排序过程和实现算法 以及各种算法的时间复杂度和空间复...

数据结构完整实验报告

数据结构与算法。实验报告。实验名称 数据结构基础。实验地点。实验日期 指导教师。学生班级 学生姓名。学生学号。提交日期。2009年12月计算机科学与技术系。实验一学生成绩分析程序4 1.1 上机实验的问题和要求 需求分析4 1.2 程序设计的基本思想,原理和算法描述4 1.3 调试和运行程序过程中产...

2019数据结构实验报告

内容分析 用长度为52的线性表来表示52张牌,每张牌的信息包含两部分 牌的位置序号和牌的正 反标识。由于线性表的长度和表内元素相对固定,因此,线性表可采用顺序存储结构。线性表元素的序号即各张牌的位置序号。其中,card表示牌的位置序号,为方便起见,令其取值为整数1至52。flag表示牌的正 反标识,...