用c语言编写完成栈的定义、构造、获得栈顶元素、进栈、出栈等函数的编写。编写一个算法实现对以上操作的调用,判断给定的字符向量是否为回文。回文是指正读与反读均相同的字符序列
时间: 2024-10-11 21:16:31 浏览: 53
在C语言中,我们可以使用数组或链表来实现栈的基本操作。这里我们选择数组来演示栈的操作。首先,我们需要定义一个结构体来存储栈中的元素(这里假设是字符),并提供必要的栈操作函数。
```cpp
#include <stdio.h>
#include <stdbool.h>
typedef char StackElement;
// 定义栈的最大容量
#define MAX_STACK_SIZE 50
// 定义栈结构体
struct Stack {
StackElement elements[MAX_STACK_SIZE];
int top; // 栈顶指针
};
// 初始化栈
void initStack(Stack* stack) {
stack->top = -1;
}
// 检查栈是否为空
bool isEmpty(Stack* stack) {
return (stack->top == -1);
}
// 判断栈是否已满
bool isFull(Stack* stack) {
return (stack->top == MAX_STACK_SIZE - 1);
}
// 将元素入栈
void push(Stack* stack, StackElement item) {
if (!isFull(stack)) {
stack->elements[++stack->top] = item;
printf("Pushed %c onto the stack.\n", item);
} else {
printf("Stack is full, cannot push %c.\n", item);
}
}
// 出栈并返回顶部元素
StackElement pop(Stack* stack) {
if (!isEmpty(stack)) {
StackElement item = stack->elements[stack->top];
stack->top--;
printf("Popped %c from the stack.\n", item);
return item;
} else {
printf("Stack is empty, no element to pop.\n");
return '\0'; // 返回空字符,表示栈空
}
}
// 检查字符串是否为回文
bool isPalindrome(char* str) {
Stack stack;
initStack(&stack);
for (int i = 0; str[i]; i++) {
push(&stack, str[i]);
}
bool isSymmetric = true;
while (!isEmpty(&stack)) {
if (pop(&stack) != str[strlen(str) - 1]) {
isSymmetric = false;
break;
}
str[strlen(str) - 1]--;
}
return isSymmetric;
}
int main() {
char str[] = "madam";
if (isPalindrome(str)) {
printf("%s is a palindrome.\n", str);
} else {
printf("%s is not a palindrome.\n", str);
}
return 0;
}
```
这段代码首先定义了一个栈结构,包含了初始化、检查空/满、入栈和出栈的函数。然后,`isPalindrome`函数利用栈将字符串反转,每次从栈顶取出一个字符并与对应的逆序字符比较。如果所有字符都匹配,那么该字符串就是回文。
阅读全文