数据结构栈的实验报告Word下载.docx
《数据结构栈的实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《数据结构栈的实验报告Word下载.docx(3页珍藏版)》请在冰豆网上搜索。
在运行是要注意当输入不同的数据时所得结果是否正确,应运行多次,分别检查在不同情况下结果是否正确。
实验内容:
编译以下题目的程序并调试运行。
1)、编写一个程序algo3-1.cpp,实现顺的各种基本运算,并在此基础上设计一程序并完成如下功能:
(1)初始化栈s;
(2)判断栈s是否非空;
序栈个主(3)依次进栈元素a,b,c,d,e;
(4)判断栈s是否非空;
(5)输出出栈序列;
(6)判断栈s是否非空;
(7)释放栈。
图3.1Proj3_1工程组成本工程Proj3_1的组成结构如图3.1所示。
本工程的模块结构如图3.2所示。
图中方框表示函数,方框中指出函数名,箭头方向表示函数间的调用关系。
图3.2Proj3_1工程的程序结构图其中包含如下函数:
InitStack(SqStack*s)//初始化栈SDestroyStack(SqStack*s)//销毁栈sStackEmpty(SqStack*s)//判断栈空Push(SqStack*s,ElemTypee)//进栈Pop(SqStack*s,ElemTypee)//出栈GetTop(SqStack*s,ElemTypee)//取栈顶元素对应的程序如下:
//文件名:
algo3-1.cpp#includestdio.h#includemalloc.h#defineMaxSize100typedefcharElemType;
typedefstruct{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++;
//栈顶指针增1s-data[s-top]=e;
//元素e放在栈顶指针处returntrue;
}boolPop(SqStack*s,ElemTypee)//出栈{if(s-top==-1)//栈为空的情况,即栈下溢出returnfalse;
e=s-data[s-top];
//取栈顶指针元素的元素s-top--;
//栈顶指针减1returntrue;
}boolGetTop(SqStack*s,ElemTypee)//取栈顶元素{if(s-top==-1)//栈为空的情况,即栈下溢出returnfalse;
//取栈顶指针元素的元素returntrue;
}设计exp3-1.cpp程序如下//文件名:
exp3-1.cpp#includestdio.h#includemalloc.h#defineMaxSize100typedefcharElemType;
externvoidInitStack(SqStack*externvoidDestroyStack(SqStack*externboolStackEmpty(SqStack*s);
externboolPush(SqStack*s,ElemTypee);
externboolPop(SqStack*s,ElemTypeexternboolGetTop(SqStack*s,ElemTypevoidmain(){ElemTypee;
SqStack*s;
printf(栈s的基本运算如下:
\nprintf(
(1)初始化栈s\nInitStack(s);
printf(
(2)栈为%s\n,(StackEmpty(s)?
空:
非空));
printf((3)依次进栈元素a,b,c,d,e\nPush(s,aPush(s,bPush(s,cPush(s,dPush(s,eprintf((4)栈为%s\n,(StackEmpty(s)?
printf((5)出栈序列:
while(!
StackEmpty(s)){Pop(s,e);
printf(%c,e);
}printf(\nprintf((6)栈为%s\n,(StackEmpty(s)?
printf((7)释放栈\nDestroyStack(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)//初始化栈sDestroyStack(LiStack*s)//销毁栈StackEmpty(LiStack*s)//判断栈是否为空Push(LiStack*s,ElemTypee)//进栈Pop(LiStack*s,ElemTypee)//出栈GetTop(LiStack*s,ElemTypee)//取栈顶元素对应的程序如下:
algo3-2.cpp#includestdio.h#includemalloc.htypedefcharElemType;
typedefstructlinknode{ElemTypedata;
//数据域篇二:
数据结构顺序栈实验报告一、设计人员相关信息1.设计者姓名、学号和班号:
12地信李晓婧120122429832.设计日期:
2014.3.上机环境:
VC++6.0二、程序设计相关信息1.实验题目:
编写一个程序,实现顺序栈(假设栈中元素类型为char)的各种基本运算,并在此基础上设计一个程序,完成如下功能:
(1)初始化栈
(2)判断栈是否为空(3)依次进栈元素a,b,c,d,e(4)判断栈是否为空(5)输出栈长度(6)输出从栈顶到栈底元素(7)输出出栈序列(8)判断栈是否为空(9)释放栈2.实验项目组成:
栈的初始化、销毁、判断是否为空、进栈、出栈、取栈顶元素。
3.实验项目的程序结构(程序中的函数调用关系图):
4.实验项目包含的各个文件中的函数的功能描述:
(1)初始化栈InitStack:
建立一个新的空栈,实际上将栈顶指针指向-1即可。
(2)销毁栈DestroyStack:
释放栈占用的存储空间(3)判断栈是否为空StackEmpty:
栈为空的条件是s-op==-1。
(4)进栈Push:
在栈不满的条件下,先将栈顶指针增1,然后在栈顶指针指向位置插入元素e。
(5)出栈Pop:
在栈不为空的条件下,先将栈顶元素赋给e,然后将栈顶指针减1.(6)取栈顶元素GetTop:
在栈不为空的条件下,将栈顶元素赋给e。
5.算法描述或流程图:
#includestdio.h#includemalloc.h#includestdlib.h#defineMaxSize50typedefcharElemType;
typedefstruct{ElemTypedata[MaxSize];
/*栈顶指针*/}SqStack;
//定义顺序栈类型voidInitStack(SqStack*s)/*初始化*/{s=(SqStack*)malloc(sizeof(SqStack));
//栈顶指针置为-1}voidDestroyStack(SqStack*s)/*销毁*/{free(s);
}intStackEmpty(SqStack*s)/*判断是否为空*/{return(s-top==-1);
}intpush(SqStack*s,ElemTypea[],intn){inti;
if(s-top==MaxSize-1)//栈满的情况,即栈上溢出return0;
for(i=0;
ii++){s-top++;
//栈顶指针增1s-data[s-top]=a[i];
//元素e放在栈顶指针处}intPop(SqStack*s,ElemTypee)/*出栈一个元素*/{if(s-top==-1)//栈为空的情况,即栈下溢出return0;
//取栈顶元素s-top--;
//栈顶指针减1return1;
}}return1;
intGetTop(SqStack*s,ElemTypee)/*取栈顶元素*/{if(s-top==-1)//栈为空的情况,即栈下溢出return0;
//取栈顶元素return1;
}intStackLength(SqStack*s)/*求栈长度*/{return(s-top+1);
}voidDispStack(SqStack*s){}voidmain(){inti,j;
ElemTypestr[5]={a,b,c,d,e//定义字符数组SqStack*st;
//定义栈InitStack(st);
/*初始化*/i=StackEmpty(st);
//判断栈是否为空if(i==0)inti;
for(i=s-ii--)printf(%c,s-data[i]);
printf(\nprintf(顺序栈非空\nelseprintf(顺序栈为空\npush(st,str,5);
//进栈j=StackEmpty(st);
if(j==0)printf(顺序栈非空\nelseprintf(顺序栈为空\nprintf(栈长度为:
%d\n,StackLength(st));
//输出栈长度printf(出栈序列:
\nDispStack(st);
//输出栈StackEmpty(st);
DestroyStack(st);
}6.实验数据和实验结果:
篇三:
数据结构-实验报告顺序栈(封面)学生实验报告学院:
国际经贸学院课程名称:
数据结构专业班级:
09电子商务姓名:
学号:
学生实验报告(经管类专业用)一、实验目的及要求:
1、目的通过实验,实现顺序栈的各种基本运算。
2、内容及要求编写一个程序,实现顺序栈的各种基本运算,并在此基础上设计一个主程序完成下列功能:
(1)初始化栈S。
(2)判断栈S是否非空。
(3)依次进栈元素a,b,c,d,e。
(4)判断栈S是否非空。
(5)输出栈的长度。
(6)输出从栈顶到栈底的元素。
(7)输出出栈序列;
(8)判断链栈S是否为空;
(9)释放链栈二、仪器用具:
三、实验方法与步骤:
一、查阅顺序栈等相关资料,熟悉顺序栈基本概念和流程二、“开展”顺序栈实验流程三、整理实验数据和文档,总结实验的过程,编写实验报告四、实验结果与数据处理:
1、顺序栈的代码:
#includestdio.h#includemalloc.h#defineMaxSize100typedefcharElemType;
voidInitStack(SqStack*s){}voidClearStack(SqStack*s){}intStackLength(SqStack*s){s=(SqStack*)malloc(sizeof(SqStack));
free(s);
return(s-top+1);
intStackEmpty(SqStack*s){}intPush(SqStack*s,ElemTypee){}intPop(SqStack*s,ElemTypee){}intGetTop(SqStack*s,ElemTypee){}voidDispStack(SqStack*s)return(s-top==-1);
if(s-top==MaxSize-1)return0;
s-data[s-top]=e;
return1;
if(s-top==-1)return0;
s-top--;
inti;
for(i=s-ii--)printf(%c,s-data[i]);
printf(\nvoidmain(){//主函数SqStackS=(SqStack*)malloc(sizeof(SqStack));
printf(
(1)初始化顺序栈\nInitStack(S);
printf(
(2)判断顺序栈是否为空:
\nStackEmpty(S);
printf((3)依次进栈元素a,b,c,d,e:
\nPush(S,aPush(S,bPush(S,cPush(S,dPush(S,eprintf((4)判断顺序栈是否为空:
printf((5)输出栈长度:
%d\n,StackLength(S));
printf((6)输出从栈顶到栈底的元素:
\nStackTraverse(S);
printf((7)读出栈顶元素:
%d\n,GetTop(S,e));
printf((8)删除栈顶元素:
%d\n,Pop(S,e));
printf((9)输出从栈顶到栈底的元素:
printf((10)判断顺序栈是否为空\nStackEmpty(S);