栈——判断回文
//"SqStack.h" #include<iostream> using namespace std; #define SElemType_int int #define SElemType_char char #define MAXSIZE 100 typedef struct{ SElemType_int *base; SElemType_int *top; int stacksize; }SqStack_int; typedef struct{ SElemType_char *base; SElemType_char *top; int stacksize; }SqStack_char; string InitStack(SqStack_int &S){ S.base = new SElemType_int[MAXSIZE]; S.top = S.base; S.stacksize=MAXSIZE; return "OK"; } string InitStack(SqStack_char &S){ S.base = new SElemType_char[MAXSIZE]; S.top = S.base; S.stacksize=MAXSIZE; return "OK"; } string Push(SqStack_int &S,SElemType_int e){ if(S.top-S.base == S.stacksize) return "ERROR"; *S.top=e; S.top++; return "OK"; } string Push(SqStack_char &S,SElemType_char e){ if(S.top-S.base == S.stacksize) return "ERROR"; *S.top=e; S.top++; return "OK"; } string pop(SqStack_int &S,SElemType_int &e){ if(S.base == S.top) return "ERROE"; S.top--; e = *S.top; return "OK"; } string pop(SqStack_char &S,SElemType_char &e){ if(S.base == S.top) return "ERROE"; S.top--; e = *S.top; return "OK"; } SElemType_int GetTop(SqStack_int S){ if(S.top != S.base){ return *(S.top-1); } } SElemType_char GetTop(SqStack_char S){ if(S.top != S.base){ return *(S.top-1); } } int StackEmpty(SqStack_char S){ if(S.top == S.base) return 1; return 0; } int StackEmpty(SqStack_int S){ if(S.top == S.base) return 1; return 0; }
#include<iostream> #include"SqStack.h" using namespace std; /* 判断回文 */ int main(){ SqStack_char C ; InitStack(C); int n; int flag1 = 0; //判断奇偶 int flag2 = 0; //判断正误 cout <<"How many characters"<<endl; cin >> n; cout << "Input one leter per time"<<endl; char ch; if(n%2) flag1 = 1; for(int i=1;i<=(n/2);i++){ //将一半字符入栈 cin >> ch; Push(C,ch); } if(flag1){ //有奇数个字符 cin >> ch; for(int i=(n/2+2);i<=n;i++){ cin >> ch; char e; pop(C,e); if(ch != e){ flag2 = 1;break; //另外一半字符分别对栈顶字符进行比较 } } }else { for(int i=(n/2+1);i<=n;i++){ cin >> ch; char e; pop(C,e); if(ch != e){ flag2 = 1;break; } } } if(flag2) cout <<"WRONG"; else cout << "TRUE"; system("pause"); return 0; }