c语言程序用队和栈编写回文是指正读反读均相同的字符编写c语言如“abba”和“abdba”均是回文,设计一个 算法,判定给定的字符串
时间: 2023-10-30 11:40:43 浏览: 112
是否是回文。
答案:
可以用栈来判断给定的字符串是否是回文。具体操作如下:
1. 将给定的字符串逐个字符压入栈中;
2. 将字符串逆序,逐个字符压入另一个栈中;
3. 逐个比较两个栈中的字符是否相等,如果都相等则是回文,否则不是回文。
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define STACK_SIZE 100
typedef struct Stack {
char data[STACK_SIZE];
int top;
} Stack;
void initStack(Stack* s) {
s->top = -1;
}
int isFull(Stack* s) {
return s->top == STACK_SIZE-1;
}
int isEmpty(Stack* s) {
return s->top == -1;
}
void push(Stack* s, char c) {
if(isFull(s)) {
printf("Stack overflow.\n");
exit(1);
}
s->data[++s->top] = c;
}
char pop(Stack* s) {
if(isEmpty(s)) {
printf("Stack underflow.\n");
exit(1);
}
return s->data[s->top--];
}
int main() {
char str[STACK_SIZE];
int i;
Stack s1, s2;
printf("Enter a string: ");
scanf("%s", str);
initStack(&s1);
initStack(&s2);
for(i = 0; i < strlen(str); i++) {
push(&s1, str[i]);
push(&s2, str[strlen(str)-1-i]);
}
for(i = 0; i < strlen(str); i++) {
if(pop(&s1) != pop(&s2)) {
printf("%s is not a palindrome.\n", str);
return 0;
}
}
printf("%s is a palindrome.\n", str);
return 0;
}
阅读全文