ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:40.05KB ,
资源ID:5324249      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5324249.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构03栈的基本操作.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构03栈的基本操作.docx

1、数据结构03栈的基本操作附录 实验报告参考规范数据结构实验报告院系_ 专业 _姓名_林桢曦_ 学号_*_ 电话_ _级 _班 _年_月_日1实验题目栈的基本操作2需求分析编写栈的基本操作函数(分别用顺序和链接两种方式实现)调用进栈函数建立一个栈,读取栈顶元素,删除栈中元素,并且输出栈中所有元素。顺序栈:(1)建立空栈 int InitStack(SqStack &s)(2)进栈 void Push(SqStack &S,int e)(3)出栈 int Pop(SqStack *S,int e)(4)输出 void OutputStack(SqStack *S)链栈:(1)建立空栈void In

2、itStack(Lnode *S) (2)进栈void Push(Lnode *S, int x) (3)出栈void Pop(Lnode *S, int *x) (4)输出void OutputStack(Lnode *S)输入形式:整型数。3概要设计(1)ADT SqStack 数据对象:D=ai|aiIntegerSet,i=0,1,2,n,n0 结构关系:R=|ai,ai+1 D 基本操作: InitStack(SqStack &s) 操作前提:s是一个未初始化的顺序栈 操作结果:将s初始化为一个空的顺序栈 Push(SqStack *S, int e) 操作前提:顺序栈S已存在 操作

3、结果:将元素e插入到顺序栈中 Pop(SqStack *S,int *e) 操作前提:顺序栈S已存在 操作结果:将顺序栈S中栈顶元素删除,删除的元素值通过e返回OutputStack(SqStack *S) 操作前提:顺序栈S已存在操作结果:将顺序栈S中的元素显示到屏幕上ADT Lnode 数据对象:D=ai|aiIntegerSet,i=0,1,2,n,n0 结构关系:R=|ai,ai+1 D 基本操作: InitStack(Lnode&s) 操作前提:s是一个未初始化的链栈 操作结果:将s初始化为一个空的链栈 Push(Lnode *S, int e) 操作前提:链栈S已存在 操作结果:将

4、元素e插入到链栈中 Pop(Lnode *S,int *e) 操作前提:链栈S已存在 操作结果:将链栈S中栈顶元素删除,删除的元素值通过e返回OutputStack(Lnode *S) 操作前提:链栈S已存在操作结果:将链栈S中的元素显示到屏幕上(2)顺序栈:本程序包含6个函数:主函数main()初始化顺序栈函数InitStack()进栈函数Push()出栈函数Pop()输出栈中元素函数 OutputStack()各函数调用关系:主函数main调用其他四个函数链栈:本程序包含6个函数:主函数main()初始化顺序栈函数InitStack()进栈函数Push()出栈函数Pop()输出栈中元素函数

5、 OutputStack()各函数调用关系:主函数main调用其他四个函数(3)顺序栈:主函数的伪码main() 定义一个顺序栈s; 定义变量i,n,m; 初始化 s ; For循环(i=0;is.stacksize;i+)调用push函数;输出栈中元素; m=*(s.top-1);显示栈顶元素m;调用pop函数删除栈顶;显示s; 链栈:主函数的伪码main()*S=申请新结点;定义整型变量n,e,i;初始化S;显示输入链栈元素个数;输入整型数,赋给n;For循环(i=1; itop; -S-stacksize; 返回1;(4)输出元素void OutputStack(SqStack *S)

6、定义整型变量i和指向整型的指针型变量q; q=S-top-1;For(i=0;istacksize;i+)循环输出q指向的元素;q-;换行;链栈:类型定义typedef struct Lnode int data; struct Lnode *next; Lnode; 基本操作的伪码算法(1)初始化int InitStack(Lnode &s) S-next=NULL(2)进栈 void Push(Lnode &S,int x) *s=申请新的结点;如果s=NULL,显示申请失败,退出程序; s-data=x; s-next=S-next; S-next=s; (3)出栈void Pop(Ln

7、ode *S,int *x) 定义指向Lnode型指针变量p; 如果p存在,*x=S-next-data; p=S-next; S-next=p-next; 释放p的空间;(4)输出元素 void OutputStack(Lnode *S) 定义指向Lnode型指针变量p;For循环(p=S-next; p!=NULL; p=p-next)输出p-data;5调试分析顺序栈:调试是出现错误,经过检查发现在某些地方分号用中文表示。链栈:出现空指针问题,内存不能读取等6使用说明(1)顺序栈:程序名为test3.exe,程序执行过程如下:因为构造顺序栈用for循环,调用进栈函数,出栈函数是栈顶元素的

8、值,所以调用相关函数后,结果直接输出到屏幕上; (2)链栈:程序名为test3-2.exe,程序执行过程如下:提示用户输入链栈元素个数;用户按要求输入一个整型数;程序用输入的整型数构建一个链栈,并输出栈顶元素和栈中的所有元素;调用出栈函数,删除栈顶,显示栈中元素;7测试结果顺序栈:不用用户输入数值,调用函数便可得出结果,下面是程序执行结果的截图:链栈:(1)建立空链栈,程序运行后屏幕显示:输入链栈元素个数输入6后,屏幕显示建立后的链栈的 栈顶元素:6栈中元素:6 5 4 3 2 1(2)出栈 屏幕显示:删除链栈的元素 调用Pop函数之后,屏幕显示:此时栈中的元素为:5 4 3 2 1(3)退出

9、 按任意键退出程序8. 参考文献数据结构(c语言版)9附录源程序文件如下:顺序栈:#include#include#define STACKINCREMENT 100#define STACK_INIT_SIZE 10typedef struct SqStack int *base; int *top; int stacksize; SqStack;int InitStack(SqStack &s) s.base=(int *)malloc(sizeof(int); if(!s.base)exit(1); s.top=s.base; s.stacksize=STACK_INIT_SIZE; r

10、eturn 1;void Push(SqStack &S,int e) if(S.top-S.base=S.stacksize) S.base=(int *)realloc(S.base, (S.stacksize+STACKINCREMENT)*sizeof(int); if(!S.base)exit(1); S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; *S.top+=e;int Pop(SqStack *S,int e) if(S-top=S-base)return 0; e=*-S-top; -S-stacksize; r

11、eturn 1;void OutputStack(SqStack *S) int i; int *q; q=S-top-1; for(i=0;istacksize;i+) printf(%d,*q); q=q-1; printf(n);void main() SqStack s; int i,n1=0,m=0; printf(构造一个空的顺序栈n); InitStack(s); printf(顺序栈中的元素为:); for(i=0;is.stacksize;i+) Push(s,i); OutputStack(&s); m=*(s.top-1); printf(顺序栈的栈顶元素为%dn,m);

12、 printf(删除顺序栈中的元素n此时顺序栈中的元素为:); Pop(&s,n1); OutputStack(&s);链栈:#include #include typedef struct Lnode int data; struct Lnode *next; Lnode; void InitStack(Lnode *S) S-next=NULL; void Push(Lnode *S, int x) Lnode *s=(Lnode *)malloc(sizeof(Lnode); if(s=NULL) printf(分配空间失败!n); exit(1); s-data=x; s-next=S

13、-next; S-next=s; void Pop(Lnode *S, int *x) Lnode *p; if(p) *x=S-next-data; p=S-next; S-next=p-next; free(p); void OutputStack(Lnode *S) Lnode *p;for(p=S-next; p!=NULL; p=p-next) printf(%d , p-data); void main() Lnode *S=(Lnode *)malloc(sizeof(Lnode); int n,e,i; InitStack(S); printf(输入链栈元素个数:); scan

14、f(%d, &n); for( i=1; inext-data; printf(栈顶元素:%dn, e); printf(栈中元素:); OutputStack(S); printf(n); printf(删除链栈的元素n此时栈中的元素为:); Pop(S, &e); OutputStack(S); printf(n); 注意事项:每位同学必须完成实验任务,并提交实验报告。杜绝抄袭和拷贝,一经发现该次实验雷同报告均以零分计。请将实验报告以电子文档提交, “网络工程”专业请发送到*信箱中,“电子信息”专业请发送到* 信箱中,请附上程序清单.C源程序文件、和实验报告WORD文档两部分,以打包压缩文件形式提交,每次实验为一个文件夹的打包压缩文件,文件夹名统一为*?.rar或*?.zip,其中*为你的学号(全部号码),为你中文姓名,?分别为01,02,0311表示第几次实验。

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

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