#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct StackNode stack;
struct StackNode{
char str;//字符
struct StackNode* next;//指下一个
};
struct LinkStack{
struct StackNode* top;//栈顶指针
int Length;//长度
};
struct LinkStack* Create()//创建栈并初始化
{
struct LinkStack* p = (struct LinkStack* )malloc(sizeof(struct LinkStack));
p->top = NULL;
p->Length = 0;
return p;
}
void Push(struct LinkStack* p, char s)
{
if(p->Length == 0){
stack* p1 = (stack* )malloc(sizeof(stack));
p1->next = NULL;
p1->str = s;
p->top = p1;
p->Length++;
}
else{
stack* p1 = (stack* )malloc(sizeof(stack));
p1->next = p->top;
p1->str = s;
p->top = p1;
p->Length++;
}
}
char Pop(struct LinkStack* p)//弹出
{
if(p->Length == 0){
printf("\n栈为空!\n");
return 0;
}else{
stack* pre = p->top; //保存栈顶指针指向的地址
p->Length--;
p->top = p->top->next;
char ch = pre->str;//保存字符
pre->next = NULL;
free(pre);
return ch;
}
}
int main()
{
char s[20];
int i;
scanf("%s", s);
struct LinkStack* p = Create();
for( i=0; i<strlen(s)/2; i++){
Push(p, s[i]);
}//将一半字符压入串中
if(strlen(s)%2 != 0)//串数为奇数
i++;
for( ; i<strlen(s); i++){
if(Pop(p)!=s[i]){
printf("该串不是回文串! \n");
return 0;
}
}
printf("该串是回文串! \n");
free(p);
return 0;
}
利用栈实现回文数的判断(简单版)
最新推荐文章于 2023-10-16 20:58:59 发布