В моей функции enQueue есть ошибка сегментации, и я не понимаю, почему она присутствует (кроме того, что я обращаюсь к памяти, к которой у меня нет доступа).
Моя функция enQueue предназначен для вставки узла в начало связанного списка. Моя функция deQueue предназначена для обхода связанного списка и удаления его конца.
Вот соответствующие структуры:
typedef struct studstruct{
int age;
struct studstruct *nextPtr;
}Student;
typedef struct linkedlist{
Student *head, *tail;
}StudentList;
Вот моя основная функция:
int main(void){
StudentList *myQueue=initQueue();
int tracker;
tracker=enQueue(myQueue, 4);
printf("Enqueue returned: %d\n", tracker);
tracker=enQueue(myQueue, 3);
printf("Enqueue returned: %d\n", tracker);
tracker=enQueue(myQueue, 2);
printf("Enqueue returned: %d\n", tracker);
tracker=enQueue(myQueue, 1);
printf("Enqueue returned: %d\n", tracker);
printf("After enqueue:\n");
printList(myQueue);
(myQueue->head)=deQueue(myQueue);
printf("After dequeue:\n");
printList(myQueue);
freeList(myQueue);
}
Вот моя функция enQueue:
int enQueue(StudentList *node,int data){
Student *newNode;
newNode = createStudentNode(data);
newNode->nextPtr=node->head;
if(node->head==newNode->nextPtr){
return 1;
}
else{
return -1;
}
}
Вот моя функция deQueue:
Student* deQueue(StudentList *node){
Student *temp=node->head;
Student *temp2;
while(temp->nextPtr!=NULL){
temp2=temp;
temp=temp->nextPtr;
}
free(temp2->nextPtr);
temp2->nextPtr=NULL;
return node->head;
}
Вот моя функция createNode, которая динамически выделяет память для моего узла:
Student *createStudentNode(int data){
Student *node;
node = (Student *)malloc(sizeof(Student));
if(node){
node->nextPtr=NULL;
node->age=data;
}
return node;
}