数据结构队列实验报告.docx

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

数据结构队列实验报告.docx

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

数据结构队列实验报告.docx

数据结构队列实验报告

队列实验报告

小组成员:

xxxxxxxx日期:

xxxxxxxx

1、需求分析(xxx)

1.链队列

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

最后销毁队列,释放空间。

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

由用户在键盘上输入演示程序中规定的运算命令,相应的运算数据和显示结果显示在其后。

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

欢迎来到链队列

1输出队列长度

2元素入队

3元素出队

4销毁队列

5清空队列

6对头元素

7退出链队列

4)测试数据

入队1

2

3

4

5

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

2.顺序队列

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

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

由用户在键盘上输入演示程序中规定的运算命令,相应的运算数据和显示结果显示在其后。

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

欢迎来到顺序队列

1入队

2出队

3判断是否为空

4取得头结点

5输出显示

6退出顺序队列

4)测试数据

入队1

2

3

4

5

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

3循环队列

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

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

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

由用户在键盘上输入演示程序中规定的运算命令,相应的运算数据和显示结果显示在其后。

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

欢迎来到循环队列

1入队

2出队

3判断是否为空

4取得头结点

5输出显示

6退出顺序队列

4)测试数据

入队1

2

3

4

5

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

2.概要设计(xxxx)

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

ADTQueue{

数据对象:

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

数据关系:

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

基本操作:

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返回其值。

}ADTQueue

2.单链队列

typedefstructQNode

{

QElemType;

structQNode*next;//指针域

}QNode,*QueuePtr;

Typedefstruct{

QueuePtrfront;

QueuePtrrear;

}LinkQueue;

StatusInitQueue(LinkQueue&Q)

//构造一个空队列。

StatusDestroyQueue(LinkQueue&Q)

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

StatusClearQueue(LinkQueue&Q)

//将Q清为空队列。

StatusQueueEmpty(LinkQueueQ)

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

intQueueLength(LinkQueueQ)

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

StatusGetHead(LinkQueueQ,QElemType&e)

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

StatusEnQueue(LinkQueue&Q,QElemTypee)

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

StatusDeQueue(LinkQueue&Q,QElemType&e)

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

三.详细设计(xxx)

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

1)元素的类型

typedefstruct

{

Datatypedata[MAXSIZE];

intfront,rear;

}Squeue;

2)空的队列的构造

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

{

p->front=0;

p->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)

{

printf("队列已空,无法出队!

");

return0;

}

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

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

return1;

}

5)判断队列是否为空

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

{

if(q.front==q.rear)

return1;

else

return0;

}

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

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

{

if(q->front==q->rear)

{

printf("队列已空,无法出队!

");

return0;

}

else

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

return1;

}

7)遍历顺序队列的算法

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

{

printf("此队列数据为:

\n");

if(q.front==q.rear)

printf("此队列为空!

");

else

{

while(q.front

{

printf("%d\t",q.data[q.front]);

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

}

printf("\n");

}

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

1)构造空队列的算法

voidInitQueue2(LinkQueue*q)

{//构造一个空队列Q

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

if(!

q->front)

exit

(1);

q->front->next=NULL;

}

2)元素的入队算法

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

{

QueuePtrp;

p=(QueuePtr)malloc(sizeof(QNode));//创建新节点

if(!

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

exit

(1);

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

p->next=NULL;

q->rear->next=p;

q->rear=p;

}

3)元素的出队的算法

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

{

QueuePtrp;

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

return0;

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);//删除要出队的结点

returne;

}

4)队列的长度算法

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

{

QueuePtrp;

inti=0;

p=q->front->next;

while(p)

{

++i;

p=p->next;

}

printf("链队列长度为:

%d\n",i);

}

5)队列的销毁

voidDestroyQueue2(LinkQueue*q)

{

while(q->front)

{

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

free(q->front);

q->front=q->rear;

if(!

q->rear)

free(q->rear);

}

free(q->front);

}

6)队列的输出算法

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

{

QueuePtrp;

p=q->front->next;

printf("链队列元素依次为:

");

while(p)

{

printf("%d->",p->data);

p=p->next;

}

printf("\n");

}

7)队列的清空的算法

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

{

QueuePtrtemp=q->front->next;

while(temp)

{

QueuePtrtp=temp;

temp=temp->next;

free(tp);

}

temp=q->front;

q->front=q->rear=NULL;

free(temp);

}

8)返回对头元素的算法

int

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

当前位置:首页 > 人文社科 > 法律资料

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

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