数据结构 习题课2.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
习题课2 栈 1.设将整数1,2,3,4依次进栈,但只要出栈时栈非空,则可将出栈操作按任何次序加入其中,请回答下述问题: (1)若入、出栈次序为push(1),pop(),push(2),push(3),pop(),pop(),push(4),pop(),出栈的数字序列为何(这里push(i)表示进栈pop()表示出栈)? (2)能否得到出栈序列1423和1432?并说明为什么不能得到或者如何得到。 (3)请分析1,2,3,4的24中排列中,哪些序列是可以通过相应的入出栈操作得到的。 【答案】 (1)1,3,2,4; (2)不能得到1423序列,因为要得到4必须2,3入栈,才能4入栈,然后4出栈,而这时,只能得到3而不能得到2;能得到1432,依照以下入、出栈序列即可得到: push(1),pop(),push(2),push(3),push(4),pop(),pop(),pop() 2.链栈中为何不设置头结点? 【答案】栈的操作位置就是栈顶一个位置,不设置头结点,插入、删除更方便。 3.循环队列的优点是什么?如何判别它为空和满? 【答案】 (1)循环队列结构解决了假溢出问题; (2)采用少用一个存储单元的策略,让队头指针指向实际队头,队尾指针指向队尾元素的下一个位置。 队空的判定条件:Q-front==Q-rear 队满的判定条件:Q-front==(Q-rear+1)%Queuesize 4.设计长度为n的链队列用单循环链表表示,若只设头指针,则入队、出队的时间为何?若只设尾指针呢? 【答案】 若只设头指针,则出队的时间为O(1),入队时需要扫描整个链表,所用的时间为O(n);若只设尾指针,则入队、出队的时间均为O(1)。 5.指出下述程序段的功能是什么? void demo(Seqstack *S) { int i, arr[64],n=0; while (!stackempty(S)) arr[n++]=pop(S); for (i=0;in;i++) push(S,arr[i]); }//demo1 【答案】程序段的功能是:利用工作数组arr[ ]将栈S中的元素序列逆置。 Seqstack S1,S2,temp; Datatype x; … //假设已作过初始化 while(!Stackempty(S1)) {x=pop(S1);push(temp,x); while(!Stackempty(temp)) {x=pop(temp);push(S1,x);push(S2,x);} 【答案】程序段的功能是:利用工作栈temp将栈S1复制到栈S2。 (3) void demo2(Seqstack *S,int m) { Seqstack T; int i; Initstack(T); while (!stackempty(S)) if (i=pop(S))!=m) push(T,i) ; while(!Stackempty(T)) {i=pop(T);push(S,i);} }//demo2 【答案】程序段的功能是:利用工作栈t将栈S中的值为m的元素滤掉。 (4) void demo3(CirQueue *Q) { int x; Seqstack S; Initstack(S); while (!QueueEmpty(Q)){x=Delqueue(Q); push(S,x) ;} while(!Stackempty(S)) {x=pop(S);Enqueue(Q,x);} }//demo3 【答案】见同步练习题。 CirQueue Q1,Q2; int x,i,m=0; ……//假设Q1已有内容Q2已作过初始化 while (!QueueEmpty(Q1)){x=Delqueue(Q1); Enqueue(Q2,x);m++ ;} for (i=0;im:i++) {x=Delqueue(Q2); Enqueue(Q1,x);Enqueue(Q2,x) ;} 【答案】程序段的功能是:把队列Q1的内容复制到队列Q2中。 算法设计题 6.回文是指正读和反读均相同的字符序列,例如“abba”和“abdba”均是回文,但“good”不是回文。试写一个算法判定给定的字符向量是否为回文(提示:将一半字符入栈)。 【答案】算法如下: int revers(char t[ ]) {Seqstack *S; char ch; int k,n; Initstack(S) n=strlen(t); for(k=0

您可能关注的文档

文档评论(0)

yaocen + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档