栈的运用(2)
問題描述:
?寫一個算法,識別依次讀入的一個以@為結束符的字符序列是否為形如‘序列1&序列2’模式的字符序列。其中序列1和序列2中都不含字符‘&’,且序列2是序列1的逆序列。例如,‘a+b&b+a’是屬該模式的字符序列,而‘1+3&3-1’則不是
問題分析:
?思路應該是有的,先讀入字符序列,當讀到‘&’時,前面的一個入隊列,后面的一個進棧,然后都用數組來保存,最后比較兩數組的元素是否都相同,若相同,則是該模式。
Int?main()
{
??Stack?s;
??Queue?q;
??Char?buffer1[20];?
??Char?buffer2[20];
??Int?i=0,count=0,j=0;
??Char?temp=’’;
??Printf(“請輸入字符序列”);
??While(temp!=’@’){
????Scanf(“%c”,?&temp);
Buffer1[i]=temp;
I++;
}
While(buffer1[i]!=’&’){
Push(q,buffer1[i]);
I--;
}
If?(buffer[i]==’&’)
{
???Count++;
???I--;
???If(count==1)
???{?
?????While(buffer1[i])
?????{
??????Push(s,buffer1[i]);
??????I--;
?????}
???}
???Else?
????{
???????printf(“這不是模式的字符序列”);
???????Return?;
????}
}
I=0;
j=0;
While(!stackempty(s)){
Pop(s,buffer1[i]);
I++;
}
While(!queueempty(q))
{
?Pop(q,buffer2[j]);
?J++;
}
If(i==j)
{
??While(buffer[i])
?{
??????If(Strcmp(buffer[i],buffer[j]))?
??????{
???????I++;
???????j++;
??????}
??????Else
??????{
????????Printf(“這不是模式的字符序列”);
????????Return;
??????}
??????}//while
????}//if
????Else
{
???Printf(“這不是模式字符序列”);
???Return;
}
?}
看得出我把問題弄復雜了,把復雜簡單化,要理清思路。書上的算法:
Bool?Symmetry(char??a[])
{
?????Int?i=0;
?????Stack?s;
?????InitStack(s);
?????ElemType?x;
?????While(a[i]!=’&’&&a[i])
?????{
????????Push(s,?a[i]);
????????I++;
?????}
If(a[i])?return?false;
I++;//跳過’&’這個字符
While(a[i])
{
??Pop(s,x);//先彈出來,然后立即判斷
???If(x!=a[i]){
???DestoryStack(s);
???Return?false;//表明已經不是模式字符串
???}
???I++;
}
Return?true;
}
?
轉載于:https://www.cnblogs.com/wj204/archive/2013/04/26/3044336.html
總結
- 上一篇: spring心得5--构造器注入@设置控
- 下一篇: 每个人都需要安全感