使用顺序栈和顺序队列来设计算法判断一个输入的字符串是否是回文的代码(c语音)
时间: 2023-06-06 20:06:45 浏览: 55
以下是使用顺序栈和队列来实现判断字符串是否为回文的 C 语言代码:
```
#include <stdio.h>
#include <string.h>
#define MAXSIZE 100
typedef struct {
char data[MAXSIZE];
int top;
} Stack;
typedef struct {
char data[MAXSIZE];
int front, rear;
} Queue;
void initStack(Stack *st) {
st->top = -1;
}
void initQueue(Queue *q) {
q->front = q->rear = 0;
}
void push(Stack *st, char c) {
if (st->top == MAXSIZE - 1) {
printf("Stack overflow.\n");
return;
}
st->top++;
st->data[st->top] = c;
}
char pop(Stack *st) {
if (st->top == -1) {
printf("Stack underflow.\n");
return '\0';
}
char c = st->data[st->top];
st->top--;
return c;
}
void enqueue(Queue *q, char c) {
if ((q->rear + 1) % MAXSIZE == q->front) {
printf("Queue overflow.\n");
return;
}
q->data[q->rear] = c;
q->rear = (q->rear + 1) % MAXSIZE;
}
char dequeue(Queue *q) {
if (q->front == q->rear) {
printf("Queue underflow.\n");
return '\0';
}
char c = q->data[q->front];
q->front = (q->front + 1) % MAXSIZE;
return c;
}
int is_palindrome(char s[]) {
int len = strlen(s);
Stack st;
Queue q;
initStack(&st);
initQueue(&q);
for (int i = 0; i < len; i++) {
char c = s[i];
push(&st, c);
enqueue(&q, c);
}
while (st.top != -1) {
char c1 = pop(&st);
char c2 = dequeue(&q);
if (c1 != c2) {
return 0;
}
}
return 1;
}
int main() {
char s[MAXSIZE];
printf("Enter a string: ");
scanf("%s", s);
if (is_palindrome(s)) {
printf("%s is a palindrome.\n", s);
} else {
printf("%s is not a palindrome.\n", s);
}
return 0;
}
```
在这个代码中,我们定义了一个顺序栈和一个顺序队列来分别存储字符串中的字符,并使用 `push()` 和 `enqueue()` 函数将字符分别加入到栈和队列中。然后,我们使用 `pop()` 和 `dequeue()` 函数从栈和队列中取出字符并比较它们是否相等,如果所有字符都匹配,则该字符串是回文的,返回 1,否则返回 0。