1. 程式人生 > 實用技巧 >棧——判斷迴文

棧——判斷迴文

//"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;
}