使用C语言,使用队列的算法来实现判断输入的字符串序列是否为回文,写一段完整的程序
时间: 2024-01-22 21:17:49 浏览: 139
以下是使用队列的算法来实现判断输入的字符串序列是否为回文的C语言程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 100
typedef struct queue {
char data[MAX_LEN];
int front, rear;
} Queue;
void initQueue(Queue *q) {
q->front = q->rear = 0;
}
int isEmpty(Queue *q) {
return q->front == q->rear;
}
int isFull(Queue *q) {
return (q->rear + 1) % MAX_LEN == q->front;
}
int enqueue(Queue *q, char elem) {
if (isFull(q)) {
return 0;
}
q->data[q->rear] = elem;
q->rear = (q->rear + 1) % MAX_LEN;
return 1;
}
int dequeue(Queue *q, char *elem) {
if (isEmpty(q)) {
return 0;
}
*elem = q->data[q->front];
q->front = (q->front + 1) % MAX_LEN;
return 1;
}
int isPalindrome(char *str) {
int len = strlen(str);
Queue q;
initQueue(&q);
int i;
for (i = 0; i < len; i++) {
enqueue(&q, str[i]);
}
char c;
for (i = 0; i < len; i++) {
dequeue(&q, &c);
if (c != str[len - i - 1]) {
return 0;
}
}
return 1;
}
int main() {
char str[MAX_LEN];
printf("请输入字符串:");
scanf("%s", str);
if (isPalindrome(str)) {
printf("输入的字符串是回文\n");
} else {
printf("输入的字符串不是回文\n");
}
return 0;
}
```
程序中定义了一个队列结构体,使用循环队列实现队列操作。`isPalindrome` 函数接收一个字符串,将字符串中的每个字符依次入队,然后将队列中的每个元素依次出队与原字符串中的字符比较,如果不相同则不是回文。最后,根据函数返回值输出结果。
阅读全文