堆栈的应用之判断字符串是否是回文
C语言代码如下:
栈是一种先进后出的数据结构,队列是先进先出的结构。
“回文数”是一种数字,如:98789,
这个数字正读是98789,倒读也是98789,正读倒读一样,所以这个数字就是回文数.
对于测试一个字符串是否是回文的问题,其实也就是判断一个字符串两边是否对称的问题。
这里用堆栈实现
#include<stdlib.h>
#include<string.h>
#define StackSize 100
typedef struct
{
char data[StackSize];
int top;
}SeqStack;
void InitStack(SeqStack *S)
{
S->top=-1;
}
int EmptyStack(SeqStack *S)
{
return S->top==-1;
}
int FullStack(SeqStack *S)
{
return S->top==StackSize-1;
}
void Push(SeqStack *S,char x)
{
S->data[++S->top]=x;
}
char Pop(SeqStack *S)
{
return S->data[S->top--];
}
int isHuiwen(char *S,int n)
{
SeqStack T;
int i;
char t1;
InitStack(&T);
for(i=0;i<n/2;i++)
{
Push(&T,S[i]);
}
i=n/2-1;
while(i>=0)
{
t1=Pop(&T);
if(t1!=S[n-i-1])
return 0;
i--;
}
return 1;
}
int main()
{
char s[100];
int n=0;
scanf("%c",&s[0]);
while(s[n]!='@')
{
scanf("%c",&s[++n]);
}
if(isHuiwen(s,n-1)==1)
{
printf("yes");
}
else
{
printf("no");
}
system("pause");
return 0;
}
。。。。 好技术~~ 下次写个用对列的连连看~~~
亲爱的异泪,这个程序好像有点瑕疵呢,比如说,我要是输入assa,它显示不是回文,而asas却是显示是回文的,按理说结果应该刚好都相反才对呀,可是我不会修改,所以,,,有好消息记得告诉我哈!
输好你想要的字符串如assa,然后回车再输入@,这样结果就正确了.