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日

悬赏问题

  • ¥20 pip2.40更新pip2.43时报错
  • ¥15 换yum源但仍然用不了httpd
  • ¥50 C# 使用DEVMOD设置打印机首选项
  • ¥15 麒麟V10 arm安装gdal
  • ¥15 想用@vueuse 把项目动态改成深色主题,localStorge里面的vueuse-color-scheme一开始就给我改成了dark,不知道什么原因(相关搜索:背景颜色)
  • ¥20 OPENVPN连接问题
  • ¥15 flask实现搜索框访问数据库
  • ¥15 mrk3399刷完安卓11后投屏调试只能显示一个设备
  • ¥100 如何用js写一个游戏云存档
  • ¥15 ansys fluent计算闪退