主题:利用栈判断回文,看看程序哪出错了
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#define OK 1
#define ERROR 0
typedef int Status;
//------栈的顺序存储表示------------
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef struct
{char *base;
char *top;
char stacksize;
}SqStack;
Status InitStack(SqStack &s)
{//构造一个空栈
s.base=(char *)malloc(STACK_INIT_SIZE*sizeof(char));
if(!s.base) return ERROR;
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
return OK;
}
Status GetTop(SqStack s,char &e)
{//若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR
if(s.base==s.top) return ERROR;
e=*(s.top-1);
return OK;
}
Status push(SqStack &s,char e)
{//插入e为新的栈顶元素
if(s.top-s.base>=s.stacksize)
{s.base=(char *)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(char));
if(!s.base) return ERROR;
s.top=s.base+s.stacksize;
s.stacksize+=STACKINCREMENT;
}
*s.top++=e;
return OK;
}
Status pop(SqStack &s,char &e)
{//若栈不空,则删除S的栈顶元素,用e返回其值,并返回炽OK;否则返回ERROR
if(s.base==s.top) return ERROR;
e=*--s.top;
return OK;
}
Status StackEmpty(SqStack s)
{//判栈是否为空
if(s.base==s.top) return OK;
else return ERROR;
}
main()
{char ch1[50],ch2[50],e;int i=0;SqStack s;
InitStack(s);
printf("请输入字符串:");
scanf("%s",ch1);
while(ch1[i++]!='\0')
push(s,ch1[i]);
i=0;
while(!StackEmpty(s))
{pop(s,e); ch2[i++]=e;
}
/*for(i=0;i<n;i++)
if(ch1[i]=!ch2[i]) break;*/
if(!strcmp(ch1,ch2)) printf("输入的字符串是回文\n");
else printf("输入的字符串不是回文\n");
}
#include <malloc.h>
#include <string.h>
#define OK 1
#define ERROR 0
typedef int Status;
//------栈的顺序存储表示------------
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef struct
{char *base;
char *top;
char stacksize;
}SqStack;
Status InitStack(SqStack &s)
{//构造一个空栈
s.base=(char *)malloc(STACK_INIT_SIZE*sizeof(char));
if(!s.base) return ERROR;
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
return OK;
}
Status GetTop(SqStack s,char &e)
{//若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR
if(s.base==s.top) return ERROR;
e=*(s.top-1);
return OK;
}
Status push(SqStack &s,char e)
{//插入e为新的栈顶元素
if(s.top-s.base>=s.stacksize)
{s.base=(char *)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(char));
if(!s.base) return ERROR;
s.top=s.base+s.stacksize;
s.stacksize+=STACKINCREMENT;
}
*s.top++=e;
return OK;
}
Status pop(SqStack &s,char &e)
{//若栈不空,则删除S的栈顶元素,用e返回其值,并返回炽OK;否则返回ERROR
if(s.base==s.top) return ERROR;
e=*--s.top;
return OK;
}
Status StackEmpty(SqStack s)
{//判栈是否为空
if(s.base==s.top) return OK;
else return ERROR;
}
main()
{char ch1[50],ch2[50],e;int i=0;SqStack s;
InitStack(s);
printf("请输入字符串:");
scanf("%s",ch1);
while(ch1[i++]!='\0')
push(s,ch1[i]);
i=0;
while(!StackEmpty(s))
{pop(s,e); ch2[i++]=e;
}
/*for(i=0;i<n;i++)
if(ch1[i]=!ch2[i]) break;*/
if(!strcmp(ch1,ch2)) printf("输入的字符串是回文\n");
else printf("输入的字符串不是回文\n");
}