1 / 14
文档名称:

数据结构栈队列实验报告.doc

格式:doc   大小:521KB   页数:14页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

数据结构栈队列实验报告.doc

上传人:花双韵芝 2023/2/27 文件大小:521 KB

下载得到文件列表

数据结构栈队列实验报告.doc

相关文档

文档介绍

文档介绍:该【数据结构栈队列实验报告 】是由【花双韵芝】上传分享,文档一共【14】页,该文档可以免费在线阅读,需要了解更多关于【数据结构栈队列实验报告 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。......
一、实验目的和要求
(1)理解栈和行列的特点以及它们之间的差别,知道在何时使用那种数据构造。
(2)要点掌握在次序栈上和链栈上实现栈的基本运算算法,注意栈满和栈空的条件。
(3)要点掌握在次序队上和链队上实现行列的基本运算算法,注意循环队行列满和队空的
条件。
(4)灵巧运用栈和行列这两种数据构造解决一些综合应用问题。
二、实验环境和方法
实验方法:
(一)综合运用课本所学的知识,用不一样的算法实此刻不一样的程序功能。
(二)联合指导老师的指导,解决程序中的问题,正确解决实质中存在的异样状况,逐
步改良功能。
(三)依据实验内容,编译程序。
实验环境:WindowsxpVisualC++
三、实验内容及过程描绘
实验步骤:
①进入VisualC++。
②输入自己编好的程序。
③检查一遍已输入的程序能否有错(包含输入时输错的和编程中的错误),如发现
有错,实时更正。
④进行编译和连结。假如在编译和连结过程中发现错误,频幕上会出现“报错信息”,
依据提示找到犯错地点和原由,加以更正。再进行编译,这样频频直到不犯错为
止。
.专业word可编写.
......
⑤运转程序并剖析运转结果能否合理。在运转是要注意当输入不一样的数据时所得结
果能否正确,应运转多次,分别检查在不一样状况下结果能否正确。
实验内容:编译以下题目的程序并调试运转。
1)、编写一个程序algo3-,实现次序栈的各样基本运算,并在此基础上设计一
个主程序并达成以下功能:
(1)初始化栈s;
(2)判断栈s能否非空;
(3)挨次进栈元素a,b,c,d,e;
(4)判断栈s能否非空;
(5)输出出栈序列;
(6)判断栈s能否非空;
(7)开释栈。
。。图中方框
表示函数,方框中指出函数名,箭头方向表示函数间的调用关系。
main
InitStackDestroyStackStackEmptyPusPopGetTo

此中包含以下函数:
InitStack(SqStack*&s)//初始化栈S
DestroyStack(SqStack*&s)//销毁栈s
.专业word可编写.
......
StackEmpty(SqStack*s)//判断栈空
Push(SqStack*&s,ElemTypee)//进栈
Pop(SqStack*&s,ElemType&e)//出栈
GetTop(SqStack*s,ElemType&e)//取栈顶元素
对应的程序以下:
//文件名:algo3-
#include<>
#include<>
#defineMaxSize100
typedefcharElemType;
typedefstruct
{
.专业word可编写.
......
ElemTypedata[MaxSize];
inttop;//栈顶指针
}SqStack;
voidInitStack(SqStack*&s)//初始化栈S
{s=(SqStack*)malloc(sizeof(SqStack));
s->top=-1;//栈顶指针置为-1
}
voidDestroyStack(SqStack*&s)//销毁栈s
{
free(s);
}
boolStackEmpty(SqStack*s)//判断栈空
{
return(s->top==-1);
}
boolPush(SqStack*&s,ElemTypee)//进栈
{if(s->top==MaxSize-1)//栈满的状况,即栈上溢出returnfalse;
s->top++;//栈顶指针增1
s->data[s->top]=e;//元素e放在栈顶指针处
returntrue;
}
boolPop(SqStack*&s,ElemType&e)//出栈
{if(s->top==-1)//栈为空的状况,即栈下溢出
returnfalse;
e=s->data[s->top];//取栈顶指针元素的元素
s->top--;//栈顶指针减1
returntrue;
}
boolGetTop(SqStack*s,ElemType&e)//取栈顶元素
{if(s->top==-1)//栈为空的状况,即栈下溢出
returnfalse;
e=s->data[s->top];//取栈顶指针元素的元素
returntrue;
}
设计exp3-
.专业word可编写.
......
文件名:exp3-#include<>#include<>#defineMaxSize100typedefcharElemType;typedefstruct
{
ElemTypedata[MaxSize];
inttop;//栈顶指针
}SqStack;
externvoidInitStack(SqStack*&s);
externvoidDestroyStack(SqStack*&s);
externboolStackEmpty(SqStack*s);
externboolPush(SqStack*&s,ElemTypee);
externboolPop(SqStack*&s,ElemType&e);
externboolGetTop(SqStack*s,ElemType&e);
voidmain( )
{
ElemTypee;
SqStack*s;
printf("栈s的基本运算以下:\n");
printf("
(1)
初始化栈s\n");
InitStack(s);
printf("
(2)
栈为%s\n",(StackEmpty(s)?"空":"非空"));
printf("
(3)
挨次进栈元素a,b,c,d,e\n");
Push(s,'a');
Push(s,'b');
Push(s,'c');
Push(s,'d');
Push(s,'e');
printf("(4)栈为%s\n",(StackEmpty(s)?"空":"非空"));
printf("(5)出栈序列:");
while(!StackEmpty(s))
{
Pop(s,e);
printf("%c",e);
}
printf("\n");
printf("(6)栈为%s\n",(StackEmpty(s)?"空":"非空"));
printf("(7)开释栈\n");
DestroyStack(s);
}
运转结果以下:
.专业word可编写.
......
2)、编写一个程序algo3-,实现链栈的各样基本运算,并在此基础上设计一个主程序并完
成以下功能:
1)初始化链栈s;
2)判断链栈s能否非空;
3)挨次进栈a,b,c,d,e;
4)判断链栈s能否非空;
5)输出链栈长度;
6)输出从栈底到栈顶元素;
7)输出出队序列;
(8)判断链栈s能否非空;


Proj3_2工程构成
(9)开释行列。
。。图中方框
表示函数,方框中指出函数名,箭头方向表示函数间的调用关系。
main
InitStackDestroyStackStackEmptyPusPopGetTo

.专业word可编写.
......
此中包含以下函数:
InitStack(LiStack*&s)//初始化栈s
DestroyStack(LiStack*&s)//销毁栈
StackEmpty(LiStack*s)//判断栈能否为空
Push(LiStack*&s,ElemTypee)//进栈
Pop(LiStack*&s,ElemType&e)//出栈
GetTop(LiStack*s,ElemType&e)//取栈顶元素
对应的程序以下:
//文件名:algo3-
#include<>
#include<>
typedefcharElemType;
typedefstructlinknode
{
ElemTypedata;//数据域
.专业word可编写.
......
ElemTypedata;//数据域
structlinknode*next;//指针域
}LiStack;
voidInitStack(LiStack*&s)//初始化栈s
{s=(LiStack*)malloc(sizeof(LiStack));s->next=NULL;
}
voidDestroyStack(LiStack*&s)//销毁栈
{LiStack*p=s,*q=s->next;
while(q!=NULL)
{free(p);
p=q;
q=p->next;
}
free(p);//此时p指向尾节点,开释其空间
}
boolStackEmpty(LiStack*s)//判断栈能否为空
{
return(s->next==NULL);
}
voidPush(LiStack*&s,ElemTypee)//进栈
{LiStack*p;
p=(LiStack*)malloc(sizeof(LiStack));
p->data=e;//新建元素e对应的节点*p
p->next=s->next;//插入*p节点作为开始节点
s->next=p;
}
boolPop(LiStack*&s,ElemType&e)//出栈
{LiStack*p;
if(s->next==NULL)//栈空的状况
returnfalse;
p=s->next;//p指向开始节点
e=p->data;
s->next=p->next;//删除*p节点
free(p);//开释*p节点
returntrue;
}
boolGetTop(LiStack*s,ElemType&e)//取栈顶元素
{if(s->next==NULL)//栈空的状况
returnfalse;
e=s->next->data;
returntrue;
}
设计exp3-
.专业word可编写.
......
//文件名:exp3-
#include<>
#include<>
typedefcharElemType;
typedefstructlinknode
{
ElemTypedata;//数据域
structlinknode*next;//指针域
}LiStack;
externvoidInitStack(LiStack*&s);
externvoidDestroyStack(LiStack*&s);
externboolStackEmpty(LiStack*s);
externvoidPush(LiStack*&s,ElemTypee);
externboolPop(LiStack*&s,ElemType&e);
externboolGetTop(LiStack*s,ElemType&e);
voidmain( )
{
ElemTypee;
LiStack*s;
printf("栈s的基本运算以下:\n");
printf("
(1)
初始化栈s\n");
InitStack(s);
printf("
(2)
栈为%s\n",(StackEmpty(s)?"空":"非空"));
printf("
(3)
挨次进栈元素a,b,c,d,e\n");
Push(s,'a');
Push(s,'b');
Push(s,'c');
Push(s,'d');
Push(s,'e');
printf("(4)栈为%s\n",(StackEmpty(s)?"空":"非空"));
printf("(5)出栈序列:");
while(!StackEmpty(s))
{
Pop(s,e);
printf("%c",e);
}
printf("\n");
printf("(6)栈为%s\n",(StackEmpty(s)?"空":"非空"));
printf("(7)开释栈\n");
DestroyStack(s);
}
程序运转结果以下:
.专业word可编写.
......
3)、编写一个程序algo3-,实现次序环形行列的各样基本运算,并在此基础上设计一个主
程序并达成以下功能:
1)初始化行列q;
2)判断行列q能否非空;
3)挨次进行列a,b,c;
4)出队一个元素,输出该元素;
5)输出行列q的元素个数;
(6)挨次进行列元素d,e,f;图3-5Proj3_3的工程构成
7)输出行列q的元素个数;
8)输出出队序列;
9)开释行列。
。。图中方框
表示函数,方框中指出函数名,箭头方向表示函数间的调用关系。
main
InitStackDestroyStackStackEmptyPusPopGetTo

.专业word可编写.