請問一下~雙向鏈結串列的問題。 |
答題得分者是:syntax
|
kawapa
一般會員 發表:3 回覆:3 積分:1 註冊:2007-04-08 發送簡訊給我 |
<textarea class="cpp" rows="10" cols="60" name="code">struct Save_roadname //Save_roadname是一個鏈結串列結構,含有兩個欄位
{
String roadname ; //存放路名
Save_roadname *pre;// 存放前一節點的位址
Save_roadname *next ; //存放下一節點的位址
};
Save_roadname *save_head, *save_tail, *find_ptr, *delete_road[ 6 ] ;
typedef Save_roadname List;
void ListInit()
{
save_head = NULL;
save_tail = NULL;
}
List* ListAlloc() // 配置串列資料
{
List* curr = NULL;
if(!save_head)
{
curr = (List*)malloc(sizeof(List)); // 配置記憶體
save_head = curr; // LIST 開頭
save_head->pre = NULL; // 前一個 List
save_head->next = NULL; // 下一個 List
save_tail = save_head; // List 尾端
}
else
{
curr = (List*)malloc(sizeof(List)); // 配置記憶體
save_tail->next = curr; // 下一個 List 加到尾端
curr->pre = save_tail; // 前一個 List
curr->next = NULL; // 下一個 List
save_tail = curr; // Save_roadname 尾端
}
return curr;
}
void ListFree(List * curr) // 釋放串列資料
{
if(curr == save_head)
save_head = curr->next; // List 開頭, head指到下一個List
else if(curr == save_tail)
save_tail = curr->pre; // List 尾端, tail指到前一個List
if(curr->pre == NULL && curr->next == NULL) // LIST curr 前後都沒有 LIST,LIST head、LIST tail 設成 NULL
{
save_head = NULL;
save_tail = NULL;
}
else // List curr 前後的LIST重新串聯
{
if(curr->pre)
curr->pre->next = curr->next;
if(curr->next)
curr->next->pre = curr->pre;
}
free(curr); // 釋放記憶體
}
void ListProc() // 串列處理
{
List *curr, *next;
curr = save_head;
while(curr)
{
next = curr->next;
// 處理LIST
curr = next;
}
}
</textarea> 上面是我想研究的雙向鏈結串列的程式… 只是我看不懂… 該怎麼新增新的節點?還有刪除舊節點?雖然有註解… 我還是看的一知半解… 麻煩各位老師指點一下
|
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
|
kawapa
一般會員 發表:3 回覆:3 積分:1 註冊:2007-04-08 發送簡訊給我 |
|
syntax
尊榮會員 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
是的,你功力太差
不過我喜歡「多翻幾次書」這句 你就 多翻幾次書 吧 不過可以給你一點建議,就是腦筋放清楚,心情放輕鬆 事情就會變簡單 想像自己是一個呆子 然後用呆子的解決辦法,就最簡單,也最有效 雙向鏈結,不過是鏈結麼,不用想的那麼辛苦 你把它想成腳踏車練,沒看過的話去看一下,那就是雙向鍊 鏈結的基本資料結構
如果要加入,那就加入阿!想這個多 你想 一個排隊的隊伍,大家手牽手,如果中間要加一個人,那該怎麼辦? 簡單阿,不就叫那個人站到要加入的位置,然後 1. 遷前面的手,前面的人會記得在後面的人換了 ---> 前面的 Next 換成新的 node ,新的 node 的 pre 就記錄 前面的 node 2. 與遷後面的手,後面的人會記得在前面的人換了 ---> 後面的 Pre 換成新的 node ,新的 node 的 Next 就記錄 後面的 node 不就是這樣,會難嗎?放清你的腦袋 反過來,移除隊伍中的一個人 1.前面的人跨過後面的一個人,與後面的後面牽手 --> 前面的 Next 記錄直接填入後面的 Next 2.後面的人跨過前面的一個人,與前面的前面牽手 --> 後面的 pre 記錄直接填入前面的 pre 這樣那個中間人,就被幹掉拉,你看,要踢掉一個人是多麼簡單 再來就是要加入一個人,必需要如何?當然是生一個人出來,所以要 ---> 配置記憶體 幹掉一個人後,要如何?一定要毀屍滅跡的阿,不然會被抓的勒,所以要 --> 釋放記憶體 剩下來,就是一些細節,你自己舉一反三吧,就像如果在頭加入一個人,前面沒的遷,哪只抓自己的 XXX --> pre 設成 NULL 這樣了乎? ===================引 用 文 章=================== 就是我該怎麼新增節點…和刪除,我想我還是多翻幾次書吧…功力太差 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |