gpt4 book ai didi

c - 在c中使用链表队列

转载 作者:太空宇宙 更新时间:2023-11-04 00:48:58 24 4
gpt4 key购买 nike

在编译过程中这段代码没有报错,但是代码突然停止了。根据我的说法,问题出在声明 q->front=q->rear=NULLcreateq 函数上。它确实必须被初始化。这有什么问题吗?

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
struct node
{
struct node *next;
int data;
};

struct queue
{
struct node *front;
struct node *rear;
};

struct queue *q;

void createq(struct queue *);
struct queue *insert(struct queue *);
struct queue *delete_q(struct queue *);
struct queue *display(struct queue *);

int main()
{
int option;
printf("\tMAIN MENU\n");
printf("\n1. Create\n2. Display\n3. Insert\n4. Delete\n5. Exit\n");
while(option!=5)
{
printf("\nEnter a choice:");
scanf("%d",&option);
switch(option)
{
case 1:
createq(q);
break;

case 2:
q=display(q);
break;

case 3:
q=insert(q);
break;

case 4:
q=delete_q(q);
break;
}
}
return 0;
}

void createq(struct queue *q)
{
q->rear=NULL;
q->front=NULL;
printf("q intialized");
}

struct queue *insert(struct queue *q)
{
struct node *newnode;
int val;
newnode=(struct node *)malloc(sizeof(struct node));
printf("Enter the value to be inserted:");
scanf("%d",&val);
newnode->data=val;
if(q->front==NULL)
{
q->front=newnode;
q->rear=newnode;
q->front->next=q->rear->next=NULL;
}
else
{
q->rear->next=newnode;
q->rear=newnode;
q->rear->next=NULL;
}
return q;
}

struct queue *delete_q(struct queue *q)
{
struct node *ptr;
if(q->front==NULL)
{
printf("Queue Empty\n");
}
else
{
ptr=q->front;
q->front=q->front->next;
printf("Element being deleted is %d\n",ptr->data);
free(ptr);
}
return q;
}

struct queue *display(struct queue *q)
{
struct node *ptr;
ptr=q->front;
if(q->front==NULL)
printf("Queue Empty!!\n");
else
{
while(ptr!=q->rear)
{
printf("%d\t",ptr->data);
ptr=ptr->next;
}
printf("%d\t",ptr->data);
printf("\n");
}
return q;
}

最佳答案

您可以通过以下方式声明一个指向队列结构的指针:

struct queue *q;

请注意,您不为此处的结构分配内存。接下来,在您调用的 main() 函数中:

createq(q);

然后在 createq() 函数中通过 q 访问 rearfront:

q->rear=NULL;
q->front=NULL;

这样你就可以访问你没有分配的内存。您应该在 main() 函数的开头放置如下内容:

q = (struct queue *)malloc(sizeof(struct queue));

并且不要忘记将 free(q) 放在 main() 函数的末尾以防止内存泄漏。

关于c - 在c中使用链表队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26261412/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com