用压栈的方法实现回文数

来源:互联网 发布:大数据开发培训机构 编辑:程序博客网 时间:2024/05/07 11:56
#include<stdio.h>#include<stdlib.h>#include<malloc.h>#define OVERFLOW -2#define OK 1#define ERROR 0#define MAXSIZE 100typedef int status;typedef char SElemType;typedef char QElemType;typedef struct{SElemType *base;SElemType *top;int stacksize;}Sqstack;typedef struct{QElemType *base;char front;char rear;}SqQueue;status Initstack(Sqstack *S){S->base=(SElemType*)malloc(MAXSIZE*sizeof(SElemType));if(!S->base) exit(OVERFLOW);S->top=S->base;S->stacksize=MAXSIZE;return OK;}status Emtypestack(Sqstack *S){if(S->top==S->base)return OK;elsereturn ERROR;}status InitQueue(SqQueue *Q){Q->base=(QElemType *)malloc(MAXSIZE*sizeof(QElemType));if(!Q->base) exit(OVERFLOW);Q->front=Q->rear=0;return OK;}status Push(Sqstack *S,SElemType x){if(S->top-S->base>=S->stacksize){S->base=(SElemType *)realloc(S->base,(S->stacksize+MAXSIZE)*sizeof(SElemType));if(!S->base) exit(OVERFLOW);    S->top=S->base+S->stacksize;S->stacksize+=MAXSIZE;}*S->top=x;S->top--;return OK;}status Pop(Sqstack *S,SElemType *x){if(S->top==S->base)return ERROR;else{S->top--;*x=*S->top;return OK;}}status EnQueue(SqQueue *Q,QElemType y){if((Q->rear+1)%MAXSIZE==Q->front)return ERROR;Q->base[Q->rear]=y;Q->rear=(Q->rear+1)%MAXSIZE;return OK;}status DeQueue(SqQueue *Q,QElemType *y){if(Q->front=Q->rear)return ERROR;*y=Q->base[Q->front];Q->front=(Q->front+1)%MAXSIZE;return OK;}status ReturnText(Sqstack *S,SqQueue *Q,char *C){QElemType y;SElemType x;Initstack(S);//鍒濆鍖朣InitQueue(Q);//鍒濆鍖朡*C=getchar();while((*C)!='@'){Push(S,*C);//鍏ユ爤EnQueue(Q,*C);//鍏ラ槦*C=getchar();}while(!Emtypestack(S))//鏍堜笉涓虹┖{Pop(S,&x);//鍑烘爤DeQueue(Q,&y);//鍑洪槦if(x!=y)//鍒ゆ柇{           printf("涓嶆槸鍥炴枃鏁癨n");          break;}else{printf("鏄洖鏂囨暟\n");    break;}}return OK;}int main(void){SqQueue Q;Sqstack S;QElemType y;SElemType x;char C;scanf("%c",&C);ReturnText(&S,&Q,&C);return OK;}

0 0