答案《数据结构》试卷.docVIP

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
答案《数据结构》试卷.doc

任选5题((1,2),(3,4),(5,6),(7,8)中必须至少做一题),每题20分。 一、试设计一个双栈结构,它有两个端点end1和end2,满足从end1端插入的表目只能从end1端被删除,从end2端插入的表目只能从end2端被删除,并给出指定端i(i=1,2)的进栈push(S,e,i)和出栈pop(S,e,i)操作的算法描述。再设计一个算法,它能够将一个有限长度的数据序列a1,a2,…,an,按照下标奇偶序号交替的方式将ai (1≤i≤n)分别从两端入栈,然后将数据出栈以实现整个数据序列的倒排。 该双栈宜采用顺序存储、栈顶迎面增长的存储方式,其形式定义如下: #define STACK_SIZE 1000 typedef struct { SElemType base[STACK_SIZE]; SElemType *top[3]; //top[1]表示end1端的栈顶指针,top[2]表示end2端的栈顶指针 //初始值分别为base和base+STACK_SIZE-1 }DSqStack; 指定端i(i=1,2)的进栈push(S,e,i)和出栈pop(S,e,i)操作的算法描述如下: Status push(DSqStack S, SElemType e, int i) { if ( S.top[1]-S.top[2]==1 ) //栈满 exit(OVERFLOW); else if (i==1) *S.top[1]++ = e; else if (i==2) *S.top[2]-- = e; else return ERROR; return OK; } Status pop(DSqStack S, SElemType e, int i) { if (i==1) { if ( S.top[1] == S.base ) return ERROR; e = *--S.top[1] = e; return OK; } else if (i==2) { if (S.top[2] == S.base+STACK_SIZE-1) return ERROR; e = *++S.top[2]; return OK; } else return ERROR; } 基于上述结构的数据序列的倒排算法描述如下: Status resevers(DSqStack S, SElemType a[], int n) { for (j=1;j=n;j++) if (j%2==0) push(S, a[j-1],2); else push(S, a[j-1],1); for (j--;j=1;j--) if (j%2==0) pop(S, a[n-j],2); else pop(S, a[n-j],1); return OK; } 二、利用两个栈S1、S2模拟一个队列(如客户队列)时,如何用栈的运算实现队列的插入、删除运算。使用算法描述。 解:利用两个栈S1、S2模拟一个队列(如客户队列)时,当需要向队列中输入元素时,用S1来存放输入元素,用push运算实现。当需要从队列中输出元素时,到栈S2中去取,如果S2为空,则将S1中的元素全部送入到S2中,然后再从S2中输出元素。判断队空的条件是:S1和S2同时为空。 Status EnQueue(DataType x) { if StackFull(S1){ //S1栈满 if StackEmpty(S2){ // S1栈满,S2栈空 while (!StackEmpty(S1)){ Pop(S1, y); Push(S2, y); //栈S1的内容反向搬到栈S2 Push(S1, x); return OK; } else //S1栈满,S2栈非空,则不可进行插入操作 return ERROR; } else{  //S1栈不满,则直接进栈 Push(S1, x); return OK; } } Status DeQueue(DataType x) { if !StackEmpty(S2) { Pop(S2, x);return OK; } else{ if !StackEmpty(S1){ while (!StackEmpty(S1)){ Pop(S1, y); Push(S2, y);} //栈S1的内容反向搬到栈S2 Pop(S2, x); return OK; } else //栈S1和S2都为空 return ERROR; } } 三、模式匹配算法是在主串中快速寻找模式的一种有效的方法。如果

文档评论(0)

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

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

1亿VIP精品文档

相关文档