如何用C语言写顺序栈判断回文
时间: 2023-12-31 21:07:10 浏览: 89
利用栈进行回文数判定
4星 · 用户满意度95%
顺序栈是一种基于数组实现的栈结构,可以使用C语言的数组和指针来实现。判断回文可以通过将字符串中的字符依次入栈,然后再依次出栈与原字符串比较是否相同来实现。
以下是使用C语言实现顺序栈判断回文的代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 100
typedef struct {
char data[MAXSIZE];
int top;
} SqStack;
void InitStack(SqStack *S) {
S->top = -1;
}
int Push(SqStack *S, char ch) {
if (S->top == MAXSIZE - 1) return 0;
S->data[++S->top] = ch;
return 1;
}
int Pop(SqStack *S, char *ch) {
if (S->top == -1) return 0;
*ch = S->data[S->top--];
return 1;
}
int IsEmpty(SqStack *S) {
return S->top == -1;
}
int IsFull(SqStack *S) {
return S->top == MAXSIZE - 1;
}
int main() {
SqStack S;
char str[MAXSIZE];
int i, len;
char ch;
printf("请输入字符串:");
scanf("%s", str);
len = strlen(str);
InitStack(&S);
for (i = 0; i < len; i++) {
if (!IsFull(&S)) Push(&S, str[i]);
else {
printf("栈已满!\n");
return 0;
}
}
for (i = 0; i < len; i++) {
if (!IsEmpty(&S)) Pop(&S, &ch);
else {
printf("栈已空!\n");
return 0;
}
if (ch != str[i]) {
printf("不是回文串!\n");
return 0;
}
}
printf("是回文串!\n");
return 0;
}
```
在代码中,首先定义了一个顺序栈的结构体,包括栈的最大容量、栈顶指针和数据数组。然后定义了栈的初始化、入栈、出栈、判断栈空和栈满等操作的函数。接着在主函数中,先输入字符串,然后依次将字符入栈,再依次出栈并与原字符串比较是否相同。如果遇到栈满或栈空的情况,则返回不是回文串。如果全部出栈后都相同,则返回是回文串。
阅读全文