用顺序栈和顺序队列来设计算法判断一个输入的字符串是否是回文(c语音)
时间: 2023-06-08 07:04:07 浏览: 136
判断回文(用到栈和队列)
3星 · 编辑精心推荐
好的,我可以回答你的问题。下面是使用顺序栈和顺序队列来设计算法判断一个输入的字符串是否是回文的代码:
```
#include <stdio.h>
#include <string.h>
// 定义最大字符串长度
#define MAX_SIZE 50
// 定义栈结构体
typedef struct {
char data[MAX_SIZE];
int top;
} SeqStack;
// 定义队列结构体
typedef struct {
char data[MAX_SIZE];
int front;
int rear;
} SeqQueue;
// 初始化顺序栈
void InitStack(SeqStack *S)
{
S->top = -1;
}
// 判断顺序栈是否为空
int StackEmpty(SeqStack *S)
{
return S->top == -1;
}
// 入栈
int Push(SeqStack *S, char x)
{
if (S->top == MAX_SIZE - 1)
return 0;
S->data[++S->top] = x;
return 1;
}
// 出栈
int Pop(SeqStack *S, char *x)
{
if (StackEmpty(S))
return 0;
*x = S->data[S->top--];
return 1;
}
// 初始化顺序队列
void InitQueue(SeqQueue *Q)
{
Q->front = Q->rear = 0;
}
// 判断顺序队列是否为空
int QueueEmpty(SeqQueue *Q)
{
return Q->front == Q->rear;
}
// 入队
int EnQueue(SeqQueue *Q, char x)
{
if ((Q->rear + 1) % MAX_SIZE == Q->front)
return 0;
Q->data[Q->rear] = x;
Q->rear = (Q->rear + 1) % MAX_SIZE;
return 1;
}
// 出队
int DeQueue(SeqQueue *Q, char *x)
{
if (QueueEmpty(Q))
return 0;
*x = Q->data[Q->front];
Q->front = (Q->front + 1) % MAX_SIZE;
return 1;
}
// 判断字符串是否是回文
int IsHuiwen(char *str)
{
SeqStack S;
SeqQueue Q;
int len = strlen(str);
int i, j;
char x, y;
InitStack(&S);
InitQueue(&Q);
// 字符串入栈、入队
for (i = 0; i < len; i++) {
Push(&S, str[i]);
EnQueue(&Q, str[i]);
}
// 判断是否是回文
for (i = 0; i < len / 2; i++) {
Pop(&S, &x);
DeQueue(&Q, &y);
if (x != y)
return 0;
}
return 1;
}
// 主函数
int main()
{
char str[MAX_SIZE];
printf("请输入一个字符串:");
scanf("%s", str);
if (IsHuiwen(str))
printf("%s 是回文\n", str);
else
printf("%s 不是回文\n", str);
return 0;
}
```
以上是使用顺序栈和顺序队列来设计算法判断一个输入的字符串是否是回文的代码。如果您还有其他问题,请继续提问。
阅读全文