weixin_52202309 2022-04-20 16:55 采纳率: 66.7%
浏览 34
已结题

数据结构链表输出是随机值?

#include<stdio.h>
#include<malloc.h>
#define QElemtype int
#define status int

typedef struct QNode {
QElemtype data;
struct QNode* next;
}QNode,*QueuePtr;

typedef struct {
QueuePtr front;
QueuePtr rear;
}LinkQueue;

status InitQueue(LinkQueue* Q) {
Q->front = Q->rear = (QNode*)malloc(sizeof(QNode));
Q->front->next = NULL;
return 1;
}

status EnQueue(LinkQueue* Q, int e) {
QNode* p = (QNode*)malloc(sizeof(QNode));
p->next = NULL;
p->data = e;
Q->rear->next = p;
}
status InQueue(LinkQueue* Q, int* e) {
QNode* p = (QNode*)malloc(sizeof(QNode));
p = Q->front->next;
e = p->data;
Q->front->next = p->next;
free(p);
}

status ReadLinkQueue(LinkQueue* Q) {
return Q->front->data;
}
int main()
{
LinkQueue Q;
InitQueue(&Q);
EnQueue(&Q, 1);
printf("%d", ReadLinkQueue(&Q));
}

为什么输出值是随机值而不是我想要的数字1呢?

  • 写回答

1条回答 默认 最新

  • qzjhjxj 2022-04-21 13:38
    关注

    修改如下,见注释,供参考:

    #include<stdio.h>
    #include<malloc.h>
    #define QElemtype int
    #define status int
    
    typedef struct QNode {
        QElemtype data;
        struct QNode* next;
    }QNode, * QueuePtr;
    
    typedef struct {
        QueuePtr front;
        QueuePtr rear;
    }LinkQueue;
    
    status InitQueue(LinkQueue* Q) {
        //Q->front = Q->rear = (QNode*)malloc(sizeof(QNode));修改
        Q->rear = Q->front = NULL;    //修改
        return 1;
    }
    
    status EnQueue(LinkQueue* Q, int e) {
        QNode* p = (QNode*)malloc(sizeof(QNode));
        p->next = NULL;
        p->data = e;
        if (Q->rear != NULL)   //修改
            Q->rear->next = p; //修改
        else
            Q->front = p;      //修改  队头
        Q->rear = p;           //修改  队尾
        return 1;      //修改
    }
    status InQueue(LinkQueue* Q, int* e) {
        //QNode* p = (QNode*)malloc(sizeof(QNode));修改
        if (Q->front == NULL) {    //修改
            Q->rear = NULL;        //修改
            *e = -1;               //修改
            return 0;              //修改
        }
        QNode* p = Q->front;      //修改
        Q->front = p->next;       //修改
        *e = p->data;  //e = p->data; 修改
        free(p);
        return 1;    //修改
    }
    
    status ReadLinkQueue(LinkQueue* Q) {
        if (Q->front == NULL) return 0;
        return Q->front->data;
    }
    int main()
    {
        int e;
        LinkQueue Q;
        InitQueue(&Q);//初始化队列
    
        EnQueue(&Q, 1);//入队
        EnQueue(&Q, 2);
        EnQueue(&Q, 3);
        EnQueue(&Q, 4);
    
        printf("队头元素值:%d\n\n", ReadLinkQueue(&Q));
        
        printf("出队:\n");
        InQueue(&Q, &e);//出队
        printf("%d\n", e);
    
        InQueue(&Q, &e);
        printf("%d\n", e);
    
        InQueue(&Q, &e);
        printf("%d\n", e);
    
        InQueue(&Q, &e);
        printf("%d\n", e);
    
        InQueue(&Q, &e);
        printf("%d\n", e);
    
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 4月30日
  • 已采纳回答 4月22日
  • 创建了问题 4月20日

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀