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

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

#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 快手联盟怎么快速的跑出建立模型
  • ¥15 关于腾讯云服务器中,PHP页面无法打开的问题
  • ¥60 如何把照片修复成原始拍摄图
  • ¥80 Exited too quickly (process log may have details)
  • ¥15 爬知乎登录之后内容加载不出来
  • ¥15 怎么用protues测量通频带
  • ¥15 zepelin使用sparkInterpreter 异常
  • ¥15 paho mqtt 接收不到消息
  • ¥15 函数r关于两个分量y,z方向上的图像,分开画r随y的图像,r随z的图像
  • ¥15 如何用Matlab求Pearcey函数的数值积分?