考試前複習下資料結構,把一些知識點整理在這!主要參考了殷人昆主編的《資料結構(用物件導向方法與c++語言描述)》這本書,以及中山大學劉聰老師的課件內容!
鍊錶雙鏈表
線性表(linear list)是由n(n≥0)個資料元素(結點)a[0],a[1],a[2]…,a[n-1]組成的有限序列。——[維基百科]線性表是乙個有限序列,意味著表中各個表項是相繼排列的,且每兩個相鄰表項之間都有直接前驅和直接後繼的關係。除第乙個表項外,其他表項有且僅有乙個直接前驅;除最後乙個表項外,其他表項有且僅有乙個直接後繼。
以下linearlist類給出了線性表的抽象基類,它應用了模板類來描述線性表抽象資料型別:
template
class linearlist ;
線性表的儲存表示有兩種:順序儲存方式(基於陣列)和鍊錶儲存方式(基於鍊錶)。
把線性表中的所有表項按照其邏輯順序依次儲存到計算機儲存中指定儲存位置開始的一塊連續的儲存空間中。
用物理位置上的鄰接關係來表示結點間的邏輯關係。
無需為表示結點間的邏輯關係而增加額外的儲存空間,儲存利用率高。
支援隨機訪問,訪問速度快。
插入刪除時,平均需要移動一半的元素,效率低。
若是靜態分配儲存空間,則很難事先確定合適的空間大小;若是動態分配記憶體空間,則在擴充陣列空間時,時間開銷較大。
定義
單鏈表是一種鏈式訪問的資料結構,用一組位址任意的儲存單元存放線性表中的資料元素。
單鏈表c++實現
template
class linkedlist
~linkedlist()
}linkedlist(linkedlist & that)
linkedlist & operator= (linkedlist & that)
copy(that);
return
*this;
}void removefirst()
void addfirst(t data)
t getfirst()
return first->
data;
}bool isempty()
private:
struct node ;
node * first;
void copy(linkedlist & that) else
current->
data
= node->
data;
current->next =
null;
node = node->next;}}
};
特點
通過單鏈表的指標將各個資料元素按照線性表的邏輯順序鏈結起來。
優點
插入刪除結點效率高
缺點
每個結點帶有指標域,儲存開銷大。
不支援隨機訪問,遍歷鍊錶時間開銷大。
為了解決單鏈表的缺點,出現了單鏈表的其他變形,如單向迴圈鍊錶(迴圈鍊錶)和雙向迴圈鍊錶(雙鏈表)。
使用雙向鍊錶的目的是為了解決在鍊錶中訪問直接前驅和直接後繼的問題。
雙鏈表c++實現
list ;
int nodecount;
node * first;
node * last;
void clear()
}void copy(list & that)
}public:
list()
~list()
list(list & that)
list & operator= (list & that)
int size()
bool empty()
e front()
e back()
void push_front(e e)
else
++ nodecount;
}void push_back(e e)
void pop_front()
else
}void pop_back() };
資料結構學習 線性表
線性表一般分為順序結構和鏈式結構。順序表裡面元素的位址是連續的,如陣列 鍊錶裡面節點的位址不是連續的,是通過指標連起來的,如單鏈表 順序結構 優點 易於查詢,索引快 list n 這樣的操作,o 1 複雜度。缺點 擴充套件性弱,不易刪除 插入,這兩項操作均是o n 的時間複雜度 鍊錶結構 優點 擴充...
資料結構學習 線性表
鏈式儲存用指標表示邏輯結構,可以很方便的表示各種邏輯結構。順序儲存結構中,插入和刪除結點需要大量的移動元素,效率很低。順序儲存結構既可以順序訪問也可以隨機訪問,而鏈式結構只可以順序訪問。對n個元素進行排序的時間複雜最快也要o n 初始有序 通常是o nlog2n 或o n 2 單鏈表只能順序查詢插入...
資料結構學習 線性表
這一系列部落格的目的在於複習鞏固資料結構的基礎知識,為考研面試筆試做準備,所以重在原理,實踐不是重點。參考書籍有嚴蔚敏老師的 資料結構 c語言版 c c 資料結構與演算法速學速用大辭典 線性表迴圈鍊錶 雙向鍊錶 將s結點插入p結點之前 s dlistnode malloc sizeof dlistn...