【发布时间】:2020-10-25 06:15:18
【问题描述】:
我已经编写了以下代码来实现队列及其操作(入队)。该程序编译良好,没有错误,但是当输入用于插入(入队操作)时,程序停止工作并显示 a.exe 已停止工作
该程序包含返回节点的create_node()函数、链表初始化函数、队列初始化函数,这两个函数都是void函数,并在链表函数末尾写入插入,然后调用入队函数。 注意:没有显示功能来打印所有元素到队列
我认为初始化函数可能有问题,但我不确定。
#include <stdlib.h>
#include <stdio.h>
typedef struct node node;
struct node
{
int id;
node *link;
};
typedef struct list
{
node *head;
node *tail;
int number_of_nodes;
} List;
typedef struct queue
{
List *ptr_list;
} Queue;
static node *create_node(int id,node *link)
{
node *temp = (node*)malloc(sizeof(node));
temp->id=id;
temp->link=link;
return temp;
}
void list_initialize(List *ptr_list)
{
ptr_list = (List*)malloc(sizeof(List));
ptr_list->head=ptr_list->tail=NULL;
ptr_list->number_of_nodes = 0;
}
void list_insert_rear(List *ptr_list, int id)
{L
node *temp = create_node(id,NULL);
if(ptr_list->tail==NULL)
{
ptr_list->head=ptr_list->tail=NULL;
ptr_list->number_of_nodes++;
}
else
{
ptr_list->tail->link=temp;
ptr_list->tail=temp;
ptr_list->number_of_nodes++;
}
}
void queue_initialize(Queue *queue_list)
{
queue_list = (Queue*)malloc(sizeof(Queue));
list_initialize(queue_list->ptr_list);
}
void queue_enqueue(Queue *ptr, int id)
{
list_insert_rear(ptr->ptr_list,id);
}
int main()
{
Queue queue;
queue_initialize(&queue);
int choice, id, t;
int loop = 1;
while (loop)
{
scanf("%d", &choice);
switch (choice)
{
case 0:
scanf("%d", &id);
queue_enqueue(&queue, id);
break;
default:
loop =0;
break;
}
}
}
【问题讨论】:
-
您尝试了哪些测试来尝试了解问题所在?也尽量不要使用来自用户 (scanf) 的输入进行测试,因为您希望在整个测试中获得可重复且一致的结果
-
提示:仔细看
list_initialize。 -
阅读链接的帖子,然后将其应用于
list_initialize -
@1201ProgramAlarm 你能说一下那部分有什么问题吗。
标签: c