為了表示每個資料元素與其直接後繼資料元素之間的邏輯關係,除了儲存本身的資訊之外,還需儲存乙個指示其直接後繼的資訊(即直接後繼的儲存位置)。
我們把儲存資料元素資訊的位置稱為資料域,把儲存其直接後繼資訊的位置稱為指標域。這兩部分組成資料元素的結點(node)。
頭結點頭結點是為了操作的統一和方便而設立的,放在第一元素的節點之前,其資料域一般無意義;
有了頭結點,對在第乙個元素結點前插入和刪除第乙個結點的操作就與其他結點的操作統一了;
頭結點不是鍊錶的必須要有的;
頭指標頭指標是指指向鍊錶第乙個結點的指標,若煉表有頭結點,則是指向頭結點的指標;
無論鍊錶是否為空,頭指標均不為空。頭指標是鍊錶的必要元素;
typedef
int datetype;
//鍊錶結點
typedef
struct listnode
listnode;
插入操作
尾插思路:申請乙個新節點newnode,判斷單鏈表是否為空,若為空則直接插入*pplist=newnode,若不為空則尋找單鏈表的表尾(定義乙個tail指標遍歷鍊錶,若tail->next=null則表示tail是單鏈表的表尾)再將新節點插入。
void
listpushback
(listnode*
* pplist, datetype x)
else
//若不為空,尋找鍊錶位進行插入操作
//尾部插入新結點
tail->next = newnode;
}}
頭插
思路:建立乙個新節點newnode ,讓newnode的next指向原來的單鏈表頭pplist,pplist指向新建立的結點。
void
listpushfront
(listnode*
* pplist, datetype x)
}
刪除操作
尾刪思路:定義兩個指標,乙個pre初始化為null用來在遍歷時找到單鏈表的前乙個結點,另乙個tail初始化指向單鏈表的表頭用來在遍歷時找到單鏈表的表尾;判斷單鏈表的結點個數,若單鏈表為空或者只有乙個結點,則直接*pplist=null,若單鏈表有多個結點,則遍歷找到表尾和表尾的前乙個指標,將新的表尾置空,釋放原來的表尾結點。
void
listpopback
(listnode*
* pplist)
else
//2.鍊錶有多個結點
//將新的表尾置空
pre->next =
null
;//釋放掉原來的表尾結點
free
(tail);}
}
頭刪
思路: 判斷鍊錶的結點個數,1、鍊錶為空,直接return,2、鍊錶只有乙個結點,刪除這個結點,將來鍊錶置空,3、鍊錶有個結點,定義乙個指標next指向煉表頭結點的下乙個結點,刪除頭結點,重新定義鍊錶的頭;
void
listpopfront
(listnode*
* pplist)
//2、只有乙個結點
else
if(plist->next ==
null
)//3、正常情況
else
}
查詢操作
思路:按值查詢,定義乙個指標cur遍歷單鏈表進行查詢。
listnode*
listfind
(listnode* plist, datetype x)
cur = cur->next;
}return
null
;}
將單鏈表中終端節點的指標域由空指標改為指向頭結點,就使整個單鏈表形成乙個環,這種頭尾相接的單鏈表稱為單迴圈鍊錶,簡稱迴圈鍊錶(circular linked list)。
雙向鍊錶(doouble linked list)實在單鏈表的每個結點中,再設定乙個指向其前驅結點的指標域。所以再雙向鍊錶中有兩個指標域,乙個指向直接後繼,乙個指向直接前驅。
//帶頭結點雙向迴圈鍊錶
typedef
int datatype;
typedef
struct listnode
listnode;
插入操作
尾插
void
listpushback
(listnode* phead, datatype x)
頭插void
listpushfront
(listnode* phead, datatype x)
刪除操作
尾刪
void
listpopback
(listnode* phead)
頭刪void
listpopfront
(listnode* phead)
資料結構 鏈式儲存線性表
鏈式儲存結構的線性表 簡稱為鍊錶 將採用一組位址任意的儲存單元存放線性表中的資料元素,鏈式結構的線性表不會按線性的邏輯順序來儲存資料元素,它需要在每乙個資料元素裡儲存乙個引用下乙個資料元素的引用。優點 插入 刪除元素快,充分利用計算機記憶體空間 缺點 查詢元素需要整體遍歷,空間開銷大 單鏈表 cre...
資料結構 線性表之鏈式儲存結構
資料結構定義 common.h ifndef hi comm h define hi comm h include include include include define list init size 100 線性表儲存空間的初始分配量 define list increment 10 線性表...
資料結構 線性表(順序儲存與鏈式儲存)
所謂的線性表是資料結構的一種。定義為零個或者多個資料元素的有限序列。線性表分為順序儲存結構與鏈式儲存結構。1 順序儲存結構通俗來說就是我們平常熟悉的陣列,他就是一種典型的順序儲存結構。我們都知道陣列有自己的長度,並且一旦長度確定後不可以進行改變 不是絕對的 說起順序儲存結構 陣列 我們就應該考慮一下...