為什麼這篇鏈結串列例子鄉民發文收入到精華區:因為在鏈結串列例子這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者dolphin7 (Dolphin)看板C_and_CPP標題[問題] Linked-List(...
各位晚安~
一、Linked-List問題:
此程式執行上沒問題,只是有一個地方讓我有點疑惑~
以下僅po出struct定義、初始化函數及新增結構的函數。
typedef struct node
{
struct node *next;
struct node *prev;
int key;
} NODE;
NODE *listHead;
void init(void)
{
listHead = (NODE*)malloc(sizeof(NODE));
listHead ->next= listHead;
listHead ->prev= listHead;
listHead ->key= -1;
}
void add( int key)
{
NODE *node = listHead->next;
while( node->next != listHead )
{
node = node->next;
}
NODE *newNode;
newNode = (NODE*)malloc(sizeof(NODE));
newNode->key = key;
newNode->prev = node;
newNode->next = listHead;
node->next = newNode;
}
我有問題的點在add()裡的while loop判斷式:node->next != listHead
以我寫成環狀的鏈結串列的這題來看,串列應該像是這樣:
(初始化節點的位址0x1000是假設的)
http://ppt.cc/Yu10
node裡面放的是listHead所指節點裡的next所指向的位址(如圖示),
但如果只有一個初始化的節點,node會指回listHead,
此時要新增一個節點,執行到node->next != listHead為什麼不會有問題?
listHead只是一個指向NODE型態的指標,並沒有next成員啊@@?
還是我哪個地方弄錯了呢?
二、malloc問題
在程式中,有一行newNode = (NODE*)malloc(sizeof(NODE));
根據老師的說法,(NODE*)是將malloc挖好的那塊記憶體,強迫轉成NODE的指標。
我疑惑為什麼不是這樣解釋:
「(NODE*)是把malloc回傳的那一塊記憶體的位址,其型態定為NODE。」
舉個簡單的例子:
int a = 5;
int *p_a;
p_a = &a;
傳給p_a的不就是一個int的位址嗎?因此我個人認為我的解釋比較合理~
當然,有可能是我搞錯了XD
以上,本版首po,感謝各位:)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 120.105.217.17
※ 編輯: dolphin7 來自: 120.105.217.17 (04/28 21:19)
我的問題是:為什麼老師說(NODE*)的功用是將malloc挖出來的記憶體轉成指標,
而非我解釋的那樣?
謝謝:)
※ 編輯: dolphin7 來自: 120.105.217.17 (04/28 21:24)
謝謝:)
我看書跟查網路,都是說malloc是回傳一個記憶體的位址,
因此才會有「(NODE*)是把malloc回傳的那一塊記憶體的位址,其型態定為NODE。」
的解釋法。
還是說其實我的解釋方式跟james大一樣,畢竟指標跟位址本來就是一體兩面?XD
to shadow0326大:
我有畫圖了,但就是覺得listHead裡沒有next,那要怎麼辦?@@?
※ 編輯: dolphin7 來自: 120.105.217.17 (04/28 21:34)
謝謝:)
所以綜合james大大所言,
malloc回傳的是一個指標,型態是void *,
而(NODE*)則是把這塊新的記憶體轉型成NODE*,以供程式使用?~
※ 編輯: dolphin7 來自: 120.105.217.17 (04/28 21:38)
謝謝:)
感謝james732大!
是我的init在畫圖的時候就畫錯了,把init的prev跟next畫到listHead去...XD"
感謝!!
※ 編輯: dolphin7 來自: 120.105.217.17 (04/28 21:56)
我的圖是要表示做完init之後,接著要call add()新增一個節點,那張圖是指執行完
NODE *node = listHead->next;之後,整個串列應該要長成那樣。
但我的圖整個畫錯了XD"
應該要像這樣才對http://ppt.cc/kS;u
謝謝:)
※ 編輯: dolphin7 來自: 120.105.217.17 (04/28 22:10)