我的鏈接列表有問題。我很確定這是我的指針關閉,或者我沒有以正確的方式傳遞指針,因爲我對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