编写一个算法利用顺序栈判断一个字符串是否是对称串。所谓对称串是指从左向右读和从右向左读的序列相同。C语言实现
时间: 2024-02-22 08:57:50 浏览: 73
编写算法,利用栈判断所给字符是否具有中心对称关系。要求有尽可能少的时间完成判断。
算法思路:
1. 初始化一个字符类型的顺序栈。
2. 依次将字符串的字符入栈。
3. 将栈中的字符依次出栈,并与原字符串的字符进行比较,若不相同则不是对称串。
4. 如果栈中的字符全部出栈后,仍然与原字符串相同,则是对称串。
C语言实现:
```c
#include <stdio.h>
#include <string.h>
#define MAXSIZE 100
typedef struct {
char data[MAXSIZE];
int top;
} SqStack;
void InitStack(SqStack *S) {
S->top = -1;
}
int StackEmpty(SqStack S) {
return (S.top == -1);
}
void Push(SqStack *S, char x) {
if (S->top == MAXSIZE - 1) {
printf("Stack is full!\n");
return;
}
S->top++;
S->data[S->top] = x;
}
char Pop(SqStack *S) {
if (StackEmpty(*S)) {
printf("Stack is empty!\n");
return '\0';
}
char x = S->data[S->top];
S->top--;
return x;
}
int SymmetricString(char str[]) {
SqStack S;
InitStack(&S);
int len = strlen(str);
for (int i = 0; i < len; i++) {
Push(&S, str[i]);
}
for (int i = 0; i < len; i++) {
char x = Pop(&S);
if (x != str[i]) {
return 0;
}
}
return 1;
}
int main() {
char str[MAXSIZE];
printf("Please enter a string: ");
gets(str);
if (SymmetricString(str)) {
printf("The string is symmetric.\n");
} else {
printf("The string is not symmetric.\n");
}
return 0;
}
```
注意:该算法只能处理字符串长度不大于 MAXSIZE 的情况。如果字符串长度超过 MAXSIZE,需要增大 MAXSIZE 或使用链栈等数据结构。
阅读全文