数据结构实验报告 代码.doc
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《数据结构实验报告 代码.doc》由会员分享,可在线阅读,更多相关《数据结构实验报告 代码.doc(31页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据结构实验报告实验序号:5 实验项目名称:链式栈学号姓名罗维卿专业、班12物联网实验地点指导教师实验时间一、实验目的及要求1. 掌握栈的存储结构的表示和实现方法。二、实验设备(环境)及要求微型计算机;windows 操作系统;Microsoft Visual Studio 6.0集成开发环境。三、实验内容与步骤(1)根据输入的栈中元素个数和各元素值建立一个链栈,并输出链栈中各元素值, 观察输入的内容与输出的内容是否一致,特别注意栈顶元素的位置。(2)将数据元素x入栈,并输出入栈后的链栈中各元素值。(3)将链栈中的栈顶元素出栈,并输入出栈元素的值和出栈后链栈中各元素值。四、实验结果与数据处理五
2、、分析与讨论对上机实践结果进行分析,上机的心得体会。六、教师评语签名:日期:成绩附源程序清单:1实验要求编程实现如下功能:(1)根据输入的栈中元素个数n和各元素值建立一个顺序栈,并输出栈中各元素值。(2)将数据元素e入栈,并输出入栈后的顺序栈中各元素值。(3)将顺序栈中的栈顶元素出栈,并输出出栈元素的值和出栈后顺序栈中各元素值。2. 实验相关原理:栈是一种插入和删除操作都限制在表的一端进行的特殊线性表,它的操作具有“先进后出”的特性。采用顺序存储结构的栈称为顺序栈。栈的存储结构描述如下:#define MAXSIZE 100; /*顺序栈的最大长度*/typedef struct Selemt
3、ype baseMAXSIZE; /*存储栈中数据元素的数组*/ int top; /*top为栈顶指针,它指示栈顶元素的存储空间的下一个存储单元*/ Sqstack;【核心算法提示】 1顺序栈入栈操作的基本步骤:首先判断顺序栈是否为满,如果满,则函数返回ERROR,否则将待入栈的数据元素存放在top所指示的存储单元中,再使top后移一个存储单元位置,即将top值加1,最后函数返回OK。2 顺序栈出栈操作的基本步骤:首先判断顺序栈是否为空,如果空,则函数返回ERROR,否则将栈顶指针前移一个存储单元位置,即将top值减1,再将top所指示的栈顶元素用e返回其值,并使函数返回OK。【核心算法描述
4、】status Push(Sqstack &S,Selemtype e)/*将数据元素e压入到顺序栈S中,使其成为新的栈项元素*/ if (S.top =MAXSIZE) /*如果栈满,则函数返回ERROR*/ return ERROR; S.baseS.top+=e;/*将新元素e存放在top所指示的存储单元中,并使top值加1*/ return OK; status Pop(Sqstack &S,Selemtype &e)/*将顺序栈S中的栈顶元素从栈中删除,并用e返回其值*/ if (S.top=0) /*如果栈空,则函数返回ERROR*/ Return ERROR; e=S.base-
5、S.top;/*将top值减1,并用e保存top所指示的栈顶元素值*/ return OK; 3源程序代码参考#define MAXSIZE 100typedef struct int baseMAXSIZE; int top; /*top指示存储栈顶元素的下一存储单元*/ Sqstack; /*顺序栈的类型定义*/Sqstack Push(Sqstack S,int e) /*顺序栈的入栈操作函数*/ if (S.top=MAXSIZE) printf(Stack is Overflown);else S.baseS.top+=e; return S; Sqstack Pop(Sqstack
6、 S,int *e) /*顺序栈的出栈操作函数*/ if (S.top=0) printf(Stack is Emptyn);else *e=S.base-S.top; return S; void Stack_display(Sqstack S) /*顺序栈的输出函数*/ int i; for(i=0; iS.top;i+) /*依次输出栈中各元素的值,栈顶元素在表的尾部*/ printf(%4d, S.basei); printf(n); main() Sqstack S; int i,j,n,x,e; printf(please input the length:);/*请求输入顺序栈中
7、元素个数*/ scanf(%d,&n); printf(please input the Value:n );/*请求输入顺序栈中各个元素值*/ for(i=0;idata=e; /*新结点的数据域赋值*/ p-next=top; /*修改链使新结点插入到链表的头部,并成为新的栈顶元素*/ top=p; return OK; status Pop(LinkStack &top,int &e) /*将链栈top中的栈顶元素从栈中删除,并用e返回其值*/ LinkStack q; if (!top) /*如果栈空,则函数返回ERROR*/ return ERROR; e=top-data; /*将
8、被删的栈顶元素的值保存在e中*/ q=top; /*用q记下待删的栈顶元素*/top=q-next; /*修改链使待删结点从链中“卸下”,此时被删结点的后继成为新的栈顶元素结点*/ free(q); /*释放被删结点的存储空间*/ return OK;数据结构实验报告实验序号:7 实验项目名称:串学号31姓名罗维卿 专业、班12物联网实验地点指导教师实验时间一、实验目的及要求1. 掌握串的顺序表示和堆表示实现方法;二、实验设备(环境)及要求微型计算机;windows 操作系统;Microsoft Visual Studio 6.0集成开发环境。三、实验内容与步骤1、 根据串的三种实现方式,顺序
9、、堆和链,选择其中一种分别实现串赋值、串合并、删除等操作。四、实验结果与数据处理五、分析与讨论对上机实践结果进行分析,上机的心得体会。六、教师评语签名:日期:成绩附源程序清单:#include#include#define MaxSize 100typedef structchar dataMaxSize;int length;SqString;void StrAssign(SqString &str,char cstr)int i;for(i=0;cstri!=0;i+)str.datai=cstri;str.length=i;void StrCopy(SqString &s,SqStrin
10、g t)int i;for(i=0;it.length;i+)s.datai=t.datai;s.length=t.length;int StrEqual(SqString s,SqString t)int same=1,i;if(s.length!=t.length)same=0;elsefor(i=0;is.length;i+)if(s.datai!=t.datai)same=0;return same;int StrLength(SqString s)return s.length;SqString Concat(SqString s,SqString t)SqString str;in
11、t i;str.length=s.length+t.length;for(i=0;is.length;i+)str.datai=s.datai;for(i=0;it.length;i+)str.datas.length+i=t.datai;return str;SqString SubStr(SqString s,int i,int j)SqString str;int k;str.length=0;if(is.length|js.length)cout参数错误nendl;return str;for(k=i-1;ki+j-1;k+)str.datak-i+1=s.datak;str.leng
12、th=j;return str;SqString InsStr(SqString s1,int i,SqString s2)int j;SqString str;str.length=0;if(is1.length+1)cout参数错误nendl;return s1;for(j=0;ji-1;j+)str.dataj=s1.dataj;for(j=0;js2.length;j+)str.datai+j-1=s2.dataj;for(j=i-1;js1.length;j+)str.length=s1.length+s2.length;return str;SqString DelStr(SqSt
13、ring s,int i,int j)int k;SqString str;str.length=0;if(is.length|i+js.length+1)/参数不正确时返回空串printf(参数不正确n);return str;for(k=0;ki-1;k+) /将s.data0.i-2复制到strstr.datak=s.datak;for(k=i+j-1;ks.length;k+)/将s.datai+j-1.s.length-1 str.datak-j=s.datak;str.length=s.length-j;return str;SqString RepStr(SqString s,i
14、nt i,int j, SqString t)/将串s的第i个字符开始的j个字符替换成串t产生新串int k;SqString str;str.length=0;if(is.length|i+j-1s.length)/参数不正确时返回空串printf(参数不正确n);return str;for(k=0;ki-1;k+) /将s.data0.i-2复制到strstr.datak=s.datak;for(k=0;kt.length;k+)str.datai+k-1=t.datak;for(k=i+j-1;k0)for(i=0;is.length;i+)printf(%c,s.datai);pri
15、ntf(n);/主程序void main()SqString s,s1,s2,s3,s4;printf(1)建立串s和串s1n);StrAssign(s,abcdefghijklmn);StrAssign(s1,xyz);printf(2)输出串s:);DispStr(s);printf(3)串s的长度:%dn,StrLength(s);printf(4)在串的第九个字符位置插入串s1而产生串s2n);s2=InsStr(s,9,s1);printf(5)输出串s2:);DispStr(s2);printf(6)删除串s第二个字符开始的个字符而产生串s2n);s2=DelStr(s,2,3);
16、printf(7)输出串s2:);DispStr(s2);printf(8)将串s第二个字符开始的个字符替换成串s1而产生串s2n); s2=RepStr(s,2,5,s1);printf(9)输出串s2:);DispStr(s2);printf(10)提取串s的第二个字符开始的个字符而产生串s3n); s3=SubStr(s,2,10);printf(11)输出串s3:);DispStr(s3);printf(12)将串s1和串s2连接起来而产生串s4n);s4=Concat(s1,s2);printf(13)输出串s4:);DispStr(s4);数据结构实验报告实验序号:2 实验项目名称
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构实验报告 代码 数据结构 实验 报告
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内