線性表部分:
線性結構的特點:在資料元素的非空有限集中,
(1)存在唯一的乙個被稱作「第乙個」的資料元素;
(2)存在唯一的乙個被稱作「最後乙個」的資料元素;
(3)除第乙個之外,集合中每個資料元素均只有乙個前驅;
(4)除最後乙個之外,集合中每個資料元素均只有乙個後繼。
順序表:
線性表的順序表示指的是用一組位址連續的儲存單元依次儲存線性表的資料元素。
假設線性表的每個元素需占用l個儲存單元,並以所佔的第乙個單元的儲存位址作為資料元素的儲存位置。則線性表中第i+1個資料元素的儲存位置loc(a
i+1)和第i個資料元素的儲存位置loc(ai)之間滿足下列關係:
loc(ai+1) = loc(ai)+l
一般來說,線性表的第i個資料元素ai的儲存位置為: loc(ai+1) = loc(ai)+(i-1)*l,表示式中 loc(ai)是線性表的第乙個資料元素a1的儲存位置,通常稱作線性表的起始位置或基位址。
線性表的這個機內表示稱為線性表的順序儲存結構或順序映像,通常,稱這種儲存結構的線性表為順序表。
特點:只要確定了儲存線性表的起始位置,線性表中任一資料元素都可隨機訪問,所以線性表的順序儲存結構是一種隨機訪問的儲存結構。
可以用以下資料結構表示乙個一維陣列:
#define list_iniy_size 100 //線性表儲存空間初始分配量
#define listincrement 10 //線性表儲存空間分配增量
typedef structsqlist;
線性鍊錶:
單鏈表:
特點是用一組任意的儲存單元儲存線性表的資料元素(這些儲存單元可以是連續的,也可以是不連續的)。
因此為了表示每個資料元素與其直接後繼資料元素之間的邏輯關係,對於資料元素ai來說,除了儲存其本身的資訊之外,還需儲存乙個指示其直接後繼的資訊(即直接後繼的儲存位置)。
這兩部分資訊組成資料元素ai的儲存映像,稱為節點。其中儲存資料元素資訊的域稱為資料域,儲存直接後繼儲存位置的域稱為指標域。
n個節點結成乙個鍊錶,即為線性表(a1,a2,a3,...an
)的鏈式儲存結構。
指標為資料元素之間的邏輯關係的映像,則邏輯上相鄰的兩個資料元素其儲存的物理位置不要求緊鄰,因此,這種儲存結構為非順序映像或鏈式映像。單鏈表儲存結構:
typedef struct lnodelnode,*linklist;
頭指標,指向鍊錶中的第乙個節點,若頭指標為空,則表示鍊錶為「空」表,其長度為「零」。
有時,我們在單鏈表的第乙個節點之前附設乙個節點,稱為頭結點,它的資料域可以不儲存任何資訊,或者儲存線性表的長度之類的附加資訊,它的指標域儲存指向第乙個節點的指標。若線性表為空表,則頭結點的指標域為「空」。
status getelem_l(linklist l ,int i, elemtype &e)
if( !p || j > i) return error; //第i個元素不存在
e = p -> data; //取第i個元素
return ok;
}
status listinsert_l(linklist &l, int i, elemtype e)
if(!p || j > i - 1) return error;
s = (linklist) malloc (sizeof(lnode));
s -> data = e; s ->next = p ->next;
p -> next = s;
return ok;
}
status listdelete_l(linklist &l , int i, elemtype & e)
if(!(p -> next) || j > i - 1) return error;
q = p -> next; p -> next = q -> next;
e = q -> data; free(q);
}
void createlist_l(linklist &l , int n)
}
void mergelist_l(linklist & la, linklist & lb, linklist &lc)else
pc -> next = pa ? pa : pb;
free(lb);
}}
迴圈鍊錶:
它的特點是表中最後乙個節點的指標域指向頭結點,整個鍊錶形成乙個環,由此,從表中任一節點出發均可找到表中其他結點。
迴圈鍊錶的操作和線性鍊錶基本一致,差別僅在與演算法中的迴圈條件不是p或者p->next是否為空,而是它們是否等於頭指標。
雙向鍊錶
在雙向鍊錶的節點中有兩個指標域,其一指向直接後繼,另一指向直接前趨,c語言可以描述為:
typedef struct dulnodedulnode,*dulinklist;
還有乙個特性:d為指向表中某乙個結點的指標,則d ->next -> prior = d ->prior -> next = d。
雙向迴圈鍊錶:
存在兩個環,頭結點的前趨指向尾結點,尾結點的後繼指向頭結點。
雙向鍊錶的插入操作:
status listinsert_dul(dulinklist &l, int i, elemtype e)
雙向鍊錶的刪除操作:
status listdlete_dul(dulinklist &l, int i, elemtype &e)
資料結構 嚴蔚敏版 緒論
資料 所有能被輸入到計算機中,且能被計算機處理的符號的集合。資料元素 資料中的乙個 個體 資料結構中討論的基本單位。資料結構 帶結構的資料元素的集合。資料的邏輯結構可以分為 1.集合結構 資料元素關係 結構之間的元素同屬於乙個集合體 2.線性結構 資料元素關係 結構之間的元素存在一對一的關係 3.樹...
資料結構 嚴蔚敏
最近一直想找一本純資料結構的書來學習,找來找去都沒有找到一本合適的書籍,相比之下國內的書籍之中,嚴蔚敏和吳偉民的還算是經典版了,很多國內其他資料結構教材都參考這本書的。但缺點是很多都是偽 對程式設計初學者來說有一些難度,甚至有些考研的同學來看這本書有很多還看不懂,並且裡面也有些容易迷惑人的地方。出於...
資料結構(嚴蔚敏)
說起為什麼重新拿起這本書,著實非常慚愧。是因為面試的時候,第乙個面試官面試完專案之後。第二面試官說我們就當聊聊天,考考資料結構,演算法就好了。結果以乙個問題就把我難住了,這個問題是 雜湊表是什麼?所以我打算花兩天的時間重新把這本書看一遍,並做下筆記,這次我一定會記住。目前,計算機已深入到社會生活的各...