回文是指從前往后讀和從后往前讀是一樣的字符串,例如"level"和"radar"。下面是一個利用隊列數據結構來識別回文的C語言代碼示例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 100
typedef struct {
char data[MAX_SIZE];
int front;
int rear;
} Queue;
Queue* createQueue() {
Queue* q = (Queue*)malloc(sizeof(Queue));
q->front = -1;
q->rear = -1;
return q;
}
void enqueue(Queue* q, char value) {
if (q->rear == MAX_SIZE - 1) {
printf("Queue is full\n");
} else {
q->rear++;
q->data[q->rear] = value;
}
}
char dequeue(Queue* q) {
if (q->front == q->rear) {
printf("Queue is empty\n");
return '\0';
} else {
q->front++;
return q->data[q->front];
}
}
int isPalindrome(char* str) {
Queue* q = createQueue();
int len = strlen(str);
for (int i = 0; i < len; i++) {
enqueue(q, str[i]);
}
for (int i = 0; i < len; i++) {
char c = dequeue(q);
if (c != str[i]) {
return 0;
}
}
return 1;
}
int main() {
char str[MAX_SIZE];
printf("Enter a string: ");
scanf("%s", str);
if (isPalindrome(str)) {
printf("%s is a palindrome\n", str);
} else {
printf("%s is not a palindrome\n", str);
}
return 0;
}
在這個示例中,我們首先定義了一個隊列結構Queue
,并實現了創建隊列、入隊和出隊等基本操作。然后我們定義了isPalindrome
函數來判斷輸入的字符串是否為回文。在該函數中,我們首先將字符串中的字符逐個入隊,然后再逐個出隊并與原字符串進行比較,如果有任何一個字符不相同,則返回0,表示不是回文;如果所有字符都相同,則返回1,表示是回文。最后在main
函數中,我們接收用戶輸入的字符串,并調用isPalindrome
函數進行判斷并輸出結果。