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);
}
}