软基上机实验报告-栈与队列(拓展题).docxVIP

软基上机实验报告-栈与队列(拓展题).docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
程序流ex3_3:教材第一章习题12题——扩展题1)两个栈共用一个数组空间,它们的栈底分别在数组两端,栈顶相向而行。编写入栈和出栈函数,实现两个栈元素分别的(但共用)入栈和出栈。2)main中函数完成以下测试:a、能否在共用空间上实现两个独立的栈:即能否向两个栈分别输入元素;能否分别从两个栈取出元素,每个栈取出的元素的顺序符合各自栈的特点b、能否在共用空间用满时,及时制止新的入栈行为。例如: 假设数组大小为6,main函数实现以下动作,向栈1接连入栈4个元素后,向栈2入栈2个元素致栈满,再向栈2输入一个元素,将报错。接着从栈1出栈1个元素,再向栈2入栈,就会成功。最后,两个栈分别出空,观察输出顺序是否满足栈的特点。程说明ex3_4:教材第一章习题13题——扩展题1)实现一种扩展的循环队列,使得全部的数组空间都能使用,基本思路是当传统循环队列放满时:即 (rear+1)%MAXNUM ==front 为真时,可以再入队一个元素,接着rear = (rear+1)%MAXNUM后就会与front相等,此时将另外一个变量flag设置为1,表示此时的rear==front不是为空,而是满。否则flag为0时,如果出现rear==front,则表示队列为空。2)main()函数实现以下测试:a、能否实现全部“装满”,即装入元素个数为MAXNUMb、能否按照循环队列那样绕着存放空间循环存放。c、能否在装满后,拒绝再装。d、能否在装满后,不会变成“空”的——即可以还可正常出队。e、能否在全部出空后,不会变成“满”的——即可还可正常入队。例如: 假设循环队列最大空间为5,main()函数实现以下动作,接连成功入队5个元素,入队第6个元素时,报错。接着出队3个元素,入队3个元素,均成功。再入队1个,报错。继续连续成功出队6个元素,出队第7个时报错。最后,再成功入队2个元素。拓展题3-3:首先建立一个共有一个数组空间的栈(栈一以数组空间的头为栈尾,栈二以数组空间的尾为栈尾)进栈:首先进行两步判断,先对栈顶的合理性进行判断,如果栈一的栈顶小于一或栈二的栈顶大于数组空间长度,返回错误,然后再对栈是否已满进行判断,如果已满,返回错误。接着进行入栈,如果入栈一,将元素赋予栈一的栈顶,将栈一的顶加一,如果入栈二,将元素赋予栈二的栈顶,将栈二的顶减一。出栈:根据所入的栈进行判断,如果该栈已空,返回错误。然后进行出栈,如果是栈一,将栈顶减一,如果是栈二,将栈顶减一即可。拓展题3-4:由于队头不储存元素,所以传统的方法无法完全利用分配的存储空间进队列函数:首先对队列是否已满进行判断,如果头尾节点相等且flag置1,那么队列已满,返回错误。然后进行入队(基本题的入队方法,这里不再赘述)出队列函数:首先对队列是否已空进行判断,如果头尾节点相等且flag为0,那么队列已空,返回错误。然后进行出队(基本题的出队方法,这里不再赘述)主函数:设置一个flagmain位,初始为0,每一个元素进栈加一,每一个元素出栈减一,如果为5将flag为置一,小于5时均将flag为置0.程序代码:拓展题3-3:#includestdio.h#includestdlib.h#define N 6typedef struct{ int data[N]; int top1; int top2;}node;//进栈函数int push(node *t,int i,int x){node *p;p=t;if(p-top10||p-top2=N){printf(the top of the stack is false\n);return 0;} if(t-top2+1==t-top1){printf(this stack if full\n);return 0;} if(i==1){ p-data[p-top1]=x; p-top1++;} else{p-data[p-top2]=x;p-top2--;} return 0;}//出栈函数int pop(node *t,int i){node *p;p=t;if(p-top1==0i==0){printf(stack one if NULL\n);return 0;} if(p-top2==N-1i==2){printf(stack two if NULL\n);return 0;}if(i==1)p-top1--;elsep-top2++;return 0;}//显示函数int show(node *t){node *p;int i;p=t;if(p-top10||p-top2=N){printf(the top of the stack is flase\n);return 0;}else{printf(stack one:\n);for(i=

文档评论(0)

js1180 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档