---------------start reading---------------
雙向鍊錶是鍊錶的一種,都是以鏈式結構儲存。與單鏈表不同的是,雙向鍊錶可以向前找前驅,而單鏈表只能自己定義前驅而且不能倒退。雙向鍊錶有與單鏈表不同的結構,但實現的功能基本是一樣的。
雙向鍊錶的結構
雙向鍊錶的操作一定要注意,要改前驅位址。特別注意尾結點,當需要改後繼的前驅的時候,尾結點不能用p->prio->next=p->next->prio,p->next為null解引用會導致程式崩潰
雙向鍊錶的具體操作
標頭檔案
#pragma once
//帶頭節點雙向鍊錶,非迴圈
typedef struct dnode
dnode,*dlist;
//鍊錶初始化
void initlist(dlist plist);//node
//頭插
bool insert_head(dlist plist,int val);
//尾插
bool insert_tail(dlist plist,int val);
//查詢
dnode *search(dlist plist,int key);
//刪除
bool delete(dlist plist,int key);
int getlength(dlist plist);
bool isempty(dlist plist);
void clear(dlist plist);
void destroy(dlist plist);
void show(dlist plist);
具體實現
#include #include #include #include "dlist.h"
//鍊錶初始化
void initlist(dlist plist)
plist->next = null;
plist->prio = null;
}//頭插
bool insert_head(dlist plist,int val)
return true;
}//尾插
bool insert_tail(dlist plist,int val)
//查詢
dnode *search(dlist plist,int key)
} return null;
}//刪除
bool delete(dlist plist,int key)
p->prio->next = p->next;
if(p->next != null)
free(p);
return true;
}int getlength(dlist plist)
return count;
}bool isempty(dlist plist)
void clear(dlist plist)
void destroy(dlist plist)
}void show(dlist plist)
printf("\n");
}
資料結構 鍊錶 雙向鍊錶
注意typedef的定義結構,以及dinklist的資料型別 typedef struct dnode dnode,dinklist 注意插入第乙個結點時,prior指標的空指向問題 if l next null 若l後繼結點為空 則省略該步驟 l next prior p 基本 頭插法建立雙向鍊錶...
資料結構 雙向鍊錶
前幾天寫了乙個單向鍊錶,今天參考自己單向鍊錶改寫了乙個雙向非迴圈鍊錶,下面只討論雙向非迴圈鍊錶。雙向非迴圈鍊錶有如下特點 一 雙向鍊錶每個結點都有乙個前驅指標和後驅指標 當然頭結點和尾結點除外 二 雙向鍊錶中的任意乙個結點開始,都可以很方便地訪問它的前驅結點和後繼結點。三 頭結點只有後驅指標沒有前驅...
資料結構 雙向鍊錶
單鏈表的單向性 只能從頭結點開始高效訪問鍊錶中的資料元素。單鏈表還存在另乙個缺陷 逆序訪問時候的效率極低。如下 linklistlist for int i 0 i 5 i for int i list.length 1 i 0 i 根據大o推算法可以得出乙個for迴圈的時間複雜度為o n get ...