日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

栈的运用(2)

發布時間:2025/5/22 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 栈的运用(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

總結

以上是生活随笔為你收集整理的栈的运用(2)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。