#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define OVERFLOW -2
#define OK 1
#define ERROR 0
#define MAXSIZE 100
typedef 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;
else
return 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;
}
还没有评论,来说两句吧...