我的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;
}
发布于 2020-04-02 00:15:41
如果是前置追加,则忘记更改StudentList的新头部;如果是后置追加,则忘记更改尾部
int enQueue(StudentList *node,int data){
Student *newNode;
newNode = createStudentNode(data);
newNode->nextPtr = node->head;
node->head = newNode;
if(node->head==newNode->nextPtr){
return 1;
}
else{
return -1;
}
}
https://stackoverflow.com/questions/60974845
复制相似问题