第三章作业答案知识讲稿.ppt

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
if语句不能用作循环语句: for或while用于循环语句。 ;1. 简述下列算法的功能: status algo(Stack S) { int i,n,A[255]; n=0; while(!StackEmpty(S)) {n++;Pop(S,A[n]);} for(i=1;i=n;i++) Push(S,A[i]); } ;Status AllBrackets_Test(char *str) { //判别表达式中三种括号是否匹配 ?InitStack(S); ??for(p=str;*p;p++) ??{ ????if(*p==(||*p==[||*p=={) push(S,*p); ????else if(*p==)||*p==]||*p==}) ????{ ??????if(StackEmpty(S)) return ERROR; ??????pop(S,c); ??????if(*p==)c!=() return ERROR; ??????if(*p==]c!=[) return ERROR; ??????if(*p==}c!={) return ERROR; //必须与当前栈顶括号匹配 ????}//end? else if ?}//end for ??if(!StackEmpty(s)) return ERROR; ??return OK; }//AllBrackets_Test ;3.如果希望循环队列中的元素都能得到利用,则需要设置一个标志域tag,并以tag的值为0或1来区分尾指针和头指针值相同时的队列状态是“空”还是“满”。试编写与此结构相应的入队列和出队列的算法,并从时间和空间角度讨论和不设标志这两种方法的使用范围(如当循环队列容量较小而队列中每个元素占的空间较多时,哪一种方法较好)。 (提示:将标志的初值置“0”。一旦元素入队列使得rear=front时,需要置tag为“1”:反之,一旦元素出队列使得rear=front时,需要置tag为“0”,以便使得下一次进入队列或出队列操作时,此时front=rear,根据tag的值来判断队列的状态。) ;Status EnCyQueue(CyQueue Q,int x) { //带tag域的循环队列入队算法 ?if(Q.tag==1) //tag域的值为0表示空,1表示满 ???return ERROR; ??Q.base[Q.rear]=x; ??Q.rear=(Q.rear+1)%MAXSIZE; ??if(Q.front==Q.rear) Q.tag=1; //队列满 }//EnCyQueue ;Status DeCyQueue(CyQueue Q,int x) { //带tag域的循环队列出队算法 ?if(Q.tag==0) //队列空 return ERROR; x=Q.base[Q.front]; Q.front=(Q.front+1)%MAXSIZE; ?if(Q.front==Q.rear) Q.tag=0; //队列空 ?return OK; }//DeCyQueue ;4.假设称正读和反读都相同的字符序列为“回文”,例如,’abba’和’abcba’回文,’abcde’和’ababab’不是回文。试写一个算法判别读入的一个以’@’为结束符的字符序列是否是“回文”。 int Palindrome_Test() //判别输入的字符串是否回文序列,是则返回1,否则返回0 {…………..} ;Status Palindrome_Test() //检查是否回文 { InitStack(S);InitQueue(Q); while((c=getchar()!=@){ ????Push(S,c);EnQueue(Q,c); //同时使用栈和队列两种结构 ??} ??while(!StackEmpty(S)) ??{?Pop(S,a);DeQueue(Q,b)); ????if(a!=b) return ERROR; ??} ??return OK; }; 5. 假设如题1所述火车调度站的入口处有n节硬席或软席车厢(分别以H和S表示)等待调度,试编写算法,输出对这n节车厢进行调度的操作(即入栈或出栈操作)序列,以使所有的软席车厢都被调到硬席车厢之前。 提示:void Train_arrange(char *train){} //这里用字符串train表示火车, 字符H表示硬席,S表示软席,设两个指针p和q,其中,p指向字符串train,q指向一个新的字符串,用于存放排序后的结果。 ;void Train_arrange(c

文档评论(0)

186****7785 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档