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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

实验四栈与队列.docx

1、实验四栈与队列实验四栈与队列姓名王艳青学号520713130135日期2009.12.9实验题目栈与队列实验内容1采用链式存储实现栈的初始化、入栈、出栈操作。2采用顺序存储实现栈的初始化、入栈、出栈操作。3采用链式存储实现队列的初始化、入队、出队操作。4采用顺序存储实现循环队列的初始化、入队、出队操作。5在主函数中设计一个简单的菜单,分别测试上述算法。*6综合训练:1)利用栈实现表达式求值算法。2)利用栈实现迷宫求解。实验说明1基本要求:实现算法1、3或算法2、4即可。2类型定义顺序栈示例#defineMAX100/栈的最大值typedefstructElemType*base;inttop;

2、SqStack;顺序队列示例#defineMAX100/队列的最大长度typedefstructElemType*base;intfront,rear;SqQueue;3算法6的每个子功能尽可能写成函数形式。注意问题1重点理解栈、队列的算法思想,能够根据实际情况选择合适的存储结构。2注意算法6的各个函数之间值的传递情况。3栈、队列的算法是后续实验的基础(广义表、树、图、查找、排序等)。实验源代码头文件#pragmaonce#defineWIN32_LEAN_AND_MEAN /从Windows头中排除极少使用的资料#include#include栈文件include#includeusingn

3、amespacestd;typedefintDataType;structSeqStack/顺序栈类型定义intMAXNUM;/栈中最大元素个数intt;/tMAXNUM,指示栈顶位置,而不是元素个数DataType*s;typedefstructSeqStack*PSeqStack;/顺序栈类型的指针类型/算法题:创建一个空栈PSeqStackcreateEmptyStack_seq(intm);/算法题:判断栈是否为空intisEmptyStack_seq(PSeqStackpastack);/进栈(在栈中压入一个元素x)voidpush_seq(PSeqStackpastack,Data

4、Typex);/出栈(删除栈顶元素)voidpop_seq(PSeqStackpastack);/取栈顶元素(当pastack所指的栈不为空时,求栈顶元素的值)DataTypetop_seq(PSeqStackpastack);structNode;/单链表结点typedefstructNode*PNode;/指向结点的指针类型structNode/单链表结点定义DataTypeinfo;PNodelink;structLinkStack/链接栈类型定义PNodetop;/指向栈顶结点;typedefstructLinkStack*PLinkStack;/链接栈类型的指针类型/创建一个空链栈P

5、LinkStackcreateEmptyStack_link(void);/判断单链形式栈是否为空栈intisEmptyStack_link(PLinkStackplstack);/进栈(在栈中压入一个元素)voidpush_link(PLinkStackplstack,DataTypex);/出栈voidpop_link(PLinkStackplstack);/取栈顶元素DataTypetop_link(PLinkStackplstack);structSeqQueue/顺序队列类型定义intMAXNUM;/队列中最大元素个数intf,r;DataType*q;typedefSeqQueue

6、*PSeqQueue;/顺序队列类型的指针类型/创建一个空队列PSeqQueuecreateEmptyQueue_seq(intm);/判断队列是否为空intisEmptyQueue_seq(PSeqQueuepaqu);/入队(在队尾插入元素x)voidenQueue_seq(PSeqQueuepaqu,DataTypex);/出队(删除队列头部元素)voiddeQueue_seq(PSeqQueuepaqu);/取队列的头元素DataTypefrontQueue_seq(PSeqQueuepaqu);structLinkQueue/链接队列类型定义PNodef;/头指针PNoder;/尾指

7、针;typedefstructLinkQueue*PLinkQueue;/链接队列类型的指针类型/创建一个空队列PLinkQueuecreateEmptyQueue_link();/判断链接表示队列是否为空队intisEmptyQueue_link(PLinkQueueplqu);/入队voidenQueue_link(PLinkQueueplqu,DataTypex);/出队voiddeQueue_link(PLinkQueueplqu);/取队列头部结点的值DataTypefrontQueue_link(PLinkQueueplqu);/算法题:写一个递归算法把整数字符串转换为整数intc

8、harToInt(char*pChar,intlen);/算法题:编写一个算法,对于输入的十进制整数,将它的二进制表示打印出来voiddecToBinary(intx);/算法题:写一个算法从一个栈创建一个队列,使栈顶为队列的头,栈底为队列的尾,算法的最后要求使栈成为空栈PLinkQueuestackToQueue(PLinkStackplstack);/算法题:写一个算法从一个队列创建一个栈,使队列的头为栈顶,队列的尾为栈底,算法的最后要求使队列保持不变PLinkStackqueueToStack(PLinkQueueplqu);/*算法题:设有两个栈s1和s2都采用顺序表示,并且共享一个存

9、储区域,*为尽量利用空间,减少溢出的可能,现采用栈顶相对,迎面增长方式存储。*请写出对其中一个栈进行进栈操作push,出栈操作pop,求栈顶元素top运算的算法。*算法假设公用空间的大小为n,要求整个公用空间被占满(两个栈顶相碰)才发溢出信息。*/structDSeqStack/双端顺序栈类型定义intMAXNUM;/栈中最大元素个数intt1,t2;/t1、t2s=(DataType*)malloc(sizeof(DataType)*m);/分配pastack-s的存储空间if(pastack-s!=NULL)pastack-MAXNUM=m;pastack-t=-1;/t初始为-1retu

10、rn(pastack);elsefree(pastack);printf(Outofspace!n);/存储分配失败return(NULL);/算法题:判断栈是否为空intisEmptyStack_seq(PSeqStackpastack)if(pastack=NULL|pastack-t=-1)return(1);elsereturn(0);/进栈(在栈中压入一个元素x)voidpush_seq(PSeqStackpastack,DataTypex)if(pastack-t=pastack-MAXNUM-1)printf(Overflow!n);else+pastack-t;pastack-

11、spastack-t=x;/出栈(删除栈顶元素)voidpop_seq(PSeqStackpastack)if(pastack-t=-1)printf(Underflow!n);else-pastack-t;/取栈顶元素(当pastack所指的栈不为空时,求栈顶元素的值)DataTypetop_seq(PSeqStackpastack)if(pastack-t=-1)printf(Stackisempty!n);return(NULL);elsereturn(pastack-spastack-t);/创建一个空链栈PLinkStackcreateEmptyStack_link()PLinkSt

12、ackplstack;plstack=(PLinkStack)malloc(sizeof(structLinkStack);if(plstack!=NULL)plstack-top=NULL;elseprintf(Outofspace!n);/创建失败return(plstack);/判断单链形式栈是否为空栈intisEmptyStack_link(PLinkStackplstack)return(plstack-top=NULL);/进栈(在栈中压入一个元素)voidpush_link(PLinkStackplstack,DataTypex)PNodep;p=(PNode)malloc(si

13、zeof(structNode);if(p=NULL)printf(Outofspace!n);elsep-info=x;p-link=plstack-top;plstack-top=p;/出栈voidpop_link(PLinkStackplstack)PNodep;if(isEmptyStack_link(plstack)printf(Emptystackpop!n);elsep=plstack-top;plstack-top=plstack-top-link;free(p);/取栈顶元素DataTypetop_link(PLinkStackplstack)if(plstack-top=N

14、ULL)printf(Stackisempty!n);return(NULL);elsereturn(plstack-top-info);/创建一个空队列PSeqQueuecreateEmptyQueue_seq(intm)PSeqQueuepaqu=(PSeqQueue)malloc(sizeof(structSeqQueue);/分配结构SeqQueue的存储空间if(paqu!=NULL)paqu-q=(DataType*)malloc(sizeof(DataType)*m);/分配paqu-q的存储空间if(paqu-q!=NULL)paqu-MAXNUM=m;paqu-f=0;/f、

15、r初始为paqu-r=0;return(paqu);elsefree(paqu);printf(Outofspace!n);/存储分配失败return(NULL);/判断队列是否为空intisEmptyQueue_seq(PSeqQueuepaqu)return(paqu-f=paqu-r);/入队(在队尾插入元素x)voidenQueue_seq(PSeqQueuepaqu,DataTypex)if(paqu-r+1)%paqu-MAXNUM=paqu-f)printf(Fullqueue!n);elsepaqu-qpaqu-r=x;paqu-r=(paqu-r+1)%paqu-MAXNUM

16、;/出队(删除队列头部元素)voiddeQueue_seq(PSeqQueuepaqu)if(paqu-f=paqu-r)printf(EmptyQueue!n);elsepaqu-f=(paqu-f+1)%paqu-MAXNUM;/取队列的头元素DataTypefrontQueue_seq(PSeqQueuepaqu)if(paqu-f=paqu-r)printf(EmptyQueue!n);return(NULL);elsereturn(paqu-qpaqu-f);/创建一个空队列PLinkQueuecreateEmptyQueue_link()PLinkQueueplqu;plqu=(P

17、LinkQueue)malloc(sizeof(structLinkQueue);if(plqu!=NULL)plqu-f=NULL;plqu-r=NULL;elseprintf(Outofspace!n);return(plqu);/判断链接表示队列是否为空队intisEmptyQueue_link(PLinkQueueplqu)return(plqu-f=NULL);/入队voidenQueue_link(PLinkQueueplqu,DataTypex)PNodep;p=(PNode)malloc(sizeof(structNode);/申请新结点空间if(p=NULL)printf(O

18、utofspace!n);/申请新结点失败elsep-info=x;/填写新结点信息p-link=NULL;if(plqu-f=NULL)/插入前是空队列plqu-f=p;elseplqu-r-link=p;/将新结点插入plqu-r=p;/修改队尾指针/出队voiddeQueue_link(PLinkQueueplqu)PNodep;if(plqu-f=NULL)/队列已空printf(Emptyqueue!n);elsep=plqu-f;plqu-f=p-link;/修改队头指针free(p);/释放已删除结点空间/取队列头部结点的值DataTypefrontQueue_link(PLin

19、kQueueplqu)if(plqu-f=NULL)/队列已空printf(Emptyqueue!n);return(NULL);elsereturn(plqu-f-info);/算法题:写一个递归算法把整数字符串转换为整数intcharToInt(char*pChar,intlen)/len为数组中最后一个元素的下标if(len=0)/递归到第一个元素,直接返回数return(pCharlen-0);if(pCharlen-09)/元素要在与之间printf(Inputarrayisnotanumberarray.n);return(-1);return(charToInt(pChar,le

20、n-1)*10+pCharlen-0);/递归调用/算法题:编写一个算法,对于输入的十进制整数,将它的二进制表示打印出来voiddecToBinary(intx)PLinkStackplstack=createEmptyStack_link();/用栈来存储余数if(x0)x=-x;for(inti=x;i!=0;i/=2)push_link(plstack,i%2);/余数进栈while(!isEmptyStack_link(plstack)x=top_link(plstack);/取栈顶元素,打印,出栈printf(%d,x);pop_link(plstack);printf(n);/算法

21、题:写一个算法从一个栈创建一个队列,使栈顶为队列的头,栈底为队列的尾,算法的最后要求使栈成为空栈PLinkQueuestackToQueue(PLinkStackplstack)PLinkQueueplqu=createEmptyQueue_link();DataTypei;while(!isEmptyStack_link(plstack)i=top_link(plstack);enQueue_link(plqu,i);pop_link(plstack);return(plqu);/算法题:写一个算法从一个队列创建一个栈,使队列的头为栈顶,队列的尾为栈底,算法的最后要求使队列保持不变PLink

22、StackqueueToStack(PLinkQueueplqu)PLinkStackplstack=createEmptyStack_link();PLinkStackplstackA=createEmptyStack_link();PLinkQueueplquA=createEmptyQueue_link();DataTypei;while(!isEmptyQueue_link(plqu)i=frontQueue_link(plqu);/取队列plqu头元素i并出队deQueue_link(plqu);enQueue_link(plquA,i);/将i在plquA入队push_link(plstackA,i);/将i入栈plstackAwhile(!isEmptyStack_link(plstackA)/将plstackA的元素依次出栈并入plstack栈i=top_link(plstackA);pop_link(plstackA);push_link(plstack,

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

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