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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

山东大学数据结构第二次实验实验报告.docx

1、山东大学数据结构第二次实验实验报告实验2 ADT栈与队列的编程与实现实验目的:加深对抽象数据类型ADT栈和队列的理解;实验原理:参照课本p.64-66,及Figure3.39-3.44; 课本p.82-83,及Figure3.57-3.60.实验内容:编写程序实现ADT栈的定义,及常用操作(数组或指针实现):1)生成栈;2)Push3)Pop编写程序实现ADT队列的定义,及常用操作:1)生成队列;2)Enqueues入列;3)Isempty判断是否队列为空。实验要求:1)实现ADT栈的结构及操作;2)实现ADT队列的结构及操作,并给出应用。1.栈(链表实现)实验源程序:#include std

2、afx.h #include stdio.h #include stdlib.h #include malloc.h #include string.htypedef struct node /定义一个栈的结构 int data; struct node *pNext; /pNext为指向栈中下一个空间的指针Node,*pNode; typedef pNode Stack;Stack InitStack() ; /初始化栈void CreateStack(Stack Top); /生成栈bool Empty(Stack Top); /判断栈是否为空void Push(Stack Top,int

3、 n); /进行压栈操作void Pop(Stack Top); /进行出栈操作void TraverseStack(Stack Top); /遍历栈的函数void DeleteStack(Stack Top); /清空栈的函数int main() /主函数 int n; char str6; /定义数组,存储操作指令 Stack Top=NULL; /初始化Top为NULL Top=InitStack(); /初始化栈CreateStack(Top); /生成栈 TraverseStack(Top); /遍历栈 printf(请输入下一步操作指令(push,pop or end):);whi

4、le(1) scanf(%s,str); /获取操作指令 if(strcmp(str,push)=0) printf(请输入入栈的元素:); scanf(%d,&n); Push(Top,n); /进栈操作 TraverseStack(Top); printf(请输入下一步操作指令(push,pop or end):); if(strcmp(str,pop)=0) Pop(Top); /出栈操作 TraverseStack(Top); printf(请输入下一步操作指令(push,pop or end):); if(strcmp(str,end)=0) break; /跳出循环 if(strc

5、mp(str,push)!=0&strcmp(str,pop)!=0&strcmp(str,end)!=0) printf(输入指令错误,请重新输入指令:); DeleteStack(Top); /释放栈空间 return 0; Stack InitStack() /进行栈的初始化的函数 Stack Top = (Stack)malloc(sizeof(Node); /分配内存空间给栈顶if(Top=NULL) printf(动态分配内存失败n); exit(1); printf(初始化栈成功n); Top-pNext = NULL; /栈顶指针的指向置为NULL; return Top;vo

6、id CreateStack(Stack Top) /生成栈 int LEN,x; Stack Bottom = Top; /令Top和Bottom指向同一空间 Bottom-pNext = NULL; printf(请输入想要入栈的元素个数:); scanf(%d,&LEN); for(int i = 0; i data = x; /将输入的数放在栈data单元中 Bottom-pNext = pNew; /Bottom指向新分配空间的单元 pNew-pNext = NULL; /令pNew指向NULL Bottom = pNew; /让新分配空间的单元成为栈底 printf(生成栈成功n)

7、; bool IsEmpty(Stack Top) / 判断栈是否为空 return Top-pNext=NULL; void Push(Stack Top,int n) /进行进栈操作的函数 Stack pNew = (Stack)malloc(sizeof(Node); /定义一个新节点,并分配内存空间if(pNew=NULL) printf(未能动态分配内存,进栈失败n);return ; pNew-data = n; pNew-pNext = Top-pNext; Top-pNext = pNew; void Pop(Stack Top) /进行出栈操作函数 Stack p=Top-p

8、Next;if (IsEmpty(Top)=true) /判断栈是否为空,为空就不能进行出栈操作 printf(栈为空,Pop失败n); return ; else printf(弹出的栈顶元素为:); printf(%d n,p-data); /显示出栈元素 Top-pNext=p-pNext; free(p); void TraverseStack(Stack Top) /遍历栈,获取栈中的数值 printf(现在栈中的元素从栈顶到栈底依次为:); Stack p = Top-pNext; if(p=NULL)printf(栈空);while(p!=NULL) printf(%d ,p-d

9、ata); p = p-pNext; printf(n); void DeleteStack(Stack Top) /释放栈空间 Stack p,q ; p=Top-pNext; while (p != NULL) q=p-pNext; free(p); p=q; Top-pNext=NULL; 实验结果:1)生成栈初始化栈。 生成栈成功。 2)Push 输入push,进行入栈操作,得到新的栈序列。 3) Pop 输入pop,进行出栈操作,弹出栈顶元素9,并且得到新的栈序列。 如果不断进行pop操作,当栈为空时会出现pop失败。 4)其余操作结束进程 输入指令end可以结束进程,不会出现要求输

10、入下一步指令。 输入错误的指令 若在指令输出端输入错误指令,则要求重新输入指令直到输入正确指令 2. 队列(循环数组实现)实验源程序:#include stdafx.h #include stdio.h #include stdlib.h #include malloc.h#include string.h#define maxsize 11 typedef struct pQueue int queuemaxsize; int rear; /最后元素的位置 int front; /最前元素的位置的前一个位置 Aqueue,*Queue; Queue QueueInit(); /初始化队列vo

11、id CreateQueue(Queue Q,int n); /生成队列int IsFull(Queue Q); /判断队列是否为满int IsEmpty(Queue Q); /判断队列是否为空int EnQueue(Queue Q,int x); /入队int DeQueue(Queue Q); /出队void TraverseQueue(Queue Q); /遍历队列int main() /主函数 int n,x; char str10; Queue Q=QueueInit(); /初始化队列 printf(请输入想要入队元素个数(小于%d):,maxsize); while(1) sca

12、nf(%d,&n); if(nmaxsize)break; printf(请重新输入想要入队元素个数(小于%d):,maxsize); CreateQueue(Q,n); /生成队列 printf(队列中的元素依次为:); TraverseQueue(Q); printf(请输入下一步操作指令(Enqueue,Dequeue or end):); while(1) scanf(%s,str); /获取操作指令 if(strcmp(str,Enqueue)=0) printf(请输入想要入队的元素:); scanf(%d,&x); if(EnQueue(Q,x) /入队 printf(元素%d入

13、队后队列中元素依次为:,x); TraverseQueue(Q); printf(请输入下一步操作指令(Enqueue,Dequeue or end):); if(strcmp(str,Dequeue)=0) if(IsEmpty(Q)=0) printf(元素%d出队后队列中元素依次为:,DeQueue(Q);/出队 TraverseQueue(Q); printf(请输入下一步操作指令(Enqueue,Dequeue or end):); else printf(队列为空,出队失败n); printf(请输入下一步操作指令(Enqueue,Dequeue or end):); if(strcmp(str,end)=0) break; /跳出循环 if(strcmp(str,Enqueue)!=0&st

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

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