c语言
时间: 2023-06-22 11:21:50 浏览: 68
好的,下面是用栈实现判断字符向量是否为回文的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 100 // 栈的最大容量
/* 栈结构体定义 */
typedef struct {
char data[MAX_SIZE];
int top;
} Stack;
/* 初始化栈 */
void initStack(Stack *s) {
s->top = -1;
}
/* 判断栈是否为空 */
int isEmpty(Stack *s) {
return s->top == -1;
}
/* 判断栈是否已满 */
int isFull(Stack *s) {
return s->top == MAX_SIZE - 1;
}
/* 元素入栈 */
void push(Stack *s, char c) {
if (isFull(s)) {
printf("栈已满,无法入栈\n");
return;
}
s->data[++(s->top)] = c;
}
/* 元素出栈 */
char pop(Stack *s) {
if (isEmpty(s)) {
printf("栈为空,无法出栈\n");
exit(1);
}
return s->data[(s->top)--];
}
/* 获取栈顶元素 */
char getTop(Stack *s) {
if (isEmpty(s)) {
printf("栈为空,无法获取栈顶元素\n");
exit(1);
}
return s->data[s->top];
}
/* 判断字符向量是否为回文 */
int isPalindrome(char *str) {
int len = strlen(str);
Stack s;
initStack(&s);
int i;
for (i = 0; i < len / 2; ++i) {
push(&s, str[i]); // 将前一半字符入栈
}
if (len % 2 != 0) {
++i; // 若字符串长度为奇数,则跳过中间的字符
}
while (i < len) {
if (str[i++] != pop(&s)) { // 依次将后一半字符与栈中字符比较
return 0;
}
}
return 1;
}
int main() {
char str[MAX_SIZE];
printf("请输入字符向量:");
scanf("%s", str);
if (isPalindrome(str)) {
printf("%s是回文\n", str);
} else {
printf("%s不是回文\n", str);
}
return 0;
}
```
程序中,我们使用栈来存储字符向量的前一半字符,并在存储过程中,比较后一半字符与栈中字符是否相同,从而判断字符向量是否为回文。
阅读全文