数据结构队列实验报告Word文件下载.docx

上传人:b****2 文档编号:15236265 上传时间:2022-10-28 格式:DOCX 页数:50 大小:1.99MB
下载 相关 举报
数据结构队列实验报告Word文件下载.docx_第1页
第1页 / 共50页
数据结构队列实验报告Word文件下载.docx_第2页
第2页 / 共50页
数据结构队列实验报告Word文件下载.docx_第3页
第3页 / 共50页
数据结构队列实验报告Word文件下载.docx_第4页
第4页 / 共50页
数据结构队列实验报告Word文件下载.docx_第5页
第5页 / 共50页
点击查看更多>>
下载资源
资源描述

数据结构队列实验报告Word文件下载.docx

《数据结构队列实验报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据结构队列实验报告Word文件下载.docx(50页珍藏版)》请在冰豆网上搜索。

数据结构队列实验报告Word文件下载.docx

5

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

2.顺序队列

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

2)演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“欢迎来到链队列”“元素入队”“元素出队”“取得头结点”“输出显示”之后。

欢迎来到顺序队列

1入队

2出队

3判断是否为空

4取得头结点

5输出显示

6退出顺序队列

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

3循环队列

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

每当删除队列头元素时,“头指针增1”。

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

欢迎来到循环队列

2.概要设计(xxxx)

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

ADTQueue{

数据对象:

D={ai|ai∈ElemSet,i=1,2,3...,n,n>

=0}

数据关系:

R={<

ai-1,ai>

|ai-1,ai∈D,i=2,...,n}

基本操作:

InitQueue(&

Q)

操作结果:

构造一个空队列。

DestroyQueue(&

初始条件:

队列Q已存在。

队列Q已被销毁。

ClearQueue(&

将Q清为空队列。

QueueEmpty(Q)

若Q为空队列,则返回TRUE,否则FALSE。

QueueLength(Q)

返回Q元素的个数,即队列的长度。

GetHead(Q,&

e)

初始条件:

Q为非空队列。

用e返回Q的队头元素。

EnQueue(&

Q,e)

插入e返回Q的新的队尾元素。

DeQueue(&

Q,&

删除Q的队头元素,并用e返回其值。

}ADTQueue

2.单链队列

typedefstructQNode

{

QElemType;

structQNode*next;

//指针域

}QNode,*QueuePtr;

Typedefstruct{

QueuePtrfront;

QueuePtrrear;

}LinkQueue;

StatusInitQueue(LinkQueue&

//构造一个空队列。

StatusDestroyQueue(LinkQueue&

//销毁队列Q,Q不存在。

StatusClearQueue(LinkQueue&

//将Q清为空队列。

StatusQueueEmpty(LinkQueueQ)

//若Q为空队列,则返回TRUE,否则FALSE。

intQueueLength(LinkQueueQ)

//返回Q元素的个数,即队列的长度。

StatusGetHead(LinkQueueQ,QElemType&

//若队列不为空,则用e返回Q的队头元素,并返回OK;

否则返回ERROR。

StatusEnQueue(LinkQueue&

Q,QElemTypee)

//插入e返回Q的新的队尾元素。

StatusDeQueue(LinkQueue&

Q,QElemType&

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

三.详细设计(xxx)

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

1)元素的类型

typedefstruct

{

Datatypedata[MAXSIZE];

intfront,rear;

}Squeue;

2)空的队列的构造

voidInitSqueue(Squeue*p)/*初始化队列*/

p->

front=0;

rear=0;

}

3)元素的入队

intEnsqueue1(Squeue1*q,Datatypee)/*入队*/

if((q->

rear+1)%MAXSIZE==q->

front)

printf("

\n队列已满\n"

);

return0;

4)元素的出队

intDeSqueue1(Squeue1*q,Datatype*e)/*出队*/

if(q->

front==q->

rear)

队列已空,无法出队!

"

*e=q->

data[q->

front];

q->

front=(q->

front+1)%MAXSIZE;

return1;

5)判断队列是否为空

intQueueEmpty1(Squeue1q)//判断是否为空

if(q.front==q.rear)

else

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

intGethead1(Squeue1*q,Datatype*e)//取对头元素

rear)

队列已空,无法出队!

7)遍历顺序队列的算法

voiddisplay1(Squeue1q)//遍历顺序对列

此队列数据为:

\n"

if(q.front==q.rear)

此队列为空!

while(q.front<

q.rear)

%d\t"

q.data[q.front]);

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

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

1)构造空队列的算法

voidInitQueue2(LinkQueue*q)

{//构造一个空队列Q

front=q->

rear=malloc(sizeof(QNode));

if(!

q->

exit

(1);

front->

next=NULL;

}

2)元素的入队算法

voidEnQueue2(LinkQueue*q,QElemTypee)//将元素e进队

QueuePtrp;

p=(QueuePtr)malloc(sizeof(QNode));

//创建新节点

p)//如果内存分配成功

exit

(1);

p->

data=e;

//初始化新节点数据为e

q->

rear->

next=p;

rear=p;

3)元素的出队的算法

intDeQueue2(LinkQueue*q,QElemTypee)//队头结点出队,将出队的元素存入e

if(q->

rear)//队列为空

return0;

p=q->

next;

//初始化temp为要出队的结点指针

next==q->

rear)//要出队的结点为最后一个结点

rear=q->

front;

e=p->

data;

//要出队的数据元素为e

next=p->

//使下一个结点变为对头

free(p);

//删除要出队的结点

returne;

4)队列的长度算法

voidQueueLength2(LinkQueue*q)//返回队列长度

inti=0;

while(p)

++i;

p=p->

链队列长度为:

%d\n"

i);

5)队列的销毁

voidDestroyQueue2(LinkQueue*q)

while(q->

free(q->

front);

rear;

if(!

free(q->

rear);

free(q->

6)队列的输出算法

voidoutput2(LinkQueue*q)//输出队列

链队列元素依次为:

printf("

%d->

p->

data);

7)队列的清空的算法

voidClear2(LinkQueue*q)//清空队列

QueuePtrtemp=q->

while(temp)

QueuePtrtp=temp;

temp=temp->

free(tp);

temp=q->

rear=NULL;

free(temp);

8)返回对头元素的算法

int

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 研究生入学考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1