判断给定的字符序列是否为回文数据结构栈c语言
时间: 2024-09-22 19:08:37 浏览: 70
判断一个字符序列是否为回文,可以使用栈这种数据结构来实现。基本思路是将字符串的一半元素压入栈中,然后逐个比较剩余一半元素和栈顶元素是否相等。如果所有元素都能一一对应并且匹配,那么该序列就是回文。
以下是简单的C语言代码实现:
```c
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
// 定义栈结构体
typedef struct {
char* data;
int top;
int size;
} Stack;
// 初始化栈
void init(Stack* stack, int capacity) {
stack->data = (char*)malloc(capacity * sizeof(char));
stack->top = -1;
stack->size = capacity;
}
// 入栈操作
void push(Stack* stack, char item) {
if (stack->top < stack->size - 1) {
stack->data[++stack->top] = item;
} else {
printf("Stack is full.\n");
}
}
// 出栈操作
char pop(Stack* stack) {
if (stack->top == -1) {
return '\0';
} else {
return stack->data[stack->top--];
}
}
// 检查字符串是否为回文
bool isPalindrome(char* str) {
Stack s;
init(&s, strlen(str));
for (int i = 0; i < strlen(str) / 2; i++) {
push(&s, str[i]);
}
for (int j = strlen(str) - 1; j >= strlen(str) / 2; j--) {
if (pop(&s) != str[j]) {
return false;
}
}
// 如果没有提前返回false,说明整个字符串都是回文
return true;
}
int main() {
char str[] = "radar";
if (isPalindrome(str)) {
printf("%s is a palindrome.\n", str);
} else {
printf("%s is not a palindrome.\n", str);
}
return 0;
}
阅读全文