我的链接列表有问题。我很确定这是我的指针关闭,或者我没有以正确的方式传递指针,因为我对c是新手。结构对我来说也是新的,而C++是我习惯的语言,并且存在比我所意识到的更多的差异。我可以立即在C++中完成这个程序,但无论如何,这里是我的代码。链接列表崩溃,c
void add_process(struct process new_process, struct process *head, struct process *current){
new_process.next = NULL;
if(head == NULL){
head = &new_process;
current = head;
head->next = NULL;
}
else if(new_process.timeNeeded < head->timeNeeded){
temp = head->next;
head = &new_process;
new_process.next = temp;
}
else{
current = head;
while(new_process.timeNeeded > current->timeNeeded){
temp = current;
current = current->next;
}
temp->next = &new_process;
new_process.next = current;
}
}
我正在读取文件中的值到进程中,目前我唯一使用的是timeNeeded,它是一个int。而且我试图按照最短时间排序。
int main(){
FILE *readfile;
readfile = fopen("data.txt","r");
head = NULL;
current = NULL;
while(fscanf(readfile, "%s %i %i %i",
&new_process.processName, &new_process.arrivalTime,
&new_process.timeNeeded, &new_process.priority) != EOF) {
add_process(new_process, head, current);
}
current = head;
while(current->next != NULL){
printf("%s %i %i %i\n", new_process.processName, new_process.arrivalTime, new_process.timeNeeded, new_process.priority);
current = current->next;
}
return 0;
}
该程序崩溃在打印这不是问题。第一个问题是,我的程序每次都进入if(head == NULL)循环并在那里插入。所以,头可能永远不会改变,但我不知道如何解决这个问题,我很确定它是一个双指针,但不是正面的。而且我也确定还有其他问题,所以如果你能指出我正确的方向,并且如果我做了任何完全错误的事情,请告诉我。
编辑:确定后,将指针添加到头我得到一个错误在head-> next = NULL说“表达式必须有指针类类型。”试图在头部之前添加*,但似乎没有帮助。谁知道怎么修它?
非常感谢,这一切都有道理,希望我能够再次得到这个。 – user1019430
@ user1019430记得点赞您发现有帮助的答案。 – greatwolf
是的,我试过,但我需要15代表第一,当我得到它时,我会给你投票 – user1019430