2013-10-03 15 views
0

因此,我編寫了一個程序,它將堆棧類實現爲鏈接列表。到目前爲止,該程序需要用戶輸入的任何字符串,併成功地將每個字符放入堆棧(至少我認爲它是這樣)。我需要知道的是我如何瀏覽每個角色並確定字符串是否是迴文。有小費嗎?需要修改堆棧/鏈接列表程序以確定單詞是否爲迴文

這裏是我到目前爲止的代碼:

主營:

#include <iostream> 
#include <cstdlib> 
#include <string> 
#include "stack.h" 

using namespace std; 

int main(){ 
Stack o; 
cout << "Enter a string" << endl; 
string word; 
cin >> word; 
o.divide_String(word); 

o.Print(); 

return 0; 
} 

頁眉:

#ifndef STACKS_H 
#define STACKS_H 
#include <string> 

using namespace std; 

class Stack{ 
private: 

    typedef struct item{  
     char letter; 
     item* prev; 
    }* itemPtr; 
    itemPtr stackPtr; 


public: 
    Stack();  
    void Push(char letter); 
    void Pop(); 
    void ReadItem(item* r); 
    void Print(); 
    void Stack::divide_String(string s); 
    ~Stack(); 

}; 

#endif 

函數定義:

#include <cstdlib> 
#include <iostream> 
#include "stack.h" 




using namespace std; 

Stack::Stack(){ 
    stackPtr = NULL; 
} 

Stack::~Stack(){  
    itemPtr p1; 
    itemPtr p2; 

    p1 = stackPtr; 
    while(p1 != NULL){ 
     p2 = p1;   
     p1 = p1->prev; 
     delete p2;  
    } 
} 

void Stack::Push(char letter){ 
    itemPtr n = new item;  
    n->letter = letter;   

    if(stackPtr == NULL){  
     stackPtr = n;   
     stackPtr->prev = NULL; 
    } 
    else{      
     n->prev = stackPtr; 
     stackPtr = n; 
    } 
} 

void Stack::Pop(){    
    if(stackPtr == NULL){  
     cout << "There is nothing on the stack." << endl; 
    } 
    else{  
     itemPtr p = stackPtr; 
     ReadItem(p);    
     stackPtr = stackPtr->prev; 
     p->prev = NULL;   
     delete p;    
    } 
} 

void Stack::ReadItem(item* r){ 
    cout << r->letter; 
} 

void Stack::Print(){ 
    itemPtr x = stackPtr; 
    cout << "Current Stack: " << endl; 
    while(x != NULL){  
     ReadItem(x);   
     x = x->prev; 
     cout << endl; 
    } 
    cout << endl; 
} 

void Stack::divide_String(string s){ 
    for(char &c : s){ 
     Push(c); 
    } 

} 

回答

0

這裏有幾個要點:

  • 這與使用堆棧驗證表達式中的括號沒有太大區別。
  • 迴文中一半的字符應該與另一半相反。由於堆棧是LIFO,所以這種比較變得更容易。
  • 你需要考慮到,如果有一個奇數字符串中的字符會發生什麼,因此不會給你一個乾淨的一半

希望這有助於。注:不要放任何代碼,因爲我鼓勵你嘗試解決問題。有幾種不同的方式來做到這一點。

相關問題