m0_64743613 2022-04-10 08:49 采纳率: 100%

# C语言数据结构栈与队列

``````// 利用栈和队列的特性设计一个算法，用于判断一个字符串是否为回文。
# include <stdio.h>
# include <stdlib.h>
# define OK 1
# define ERROR 0
typedef int Status;
typedef struct QNode{//链队列结点
char data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct{
QueuePtr front;
QueuePtr rear;//队尾
Q->front = Q->rear = (QNode*)malloc(sizeof(QNode));
Q->front->next = NULL;
return OK;
}
QueuePtr p;
p = (QueuePtr)malloc(sizeof(QNode));
p->data = e;
p->next = NULL;
Q->rear->next = p;
Q->rear = p;
return OK;
}
QueuePtr p;
if(Q->front == Q->rear) return ERROR;
p = Q->front->next;
*e = p->data;
Q->front->next = p->next;
if(Q->rear == p)Q->rear = Q->front;
free(p);
return OK;
}
typedef struct{
char *base;
char *top;
int stacksize;
}Sqstack;
Sqstack S;
Status InitStack(Sqstack *S){
S->base = (char*)malloc(10*sizeof(char));
S->top = S->base;
S->stacksize = 10;
return OK;
}
Status Push(Sqstack *S,char e){
S->top++;
*S->top = e;
return OK;
}
Status Pop(Sqstack *S,char *e){
if(S->top == S->base)return ERROR;
*e = *--S->top;
return OK;
}
Status StackEmpty(Sqstack *S){
if(S->top==S->base){
return 0;
}else{
return 1;
}
}
int main(){
char ch;
char e;
int j=0;
InitStack(&S);
InitQueue(&Q);
while((ch=getchar())!='\n'){
scanf("%c",&ch);
Push(&S,ch);
EnQueue(&Q,ch);
}
while(StackEmpty(&S)){
char s,q;
Pop(&S,&s);
DeQueue(&Q,&q);
if (s==q){
j = 1;
}else{
j = 0;
break;
}
}
if(j==1){
printf("是回文");
}else{
printf("不是回文");
}
return 0;
}

``````

• 写回答

#### 1条回答默认 最新

• qzjhjxj 2022-04-10 12:17
关注

修改处见注释，供参考：

``````// 利用栈和队列的特性设计一个算法，用于判断一个字符串是否为回文。
# include <stdio.h>
# include <stdlib.h>
# define OK 1
# define ERROR 0
typedef int Status;
typedef struct QNode{//链队列结点
char   data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct{
QueuePtr front;
QueuePtr rear;//队尾
Q->front = Q->rear = (QNode*)malloc(sizeof(QNode));
Q->front->next = NULL;
return OK;
}
QueuePtr p;
p = (QueuePtr)malloc(sizeof(QNode));
p->data = e;
p->next = NULL;
Q->rear->next = p;
Q->rear = p;
return OK;
}
QueuePtr p;
if(Q->front == Q->rear) return ERROR;
p = Q->front->next;
*e = p->data;
Q->front->next = p->next;
if(Q->rear == p)Q->rear = Q->front;
free(p);
return OK;
}
typedef struct{
char *base;
char *top;
int stacksize;
}Sqstack;
Sqstack S;
Status InitStack(Sqstack *S){
S->base = (char*)malloc(10*sizeof(char));
S->top = S->base;
S->stacksize = 10;
return OK;
}
Status Push(Sqstack *S,char e){
//S->top++;           //修改
*S->top++ = e;        //修改
return OK;
}
Status Pop(Sqstack *S,char *e){
if(S->top == S->base)return ERROR;
*e = *--S->top;
return OK;
}
Status StackEmpty(Sqstack *S){
if(S->top==S->base){
return 0;
}else{
return 1;
}
}
int main(){
char ch;
char e;
int j=0;
InitStack(&S);
InitQueue(&Q);
while((ch=getchar())!='\n'){
//scanf("%c",&ch);  修改  这句多余了
Push(&S,ch);
EnQueue(&Q,ch);
}
while(StackEmpty(&S)){
char s,q;
Pop(&S,&s);
DeQueue(&Q,&q);
if (s==q){
j = 1;
}else{
j = 0;
break;
}
}
if(j==1){
printf("是回文");
}else{
printf("不是回文");
}
return 0;
}

``````
本回答被题主选为最佳回答 , 对您是否有帮助呢?
评论

• 系统已结题 4月18日
• 已采纳回答 4月10日
• 创建了问题 4月10日

#### 悬赏问题

• ¥60 版本过低apk如何修改可以兼容新的安卓系统
• ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
• ¥50 有数据，怎么建立模型求影响全要素生产率的因素
• ¥50 有数据，怎么用matlab求全要素生产率
• ¥15 TI的insta-spin例程
• ¥15 完成下列问题完成下列问题
• ¥15 C#算法问题, 不知道怎么处理这个数据的转换
• ¥15 YoloV5 第三方库的版本对照问题
• ¥15 请完成下列相关问题！
• ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像，如何解决？