請忽視我的畫工~~1. 基本概念
1.1 概念
邏輯結構上乙個挨乙個的資料元素,但是物理儲存卻沒有占用一段連續空間的結構。
示意圖如下:
由上圖也可以看出,鍊錶節點的構成:資料域和指標域。
由上圖也可以看出,鍊錶的節點在記憶體是散亂分布的,想要找到後繼節點的辦法就是檢視當前節點的指標域儲存的位址。尾節點的指標域儲存null(null是記憶體中的乙個特殊位址,相當於0),表示它後面沒有節點了。
1.2 分類
鍊錶的分類既可以按照是否帶頭節點分為兩類,也可以根據指標域的區別分為三類。
也可以混在一起分為六類~~什麼是頭節點?
頭節點和普通的節點唯一的區別就是頭節點的資料域不存放鍊錶實際需要存放的資料(一般可以存放當前鍊錶的長度,也可以隨便存些什麼東西)
如下圖:
帶不帶頭節點有什麼區別?
網上的說法是:設定頭結點是為了保證處理第乙個節點和後面的節點的時候設計的演算法相同
實際上帶不帶區別不大。
單鏈表
上面那個示意圖就是單鏈表的邏輯模型,即只有乙個指標域,儲存後繼節點的位址。
雙鏈表
雙鏈表的指標域有兩個,乙個儲存前驅節點的位址,乙個儲存後繼節點的位址。鍊錶第乙個節點的前驅指標域儲存null。
雙向迴圈鍊錶
雙向迴圈鍊錶和雙鏈表的唯一區別就是第乙個節點的前驅指標域儲存鍊錶最後乙個節點的位址,最後乙個節點的後繼指標域儲存鍊錶第乙個節點的位址。
2.應用場所
鍊錶在軟體開發中使用到的頻率很高,我簡單的舉幾個例項:
使用場景:
定義節點
typedef
int datatype;
typedef
struct nodenode,
*pnode;
解釋一下:
眾所周知,typedef
是乙個重新命名的關鍵字,那麼**的含義就明顯了,將struct node
型別重新命名為node
, 將struct node *
重新命名為pnode
。
為什麼要這麼做呢?
因為c語言使用結構體變數型別定義變數時必須要加上struct
,(c++這點就比c做的好,因為可以不用加)為了後面書寫方便,所以將節點型別重新命名為乙個簡單易懂的名稱。
注:這個方法在開發中非常常見,讀者要仔細品味~
注:以下方法均以不帶頭節點的單鏈表為示例初始化
鍊錶的初始化就是將頭指標置空。這一步看似雞肋,但是如果沒有這一步,後面可能會出現很多奇奇怪怪的bug。
原因也不難分析,定義指標的時候如果不初始化,就會出現野指標問題。
void
initlist
(pnode *head)
頭插
頭插就是將新節點插入到鍊錶的頭部。
頭插的步驟:
void
headinsertlist
(pnode *head, datatype elem)
else
}
尾插
尾插就是將節點插入到鍊錶的尾部。
尾插步驟:
void
tailinsertlist
(pnode *head, datatype elem)
else
tmp->_next =
(pnode)
malloc
(sizeof
(node));
tmp->_next->_elem = elem;
tmp->_next->_next =
null;}
}
頭刪
頭刪就是刪除鍊錶第乙個節點。
頭刪步驟:
void
headdellist
(pnode *head)
else
}
尾刪
尾刪就是刪除鍊錶最後乙個節點。
尾刪步驟:
void
taildellist
(pnode *head)
else
tmp->_pre->_next =
null
;free
(tmp);}
}
指定插入
將資料插入到鍊錶中指定的位置。
步驟:
void
insertlist
(pnode *head, pnode pos, datatype elem)
elseif(
null
== tmp)
new_node->_next= tmp;
tmp_pre->_next = new_node;
}}
刪除指定
刪除鍊錶中指定的資料。
步驟:
void
deletelist
(pnode *head, datatype elem)
elseif(
null
== tmp)
tmp_pre->_next = tmp->_next;
free
(tmp);}
}
銷毀
銷毀鍊錶的步驟:
void
detmpoylist
(pnode* head)
else
*head =
null;}
}
Vi 簡易教程
vi file1 file2 此時,您會發現您面對如下視窗 圖 4.4.vim 開始 您現在是在開啟的第乙個檔案的最前面,並處於 命令模式 在此模式下,您不能往檔案中插入文字。要插入文字,您需要先切換到 插入模式 以下是一些插入文字的快捷方式 在插入模式中,您會在螢幕底部看到 插入 字串 提示您所處...
Vim簡易教程
vim時linux內建的一款可定製的文字編輯器,使用者可以根據自己的需求對其進行功能的補充。要對文字內容進行編輯,需要按下 i,i,o,o,a,a,r,r 這些鍵中的任意乙個,此時vi編輯器將處於編輯狀態,使用者便可對文字進行需要的修改。下面對這個開啟編輯模式的鍵進行簡單的介紹 命令含義 i進入編輯...
svn簡易教程
主要以debian linux 為例,使用以下命令安裝svn tl debian sudo apt get install subversion 安裝完成後,檢視安裝的svn版本 tl debian svn version tl debian mkdir svn tl debian svnadmin...