C语言利用“堆栈”和“队列”,对输入的一组“字符串”判断是否“回文”
时间: 2023-11-03 11:04:40 浏览: 42
首先,我们需要了解什么是回文。回文就是正着读和倒着读都一样的字符串,比如“level”和“racecar”。
对于输入的一组字符串,可以使用堆栈和队列来判断是否回文。
堆栈是一种先进后出的数据结构,可以借助堆栈实现字符串的反转。我们可以将原始字符串中的每个字符依次入栈,然后再依次出栈,得到反转后的字符串。如果反转后的字符串与原始字符串相同,则说明该字符串是回文。
队列是一种先进先出的数据结构,可以借助队列实现字符串的正序。我们可以将原始字符串中的每个字符依次入队,然后再依次出队,得到正序的字符串。如果正序的字符串与原始字符串相同,则说明该字符串是回文。
下面是使用堆栈和队列判断字符串是否回文的示例代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 100
typedef struct {
char data[MAX_LEN];
int top;
} Stack;
typedef struct {
char data[MAX_LEN];
int head;
int tail;
} Queue;
void initStack(Stack *s) {
s->top = -1;
}
void push(Stack *s, char c) {
s->data[++s->top] = c;
}
char pop(Stack *s) {
return s->data[s->top--];
}
void initQueue(Queue *q) {
q->head = 0;
q->tail = -1;
}
void enqueue(Queue *q, char c) {
q->data[++q->tail] = c;
}
char dequeue(Queue *q) {
return q->data[q->head++];
}
int isPalindrome(char *str) {
int len = strlen(str);
Stack s;
Queue q;
int i;
initStack(&s);
initQueue(&q);
for (i = 0; i < len; i++) {
push(&s, str[i]);
enqueue(&q, str[i]);
}
for (i = 0; i < len; i++) {
if (pop(&s) != dequeue(&q)) {
return 0;
}
}
return 1;
}
int main() {
char str[MAX_LEN];
printf("请输入一个字符串: ");
scanf("%s", str);
if (isPalindrome(str)) {
printf("%s是回文字符串\n", str);
} else {
printf("%s不是回文字符串\n", str);
}
return 0;
}
```
在上面的代码中,我们定义了一个结构体类型`Stack`和`Queue`,分别表示堆栈和队列。`isPalindrome`函数用于判断字符串是否回文。首先,我们将字符串中的每个字符依次压入堆栈和队列中。然后,我们依次弹出堆栈中的字符和出队列中的字符,并比较它们是否相等。如果全部相等,则说明该字符串是回文。
在`main`函数中,我们输入一个字符串,并调用`isPalindrome`函数判断该字符串是否回文。如果是回文,则输出“是回文字符串”,否则输出“不是回文字符串”。