資料結構鏈結串列的問題,請高手幫忙3q

2011-11-18 2:51 am

list_pointer ptr;
ptr = (list_pointer)malloc(sizeof(list_node));
ptr->data = value;
previous = head;
current = head->next;
while((current != NULL) && (current->data > ptr->data)){
previous = current;
current = current->next;
}
ptr->next = current;
previous->next = ptr;
程式大概長這樣,目的是要插入節點
可是我看不懂這樣寫的目的
還有"->(箭頭)"指的是甚麼?
ptr和ptr->next的差別?

有人可以幫忙解答嗎感激!!!

回答 (5)

2011-11-20 7:52 am
✔ 最佳答案
以下是說明:
// 宣告串列節點
list_pointer ptr;
// 配置動態記憶體:向作業系統借一塊記憶體空間,用完要還給系統
ptr = (list_pointer)malloc(sizeof(list_node));
// 把資料丟給節點結構的 data 變數
ptr->data = value;
// 以下為了搜尋節點而做的記錄
// 記錄前一個節點,從頭開始記錄
previous = head;
// 記錄第一個資料節點,從頭後面的第一個節點開始記錄
current = head->next;
// 插入節點:利用迴圈搜尋資料
// 條件:(current != NULL) 只要節點存在
// 條件:(current->data > ptr->data) 只要目前的節點(資料)大於新增的節點(資料)
while((current != NULL) && (current->data > ptr->data))
{
// 移動:記錄目前的節點為前一個節點
previous = current;
// 移動:記錄下一個節點為目前的節點
current = current->next;
}
// 插入串列:把目前節點接到新增節點的後面
ptr->next = current;
// 插入串列:把新增節點接到前一個節點的後面
previous->next = ptr;
你的節點結構可能是…
struct list_node
{
int data;
struct list_node* next;
};
typedef struct list_node* list_pointer;
ptr 是節點,但是它是指標的型態,必須要用到->(箭頭)來指向它本身的資料成員變數;把節點的資料成員取出,把資料指定給成員。ptr->next 在這裡的用途在於,記錄下一個節點的位置。
參考: 大學曾上過資料結構課程
2011-11-19 6:32 am
其實就是指向那節點的意思
我覺得要用圖解方式你可能
比較好懂....
2011-11-18 7:46 pm
「大哉問」是說問題問得很好,而不是說這個問題範圍很大 = =

btw 如果 ptr->next 都不知道是什麼意思,我想你要看懂上述程式是言之過早。
就好像荷包蛋都不會煎的人卻想做老皮嫩肉一樣。
2011-11-18 7:29 pm
真是大哉問......
2011-11-18 5:18 pm
先瞭解指標跟結構的原理,以及瞭解指標跟結構的語法。有了基礎認識,再來研究程式功能吧。(語法書裡都會有)


收錄日期: 2021-04-28 23:10:33
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20111117000010KK05232

檢視 Wayback Machine 備份