资源描述:
《数据结构(C语言版)习题集答案 第三章 栈与队列.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第三章栈与队列3.15typedefstruct{ Elemtype*base[2]; Elemtype*top[2]; }BDStacktype;//双向栈类型StatusInit_Stack(BDStacktype&tws,intm)//初始化一个大小为m的双向栈tws{ tws.base[0]=(Elemtype*)malloc(sizeof(Elemtype)); tws.base[1]=tws.base[0]+m; tws.top[0]=tw
2、s.base[0]; tws.top[1]=tws.base[1]; returnOK;}//Init_StackStatuspush(BDStacktype&tws,inti,Elemtypex)//x入栈,i=0表示低端栈,i=1表示高端栈{ if(tws.top[0]>tws.top[1])returnOVERFLOW;//注意此时的栈满条件 if(i==0)*tws.top[0]++=x; elseif(i==1)*tws.top[1]--=x; elsereturnERROR; returnOK;}//pushStat
3、uspop(BDStacktype&tws,inti,Elemtype&x)//x出栈,i=0表示低端栈,i=1表示高端栈{ if(i==0) { if(tws.top[0]==tws.base[0])returnOVERFLOW; x=*--tws.top[0]; } elseif(i==1) { if(tws.top[1]==tws.base[1])returnOVERFLOW; x=*++tws.top[1]; } elsereturnERROR; returnOK;}//pop3.16voidT
4、rain_arrange(char*train)//这里用字符串train表示火车,'H'表示硬席,'S'表示软席{ p=train;q=train; InitStack(s); while(*p) { if(*p=='H')push(s,*p);//把'H'存入栈中 else*(q++)=*p;//把'S'调到前部 p++; } while(!StackEmpty(s)) { pop(s,c); *(q++)=c;//把'H'接在后部 }}//Train_arrange3.17intIsReve
5、rse()//判断输入的字符串中'&'前和'&'后部分是否为逆串,是则返回1,否则返回0{ InitStack(s); while((e=getchar())!='&') push(s,e); while((e=getchar())!='@') { if(StackEmpty(s))return0; pop(s,c); if(e!=c)return0; } if(!StackEmpty(s))return0; return1;}//IsReverse3.18StatusBracket_Test(char*
6、str)//判别表达式中小括号是否匹配{ count=0; for(p=str;*p;p++) { if(*p=='(')count++; elseif(*p==')')count--; if(count<0)returnERROR; } if(count)returnERROR;//注意括号不匹配的两种情况 returnOK;}//Bracket_Test3.19StatusAllBrackets_Test(char*str)//判别表达式中三种括号是否匹配{ InitStack(s); for(p=str
7、;*p;p++) { if(*p=='('
8、
9、*p=='['
10、
11、*p=='{')push(s,*p); elseif(*p==')'
12、
13、*p==']'
14、
15、*p=='}') { if(StackEmpty(s))returnERROR; pop(s,c); if(*p==')'&&c!='(')returnERROR; if(*p==']'&&c!='[')returnERROR; if(*p=='}'&&c!='{')returnERROR;//必须与当前栈顶括号匹配
16、 } }//for if(!StackEmpty(s))returnERROR; returnOK;}//AllBrackets_Test3.20typede