Мне поручено создать структуру данных очереди в C в виде связанного списка. Наш лектор дал нам большой объем кода для реализации стека, но мы должны адаптировать его для создания очереди. Код, который дал нам наш лектор, в итоге не компилируется и не выполняет сегментацию в той же точке, что и код, который я написал для очереди. Я очень плохо знаком с структурами, malloc и C в целом, поэтому я мог упустить что-то до боли очевидное.
Вот код, который я использую:
#include <stdio.h>
#include <stdlib.h>
struct node{
int data; //contains the actual data
struct node *prev; //pointer to previous node (Closer to front)
struct node *next; //pointer to next node (Closer to back)
};
typedef struct node *Nodepointer;
struct queue{
Nodepointer front;
Nodepointer back;
};
typedef struct queue *Queuepointer;
main(){
Queuepointer myqueue; //create a queue called myqueue
init(myqueue); //initialise the queue
Nodepointer new = (Nodepointer)malloc(sizeof(struct node));
myqueue->front = new;
}
int init(Queuepointer q){
q = (Queuepointer)malloc(sizeof(struct queue));
q->front = NULL;
q->back = NULL;
}
Идея состоит в том, что структура очереди «содержит» первый и последний узлы в очереди, и когда узел создается, myqueue обновляется. Однако я даже не могу добраться до этой части (pop и push пишутся, но для краткости опущены). Код segfaulting в строке
myqueue->front = new;
со следующим выводом GDB:
Program received signal SIGSEGV, Segmentation fault.
0x08048401 in main () at queue.c:27
27 myqueue->front = new;
Есть идеи, что я делаю не так?