#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define size 100
#define len 2
typedef int status;
typedef char Elemtype;
typedef struct
{
Elemtype *top;
Elemtype *bot;
int stacksize;
}sqstack;
status initstack(sqstack &s)
{
s.bot = (Elemtype *)malloc(sizeof(Elemtype) * size);
if(!s.bot)
exit(0);
s.top = s.bot;
s.stacksize = size;
return 0;
}
status stackEmpty(sqstack s)
{
if(s.top == s.bot)
return 1;
return 0;
}
status stackPush(sqstack &s,Elemtype e)
{
Elemtype *p;
if(s.top - s.bot == s.stacksize)
p = s.bot;
s.bot = (Elemtype *)malloc(sizeof(Elemtype) * (size + len));
for(int i=0;i<s.stacksize;i++)
{
s.bot[i] = p[i];
}
s.stacksize = size + len;
free(p);
*s.top = e;
s.top++;
return 0;
}
status stackpop(sqstack &s)
{
if(stackEmpty(s) == 1)
printf("栈空!请入栈\n");
Elemtype e = *s.top;
s.top--;
return e;
}
int stackprint(sqstack s)
{
for(int k=0;k < s.top - s.bot;k++)
{
printf("|%c|\t",s.bot[k]);
}
printf("\n");
return 0;
}
int stacklength(sqstack s)
{
return (s.top - s.bot);
}
int main()
{
char str[20];
char temp;
int L,N=0,next;
sqstack s;
initstack(s);
if(initstack(s) == 0)
printf("初始化成功!!\n\n");
else
printf("初始化失败!!\n\n");
printf("请输入需要判断的字符序列:\n");
scanf("%s",str);
L = strlen(str);
printf("键入字符序列的长度是:%d\n",L);
for(int i=0;i<L/2;i++)
{
stackPush(s,str[i]);
}
stackprint(s);
if( L%2 == 0)
{
next = L/2 + 1;
}
else
{
next = L/2 + 2;
}
while( !stackEmpty(s) )
{
temp = stackpop(s);;
if( temp != str[next])
printf("不是回文!!\n");
else
next++;
N++;
}
if(N == stacklength(s))
printf("是回文!!\n");
else
printf("不是回文!!\n");
return 0;
}
//程序只执行一半的问题