- 1、本文档共14页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)