c语言编写程序用队列和栈编写回文是指正读反读均相同的字符编写c语言如“abba”和“abdba”均是回文,设计一个 算法,判定给定的字符串
时间: 2023-10-30 18:19:18 浏览: 176
是否为回文。
回答:
可以使用栈和队列来实现判断一个字符串是否为回文。具体方法是,首先将字符串中的字符按顺序压入栈中,再按顺序放入队列中。然后,从栈中弹出一个字符,从队列中取出一个字符,比较它们是否相同,如果相同则继续比较下一个字符。如果一直比较到栈为空,队列也为空,那么就说明该字符串是回文。
下面是使用C语言实现判断回文的程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 50
typedef struct {
char data[MAX_SIZE];
int top;
} Stack;
typedef struct {
char data[MAX_SIZE];
int rear;
int front;
} Queue;
void initStack(Stack *S)
{
S->top = -1;
}
void push(Stack *S, char elem)
{
if (S->top >= MAX_SIZE - 1)
printf("Stack is full!\n");
else
S->data[++(S->top)] = elem;
}
char pop(Stack *S)
{
if (S->top == -1) {
printf("Stack is empty!\n");
return 0;
} else
return S->data[(S->top)--];
}
void initQueue(Queue *Q)
{
Q->rear = Q->front = 0;
}
void enQueue(Queue *Q, char elem)
{
if ((Q->rear+1)%MAX_SIZE == Q->front)
printf("Queue is full!\n");
else {
Q->data[Q->rear] = elem;
Q->rear = (Q->rear+1) % MAX_SIZE;
}
}
char deQueue(Queue *Q)
{
char elem;
if (Q->front == Q->rear) {
printf("Queue is empty!\n");
return 0;
} else {
elem = Q->data[Q->front];
Q->front = (Q->front+1) % MAX_SIZE;
return elem;
}
}
int Palindrome(char *str)
{
int i, len;
Stack S;
Queue Q;
initStack(&S);
initQueue(&Q);
len = strlen(str);
for (i = 0; i < len; i++) {
push(&S, str[i]);
enQueue(&Q, str[i]);
}
while (S.top != -1) {
if (pop(&S) != deQueue(&Q))
return 0;
}
return 1;
}
int main()
{
char str[MAX_SIZE];
printf("Please enter a string: ");
scanf("%s", str);
if (Palindrome(str))
printf("%s is a palindrome.\n", str);
else
printf("%s is not a palindrome.\n", str);
return 0;
}
```
此程序中,我们定义了一个栈结构和一个队列结构。我们使用initStack和initQueue函数来初始化它们,用push和enQueue函数来压入元素,用pop和deQueue函数来弹出元素。Palindrome函数用来判断给定的字符串是否为回文,并返回真或假。主函数负责输入字符串,并调用Palindrome函数来判断字符串是否为回文,最终输出结果。
阅读全文