试写一个算法判别读入的一个以‘’为结束符的字符序列是否是回文。c语言用队列
- 定义一个队列结构体,包括队列的头和尾指针以及队列的大小。
- 初始化队列,将头尾指针都指向队列的第一个元素,并将队列大小设置为0。
- 读入字符序列,当读入的字符不是‘@’时,将该字符入队,并将队列大小加1。
- 判断队列中的元素是否是回文。从队列头和尾开始遍历队列,依次比较两个元素,如果相同则继续比较下一个元素,否则说明不是回文,退出判断。
- 如果队列中的所有元素都比较完毕,且没有退出判断,则说明该字符序列是回文。
- 释放队列的内存空间。
下面是具体实现的代码:
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
typedef struct {
char data[MAX_SIZE];
int front, rear;
int size;
} Queue;
void initQueue(Queue *q) {
q->front = q->rear = 0;
q->size = 0;
}
void enqueue(Queue *q, char c) {
if (q->size >= MAX_SIZE) {
printf("Queue is full.\n");
return;
}
q->data[q->rear] = c;
q->rear = (q->rear + 1) % MAX_SIZE;
q->size++;
}
char dequeue(Queue *q) {
if (q->size <= 0) {
printf("Queue is empty.\n");
return '\0';
}
char c = q->data[q->front];
q->front = (q->front + 1) % MAX_SIZE;
q->size--;
return c;
}
int isPalindrome(Queue *q) {
int i, j;
for (i = q->front, j = q->rear - 1; i < j; i++, j--) {
if (q->data[i] != q->data[j]) {
return 0;
}
}
return 1;
}
int main() {
Queue q;
initQueue(&q);
char c;
printf("Please input a string end with '@':\n");
while ((c = getchar()) != '@') {
enqueue(&q, c);
}
if (isPalindrome(&q)) {
printf("The string is palindrome.\n");
} else {
printf("The string is not palindrome.\n");
}
return 0;
}
``
原文地址: https://www.cveoy.top/t/topic/eZKT 著作权归作者所有。请勿转载和采集!