首页 新闻 搜索 专区 学院

c语言关于链式队列的一些问题

0
悬赏园豆:15 [已解决问题] 解决于 2021-10-08 15:47
#include<stdio.h>
#include<stdlib.h>
typedef struct LinkQueue {
    int data;
    struct LinkQueue *next;
}LinkQueue,*LinkStr;
typedef struct Link{
    LinkStr front;
    LinkStr rear;
}Link;
Link* InitQueue(Link* q);
void EnterQueue(Link* q);
int main(void) {
    Link* queue = NULL;
    queue=InitQueue(queue);
     EnterQueue(queue);
    return 0;
}
//初始化
Link*  InitQueue(Link* q) {
    q->front=q->rear= (LinkStr)malloc(sizeof(LinkQueue));
    q->front->next = NULL;
    return q;
}
//入队列
void EnterQueue(Link* q) {
    LinkQueue *number = NULL;
    number = (LinkQueue*)malloc(sizeof(LinkQueue));
    int n = 0;
    int flag = 1;
    printf("请输入元素:");
    while (flag) {
        scanf("$%d", &n);
        if (n != -1) {
            number->data = n;
            q->rear->next = number;
            q->rear = number;
        }
        else {
            flag = 0;
        }
    }
}

问题补充:

为啥有这种情况,已经困扰一下午了。。。。。。

新手小白。的主页 新手小白。 | 初学一级 | 园豆:75
提问于:2021-10-06 16:08
< >
分享
最佳答案
0

你的scanf的%d前多了一个$

收获园豆:15
计算机知识杂谈 | 菜鸟二级 |园豆:470 | 2021-10-07 15:19

去掉之后就正常运行了
另外initqueue函数中少了malloc,这一点楼上已经提到了,就不再说了

计算机知识杂谈 | 园豆:470 (菜鸟二级) | 2021-10-07 15:21

@计算机知识杂谈: 万分感谢!!,我的大问题。。。

新手小白。 | 园豆:75 (初学一级) | 2021-10-07 15:35
其他回答(1)
0

报错说了, nullptr, 函数参数传的是NULL

Link* InitQueue(Link *_) {
        Link *q = malloc(sizeof(*q));
        q->front = malloc(sizeof(*q->front));
        q->rear = malloc(sizeof(*q->rear));
        return q;
}
jakio6 | 园豆:1281 (小虾三级) | 2021-10-06 16:54

那是不是我应该先对q这个变量分配内存空间

支持(0) 反对(0) 新手小白。 | 园豆:75 (初学一级) | 2021-10-06 17:11
Link*  InitQueue(Link* q) {
    q = (Link*)malloc(sizeof(Link));
    q->front=q->rear= (LinkStr)malloc(sizeof(LinkQueue));
    q->front->next = NULL;
    return q;
}

我这样写后,程序虽然不报错了,但是下面的那个while就会陷入死循环。。。。。

支持(0) 反对(0) 新手小白。 | 园豆:75 (初学一级) | 2021-10-06 17:15
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册