鏈式描述的線性表(使用指標)對比公式化線性表的優勢
鏈式描述的合併時間複雜度為o(1),在知道前驅的情況下,插入和刪除操作的時間複雜度為o(1)
插入、刪除操作用比較操作代替公式化線性表平均移動半個表的操作
有廣泛的應用例項,指標更靈活,不受空間連續性的限制。
很多很多…
鏈式描述的線性表的插入、刪除操作中內含的思想:
對鍊錶的操作往往涉及兩個指標,乙個指標指向首節點以防首位址丟失,另一指標在鍊錶的節點實現刪除、插入、合併等操作。比如為了儲存firstnode(即鍊錶的首位址),需要新建節點指標型別,即新建乙個指標,複製firstnode的位址,來遍歷鍊錶。多出的乙個指標,為鍊錶提供了更靈活的操作,比如實現鍊錶的延長、chain成員函式的箱子排序
利用c++的賦值運算子「=」,將右邊運算元的值傳給左邊運算元並儲存,且都為位址操作。
節點儲存有資料,我們操作的是指向節點的指標,通過指標來修改節點的data和指向的位址,多個指標可指向同一節點。
總結一下指標在鍊錶上的基本操作:
1. 延長鍊錶
/*
firstnode: 首節點的指標
addednode: 增加的節點的指標
toolnode: 在鍊錶上進行操作的節點指標,作用是實現在鍊錶上新增節點
*/// 將addednode1,加到firstnode的後面
toolnode = firstnode;
// ①
toolnode-
>next = addednode1;
// ② 新增節點完成
toolnode = toolnode-
>next;
// ③,這一步也可寫成toolnode = addednode1; 工具指標向前移動乙個節點,為下次新增節點做準備
//將addednode2加到addednode1後面,組成三個節點的鍊錶
toolnode-
>next = addednode2;
// ④
toolnode = toolnode-
>next;
// ⑤
2. 刪除鍊錶中的節點
/*
有三個節點,node1,node2,node3依次鏈結
假設我們要刪除node2,首先我們要定位到node1,使用for迴圈或迭代器
然後,*/
deletednode = node1-
>next;
// 此時要刪除的節點的位址成功被儲存
node1-
>next = node1-
>next-
>next;
// 此時鍊錶上node1->next和node2都指向node3,即使node3為空也沒關係,都指向空
delete deletednode; 刪除node2,此時只有node1-
>next指向node3,node2占用的空間和位址都莫得了
3. 兩個鍊錶的連線
在箱子排序中,把箱子中的節點收集到有序節點這一步,詳細**在《資料結構 c++描述》第二版p133,涉及四類指標的操作,這裡只分析合併操作(只是有點懶不想全碼下來嘿嘿,其實整個**都很優美,整體看下來是最好的)
/*
firstnode 指向首節點,作用是儲存連線後的鍊錶的首位址
toolnode 在鍊錶上進行操作的節點指標,在這裡用於連線兩個鍊錶的頭和尾,和延長鍊錶時的作用很相似
bottomnode 指向某一箱子鍊錶的底部的指標
topnode 指向某一箱子鍊錶的頂部的指標(與bottomnode為同一箱子鍊錶)
*/if
(toolnode == null)
firstnode = bottomnode;// 說明這是第乙個箱子,第乙個箱子的底部節點當然要儲存到firstnode上
else
toolnode -
>next = bottomnode;
// 此時鍊錶最頂部的節點的next已經連線到下乙個箱子鍊錶的底部節點,連線完成
toolnode = topnode;
// 指標移動到下一箱子鍊錶的頂部節點,為下一次合併準備
資料結構 五 線性表的鏈式儲存結構介紹
順序結構插入和刪除需要大量移動元素,能不能想辦法解決呢?產生這種情況的根本原因是邏輯上相鄰的元素在儲存空間上也相鄰。順序儲存需要一塊連續的空間,那如果我們只有零散的空間呢?解決這兩個問題,我們可以考慮使用鏈式儲存。線性表的鏈式儲存是指通過一組任意的儲存單元來儲存線性表中的資料元素。為了建立起資料元素...
資料結構之線性表(C ) 鏈式描述
一般分為單鏈表,雙鏈表和迴圈鍊錶 單向或雙向 單鏈表結構是每個節點只有乙個鏈,例如 迴圈鍊錶是單鏈表的一種變種,單鏈表是將尾節點置為null,而迴圈鍊錶是將尾節點指向頭結點。定義節點的結構 template struct chainnode chainnode const t element cha...
資料結構(五) 線性表之靜態鍊錶
我們先來說說什麼是靜態鍊錶,用乙個陣列來模擬鍊錶儲存元素,陣列中的元素都是由兩個資料域組成,data 和 cur。也就是說,陣列的每個下標都對應乙個data和乙個 cur。資料域data,用來存放資料元素,也就是通常我們要處理的資料 而游標 cur 相當於單鏈表中的 next 指標,存放該元素的後繼...