大数据的结构栈和队列实验报告材料Word文档格式.docx

上传人:b****5 文档编号:20622311 上传时间:2023-01-24 格式:DOCX 页数:15 大小:75.17KB
下载 相关 举报
大数据的结构栈和队列实验报告材料Word文档格式.docx_第1页
第1页 / 共15页
大数据的结构栈和队列实验报告材料Word文档格式.docx_第2页
第2页 / 共15页
大数据的结构栈和队列实验报告材料Word文档格式.docx_第3页
第3页 / 共15页
大数据的结构栈和队列实验报告材料Word文档格式.docx_第4页
第4页 / 共15页
大数据的结构栈和队列实验报告材料Word文档格式.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

大数据的结构栈和队列实验报告材料Word文档格式.docx

《大数据的结构栈和队列实验报告材料Word文档格式.docx》由会员分享,可在线阅读,更多相关《大数据的结构栈和队列实验报告材料Word文档格式.docx(15页珍藏版)》请在冰豆网上搜索。

大数据的结构栈和队列实验报告材料Word文档格式.docx

(6)判断栈s是否非空;

(7)释放栈。

图3.1Proj3_1工程组成

本工程Proj3_1的组成结构如图3.1所示。

本工程的模块结构如图3.2所示。

图中方框表示函数,方框中指出函数名,箭头方向表示函数间的调用关系。

图3.2Proj3_1工程的程序结构图

其中包含如下函数:

InitStack(SqStack*&

s)//初始化栈S

DestroyStack(SqStack*&

s)//销毁栈s

StackEmpty(SqStack*s)//判断栈空

Push(SqStack*&

s,ElemTypee)//进栈

Pop(SqStack*&

s,ElemType&

e)//出栈

GetTop(SqStack*s,ElemType&

e)//取栈顶元素

对应的程序如下:

//文件名:

algo3-1.cpp

#include<

stdio.h>

malloc.h>

#defineMaxSize100

typedefcharElemType;

typedefstruct

{

ElemTypedata[MaxSize];

inttop;

//栈顶指针

}SqStack;

voidInitStack(SqStack*&

{s=(SqStack*)malloc(sizeof(SqStack));

s->

top=-1;

//栈顶指针置为-1

}

voidDestroyStack(SqStack*&

free(s);

boolStackEmpty(SqStack*s)//判断栈空

return(s->

top==-1);

boolPush(SqStack*&

{if(s->

top==MaxSize-1)//栈满的情况,即栈上溢出

returnfalse;

top++;

//栈顶指针增1

data[s->

top]=e;

//元素e放在栈顶指针处

returntrue;

boolPop(SqStack*&

top==-1)//栈为空的情况,即栈下溢出

e=s->

top];

//取栈顶指针元素的元素

top--;

//栈顶指针减1

}

boolGetTop(SqStack*s,ElemType&

设计exp3-1.cpp程序如下

exp3-1.cpp

//栈顶指针

externvoidInitStack(SqStack*&

s);

externvoidDestroyStack(SqStack*&

externboolStackEmpty(SqStack*s);

externboolPush(SqStack*&

s,ElemTypee);

externboolPop(SqStack*&

e);

externboolGetTop(SqStack*s,ElemType&

voidmain()

ElemTypee;

SqStack*s;

printf("

栈s的基本运算如下:

\n"

);

(1)初始化栈s\n"

InitStack(s);

(2)栈为%s\n"

(StackEmpty(s)?

"

空"

:

非空"

));

(3)依次进栈元素a,b,c,d,e\n"

Push(s,'

a'

b'

c'

d'

e'

(4)栈为%s\n"

(5)出栈序列:

while(!

StackEmpty(s))

{

Pop(s,e);

printf("

%c"

e);

}

(6)栈为%s\n"

(7)释放栈\n"

DestroyStack(s);

运行结果如下:

2)、编写一个程序algo3-2.cpp,实现链栈的各种基本运算,并在此基础上设计一个主程序并完成如下功能:

(1)初始化链栈s;

(2)判断链栈s是否非空;

(3)依次进栈a,b,c,d,e;

(4)判断链栈s是否非空;

(5)输出链栈长度;

(6)输出从栈底到栈顶元素;

(7)输出出队序列;

(8)判断链栈s是否非空;

图3.3Proj3_2工程组成

(9)释放队列。

本工程Proj3_2的组成结构如图3.3所示。

本工程的模块结构如图3.4所示。

图3.4Proj3_2工程的程序结构图

InitStack(LiStack*&

s)//初始化栈s

DestroyStack(LiStack*&

s)//销毁栈

StackEmpty(LiStack*s)//判断栈是否为空

Push(LiStack*&

Pop(LiStack*&

GetTop(LiStack*s,ElemType&

e)//取栈顶元素

对应的程序如下:

algo3-2.cpp

typedefstructlinknode

ElemTypedata;

//数据域

structlinknode*next;

//指针域

}LiStack;

voidInitStack(LiStack*&

s)//初始化栈s

{s=(LiStack*)malloc(sizeof(LiStack));

next=NULL;

voidDestroyStack(LiStack*&

{LiStack*p=s,*q=s->

next;

while(q!

=NULL)

{free(p);

p=q;

q=p->

free(p);

//此时p指向尾节点,释放其空间

boolStackEmpty(LiStack*s)//判断栈是否为空

next==NULL);

voidPush(LiStack*&

{LiStack*p;

p=(LiStack*)malloc(sizeof(LiStack));

p->

data=e;

//新建元素e对应的节点*p

next=s->

//插入*p节点作为开始节点

next=p;

boolPop(LiStack*&

if(s->

next==NULL)//栈空的情况

p=s->

//p指向开始节点

e=p->

data;

next=p->

//删除*p节点

//释放*p节点

boolGetTop(LiStack*s,ElemType&

next->

设计exp3-2.cpp主程序

exp3-2.cpp

externvoidInitStack(LiStack*&

externvoidDestroyStack(LiStack*&

externboolStackEmpty(LiStack*s);

externvoidPush(LiStack*&

externboolPop(LiStack*&

externboolGetTop(LiStack*s,ElemType&

LiStack*s;

程序运行结果如下:

3)、编写一个程序algo3-3.cpp,实现顺序环形队列的各种基本运算,并在此基础上设计一个主程序并完成如下功能:

(1)初始化队列q;

(2)判断队列q是否非空;

(3)依次进队列a,b,c;

(4)出队一个元素,输出该元素;

(5)输出队列q的元素个数;

(6)依次进队列元素d,e,f;

图3-5Proj3_3的工程组成

(7)输出队列q的元素个数;

(8)输出出队序列;

本工程Proj3_3的组成结构如图3.5所示。

本工程的模块结构如图3.6所示。

图3.6Proj3_3工程的程序结构图

InitQueue(SqQueue*&

q)//初始化队列

DestroyQueue(SqQueue*&

q)//销毁队列

QueueEmpty(SqQueue*q)//判断队列空

enQueue(SqQueue*&

q,ElemTypee)//进队

deQueue(SqQueue*&

q,ElemType&

e)//出队

algo3-3.cpp

#defineMaxSize5

intfront,rear;

//队首和队尾指针

}SqQueue;

voidInitQueue(SqQueue*&

{q=(SqQueue*)malloc(sizeof(SqQueue));

q->

front=q->

rear=0;

voidDestroyQueue(SqQueue*&

free(q);

boolQueueEmpty(SqQueue*q)//判断队列空

return(q->

front==q->

rear);

boolenQueue(SqQueue*&

if((q->

rear+1)%MaxSize==q->

front)//队满上溢出

rear=(q->

rear+1)%MaxSize;

data[q->

rear]=e;

booldeQueue(SqQueue*&

if(q->

rear)//队空下溢出

front=(q->

front+1)%MaxSize;

e=q->

front];

设计exp3-3.cpp主程序

ElemTypeelem[MaxSize];

externvoidInitQueue(SqQueue*&

q);

externvoidDestroyQueue(SqQueue*&

externboolQueueEmpty(SqQueue*q);

externboolenQueue(SqQueue*&

q,ElemTypee);

externbooldeQueue(SqQueue*&

SqQueue*q;

环形队列基本运算如下:

(1)初始化队列q\n"

InitQueue(q);

(2)依次进队列元素a,b,c\n"

if(!

enQueue(q,'

))printf("

\t提示:

队满,不能进队\n"

(3)队列为%s\n"

(QueueEmpty(q)?

if(deQueue(q,e)==0)

队空,不能出队\n"

else

(4)出队一个元素%c\n"

(5)依次进队列元素d,e,f\n"

f'

(6)出队列序列:

QueueEmpty(q))

{deQueue(q,e);

(7)释放队列\n"

DestroyQueue(q);

 

四、总结

从数据结构的定义看,栈和队列也是一种线性表。

其与线性表的不同之处在于栈和队列的相关运算具有特殊性,只是线性表相关运算的一个子集。

一般线性表的上的插入、删除运算不受限制,而栈和队列上的插入、删除运算受某种特殊限制。

因此。

栈和队列也称为操作受限的线性表。

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

当前位置:首页 > 农林牧渔 > 畜牧兽医

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

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