順序表的存儲結構
『壹』 何時選用順序表、何時選用鏈表作為線性表的存儲結構為宜
順序表:需要頻繁地按位號訪問,元素中間插入刪除較少(在線性表的端點插入刪除不算)
鏈表:頻繁地在非端點插入刪除元素、元素個數變動范圍較大
『貳』 順序存儲的有序線性表 有序線性鏈表
「順序存儲」表明該線性表使用順序存儲結構(即數組)
「有序」表明線性表內元素排列有序,如「1,2,3,4,5」
「鏈表」表明該線性表採用鏈式存儲結構,即每個元素的數據類型都是一個結構體,這個結構體裡面又包含指向下一個位置的結構體的地址
順序存儲結構的線性表的類型定義如下:
#define
MAXSIZE
100
‖順序表的最大容量
typedef
struct
{ElemType
data[MAXSIZE];
‖存放線性表的數組
int
last;
‖last是線性表的長度
}SeqList;
鏈式存儲線性表的結點定義:
typedef
struct
Node
{ElemType
data;
struct
Node
*next;
}LNode,*LinkedList;
『叄』 順序存儲結構與鏈式存儲結構
概念官方一點來說可以使用 網路 的介紹:順序存儲結構是存儲結構類型中的一種,該結構是把邏輯上相鄰的結點存儲在物理位置上相鄰的存儲單元中,結點之間的邏輯關系由存儲單元的鄰接關系來體現。
簡單來說就是: 用一段連續的地址存放數據元素,數據間的邏輯關系和物理關系相同。
優點1:存儲密度大,空間利用度高,比鏈式存儲節約空間
優點2:存儲操作上方便操作,順序支持隨機存取,查找會比較容易
缺點1:插入或者刪除元素時不方便,花費的時間更多
概念:鏈式存儲結構,又叫鏈接存儲結構。在計算機中用一組任意的存儲單元存儲線性表的數據元素(這組存儲單元可以是連續的,也可以是不連續的).它不要求邏輯上相鄰的元素在物理位置上也相鄰.因此它沒有順序存儲結構所具有的弱點,但也同時失去了順序表可隨機存取的優點
優點1:插入或刪除時方便些,空間使用靈活
缺點1:存儲密度小,空間利用度低
缺點2:查找會相較順序存儲方式復雜一些,花費的時間會更多
這里我們先看圖,其實就是將想要插入的元素往鏈表的尾部插入,然後更新一下為節點tail的位置即可。
今天我們的老師將這個內容的時候耐消耐提到怎麼一句話昌春「誰想進來,誰就去找組織」看這個圖我想你應該可以理解這句話,首先第一步需要我們的「C」去找組織中的A,第二步是頭結點接到新元素C上。
要想移除單向鏈表中的一個元素,首先我們得找到被移除結點的前驅的位置,比如是pre「A」。當前移除的元素是remove「B」,讓pre->next = remove->next, 然後再執行remove->next = nil。經過上面這些步驟,B就與鏈表脫離關系了。
但是在網路上面看到怎麼一句話
鏈式的要比順序的方便(這句話是不能這么說的,因為插入的話順序表也很方便,問題是順序表的插入要執行更大的空間復雜度,包括一個從表頭索引以及索引後的元素後移,而鏈表是索引後,插入橋搜就完成了)
『肆』 線性表的存儲結構,在什麼情況下採用順序結構為什麼
看名字就差不多了吧
順序存儲結構就是用一組地址連續的存儲單元依次存儲該線性表中的各個元素。由於表中各個元素具有相同的屬性,所以佔用的存儲空間相同。因此,在內存中可以通過地址計算直接存取線性表中的任一元素。這種結構的特點是邏輯上相鄰的元素物理上也相鄰。用順序結構存儲的線性表稱作順序表。
線性表按鏈式存儲時,每個數據元素 (結點)的存儲包括數據區和指針區兩個部分。數據區存放結點本身的數據,指針區存放其後繼元素的地址 (沒有後繼元素時設置為空字元(Null).。只要知道該線性表的起始地址 (記錄在頭指針中),表中的各個元素就可通過其間的鏈接關系逐步找到