線性結構的基本特點是除第乙個元素無直接前驅、最後乙個元素無直接後繼之外,其他每個資料元素都有乙個前驅和後繼。【像乙個線段一樣,有頭有尾的排排坐】
線性表
有n個資料特性相同的元素構成的有限序列稱為線性表。n為線性表的長度,n=0時稱為空表。
對於非空的線性表,其特點有:
存在唯一的乙個被稱為「第乙個」的資料元素。
存在唯一的乙個被稱為「最後乙個」的資料元素。
除第乙個之外,結構中的每乙個資料元素均只有乙個前驅。
除最後乙個之外,結構中的每乙個資料元素均只有乙個後繼。
以字母表為例【a,b,c,d,e,f…z】
第乙個元素是a,最後乙個元素是z,是連成一條線的。b的前面連著a,後面連著c,和其他元素不相連。
線性表的順序表示指的是用一組位址連續的儲存單元依次儲存線性表的資料元素。
假設每個元素占用l個儲存單元,以順序表所佔的第乙個單元的儲存位址【loc(a1)】作為資料元素的起始位置,則有:
順序表的插入
【只寫演算法步驟了啊,我覺得演算法步驟比較好懂】
①判斷插人位置i是否合法(i值的合法範圍是1≤i≤n+ 1),若不合法則返回error。
②判斷順序表的儲存空間是否已滿,若滿則返回error。
③將第n個至第i個位置的元素依次向後移動-乙個位置,空出第i個位置(i=n+ 1時無需移動)。
④將要插人的新元素e放入第i個位置。
⑤表長加1。
順序表的刪除
①判斷刪除位置i是否合法(合法值為1≤i≤n),若不合法則返回error。
②將第i+i個至第n個的元素依次向前移動乙個位置(i=n時無需移動)。
③表長減1。
順序表的優缺點
順序表可以隨機訪問表中任一元素,其儲存位置可用乙個簡單、直觀的公式來表示。
然而,從另一方面來看,這個特點也造成了這種儲存結構的缺點:在做插入或刪除操作時,需移動大量元素。
另外,由於陣列有長度相對固定的靜態特性,當表中資料元家個數較多且變化較大時,操作過程相對複雜,必然導致儲存空間的浪費。
為了處理方便,通常在開始加入乙個頭結點,沒有資料域,只儲存了指向第乙個資料元素的指標。
鍊錶的插入
將值為e的新結點插入到鍊錶的第i個結點的位置上。
①查詢結點ai-1,並由指標p指向該結點。
②生成乙個新結點s。
③將新結點s的資料域置為e。
④將新結點s的指標域指向結點ai⑤將結點p的指標域指向新結點*s。
如果先2後1就會讓鏈條斷掉,找不到後面的結點。
鍊錶中結點的刪除
刪除單鏈表的第i個結點ai:
①查詢結點ai-1並由指標p指向該結點。
②臨時儲存待刪除結點ai的位址在q中,以備釋放。
③將結點*p的指標域指向ai的直接後繼結點。
④釋放結點ai的空間。
箭頭是指標域的指向。
迴圈單鏈表
特點是最後乙個資料的指標域指向頭結點,形成乙個環。
雙向鍊錶
他有三個域,乙個資料域和兩個指標域。乙個指向前乙個資料元素,乙個指向後乙個資料元素。
雙向鍊錶的插入和刪除注意不讓鏈條斷開就行,雙向鍊錶更不容易斷開。
空間效能的比較。即長度變化**擇鍊錶,變化不**擇順序表。
時間效能的比較。即增刪操作多選擇鍊錶,操作少選擇順序表。
資料結構學習 線性表(2)
編寫乙個程式exp2 2.cpp,實現單鏈表的各種基本運算 假設單鏈表的元素型別為char 並在此基礎上完成如下功能 1 初始化單鏈表h 2 採用尾插法依次插入元素a,b,c,d,e 3 輸出單鏈表h 4 輸出單鏈表h長度 5 判斷單鏈表h是否為空 6 輸出單鏈表h的第3個元素 7 輸出元素a的位置...
資料結構學習 線性表
線性表一般分為順序結構和鏈式結構。順序表裡面元素的位址是連續的,如陣列 鍊錶裡面節點的位址不是連續的,是通過指標連起來的,如單鏈表 順序結構 優點 易於查詢,索引快 list n 這樣的操作,o 1 複雜度。缺點 擴充套件性弱,不易刪除 插入,這兩項操作均是o n 的時間複雜度 鍊錶結構 優點 擴充...
資料結構學習 線性表
考試前複習下資料結構,把一些知識點整理在這!主要參考了殷人昆主編的 資料結構 用物件導向方法與c 語言描述 這本書,以及中山大學劉聰老師的課件內容!鍊錶雙鏈表 線性表 linear list 是由n n 0 個資料元素 結點 a 0 a 1 a 2 a n 1 組成的有限序列。維基百科 線性表是乙個...