用顺序栈和顺序队列来判断输入的字符串是否为回文(c语音)
时间: 2023-06-06 16:06:50 浏览: 100
好的,这是一个计算机科学问题,可以回答。以下是代码示例:
```c
#include<stdio.h>
#include<string.h>
#define MAXSIZE 100
typedef struct {
char data[MAXSIZE];
int top;
}SqStack;
typedef struct {
char data[MAXSIZE];
int front, rear;
}SqQueue;
void InitStack(SqStack &S) {
S.top = -1;
}
void InitQueue(SqQueue &Q) {
Q.front = Q.rear = 0;
}
void Push(SqStack &S, char x) {
if(S.top == MAXSIZE-1) {
return;
}
S.top++;
S.data[S.top] = x;
}
void EnQueue(SqQueue &Q, char x) {
if((Q.rear+1)%MAXSIZE == Q.front) {
return;
}
Q.data[Q.rear] = x;
Q.rear = (Q.rear+1)%MAXSIZE;
}
char Pop(SqStack &S) {
if(S.top == -1) {
return 0;
}
char x = S.data[S.top];
S.top--;
return x;
}
char DeQueue(SqQueue &Q) {
if(Q.front == Q.rear) {
return 0;
}
char x = Q.data[Q.front];
Q.front = (Q.front+1)%MAXSIZE;
return x;
}
int main() {
char str[MAXSIZE];
scanf("%s", str);
SqStack S;
InitStack(S);
SqQueue Q;
InitQueue(Q);
int i;
for(i=0; i<strlen(str); i++) {
Push(S, str[i]);
EnQueue(Q, str[i]);
}
char s, q;
int flag = 1; // 假设是回文
while(S.top != -1 && Q.front != Q.rear) {
s = Pop(S);
q = DeQueue(Q);
if(s != q) {
flag = 0; // 一旦不相同,就不是回文
break;
}
}
if(flag == 1) {
printf("是回文\n");
} else {
printf("不是回文\n");
}
return 0;
}
```
以上是用顺序栈和顺序队列来判断输入的字符串是否为回文的C语言代码。
阅读全文