栈——判断回文

 

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

 

posted @ 2020-11-19 21:10  倔强的不死人  阅读(206)  评论(0编辑  收藏  举报