實驗項目6——迴文判斷

 

實驗內容

 

[問題描述]

    試寫一個算法,判斷依次讀入的一個以@爲結束符的字母序列,是否爲形如‘序列1&序列2’模式的字符序列。其中序列1和序列2中都不含字符‘&’,且序列2是序列1的逆序列。例如,‘a+b&b+a’是屬該模式的字符序列,而‘1+3&3-1’則不是。

[基本要求]

    對於鍵盤輸入的任意一個字符串,將其進行逆置,判斷原串和逆置的串是否完全一致,完全一致則爲迴文,因此分別利用隊列的先進先出(FIFO)和棧的後進先出(FILO)實現,算法只能使用一個棧和一個隊列以及若干簡單類型變量,算法時間複雜度應爲O(n)

【代碼】

 

  1. #include<iostream>  
  2. #include<stack>  
  3. #include<queue>  
  4. using namespace std;  
  5. bool palindrome();  
  6. int main()  
  7. {  
  8.     cout<<"請輸入字符串(以@結束,中間部分以&分開)"<<endl;  
  9.     if(palindrome()==true)  
  10.     {  
  11.         cout<<"是迴文。";  
  12.     }  
  13.     else 
  14.     {  
  15.         cout<<"不是迴文。";  
  16.     }  
  17.     system("pause");  
  18. }  
  19. bool palindrome()  
  20. {  
  21.     stack<char> s;  
  22.     queue<char> q;  
  23.     char str;  
  24.     while((str=getchar())!='@')  
  25.     {  
  26.         q.push(str);  
  27.         s.push(str);  
  28.     }  
  29.     if(s.size()%2==0)  
  30.     {  
  31.         return false;  
  32.     }  
  33.     else 
  34.     {  
  35.     while(!s.empty() && !q.empty())  
  36.     if(s.top()!=q.front())  
  37.         return false;  
  38.     else 
  39.         return true;  
  40.     }  
  41. }  

【運行結果】

 

注:以上內容僅供參考,如有問題歡迎指正

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章