m0_64743613 2022-04-10 08:49 采纳率: 100%
浏览 74
已结题

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;//队尾 
}LinkQueue; 
LinkQueue Q;
Status InitQueue(LinkQueue *Q){
    Q->front = Q->rear = (QNode*)malloc(sizeof(QNode));
    Q->front->next = NULL;
    return OK;
}
Status EnQueue(LinkQueue *Q,char e){
    QueuePtr p;
    p = (QueuePtr)malloc(sizeof(QNode));
    p->data = e;
    p->next = NULL;
    Q->rear->next = p;
    Q->rear = p;
    return OK;
}
Status DeQueue(LinkQueue *Q,char *e){
    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;
} 

输入abcba型回文以及不回文字符串时,按两次回车才输出不是回文,内存占用大,输入abccba时按一次回车输出不是回文

编译无警告,应该是哪里逻辑错了

想得到正确输出

  • 写回答

1条回答

      报告相同问题?

      相关推荐 更多相似问题

      问题事件

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

      悬赏问题

      • ¥50 python的exchangelib 报错
      • ¥20 snmpv3相关提问
      • ¥20 boost电路升压频率和占空比选择
      • ¥15 找个人工智能的大佬咨询一些毕设问题
      • ¥15 需要教程:GD32F450I移植无系统lwip
      • ¥15 中文语料库检索构式 求助
      • ¥15 关于naver点击量信息
      • ¥15 Linux gcc升级问题
      • ¥100 如何封禁域名,让app打不开呢?
      • ¥15 通过安卓命令如何打开控制中心