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

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

#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 05: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;
    }
    
    

    展开全部

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    weixin_52202309 2022-04-22 10:46

    好的,非常感谢

    回复
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 4月29日
  • 已采纳回答 4月22日
  • 创建了问题 4月20日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部