@toc
今天繼續複習線性表,到了較難的鍊錶部分。
首先來介紹線性表的鏈式儲存——鍊錶
線性表中每個結點有唯一的前驅節點和後繼結點
設計鏈式儲存結構是,每個結點單獨儲存,為了表示邏輯關係,增加了指標域
鍊錶分為單鏈表和雙鏈表
我們主要學習單鏈表
雙鏈表與單鏈表是相通的
單鏈表學好了 雙鏈表也自然不難
在設計單鏈表我們往往增加乙個頭結點
它的好處是:
到此開始介紹單鏈表
首先是單鏈表中結點型別linknode的定義
typedef
struct lnode
linknode;
這裡的elemtype可以是char或int等型別
根據實際所需而定
由此可得單鏈表的特點:
然後大致介紹一下單鏈表的插入和刪除結點
由於使用的是鍊錶 其過程與順序表有很大不同
了解之後 開始單鏈表的基本操作
建表createlist()
建立單鏈表有兩種方法,分別是頭插法和尾插法
頭插法的建表**如下
**實現:
void
createlistf
(linknode *
&l, elemtype a,
int n)
}
頭插法建表其結點次序與邏輯順序相反
因此在倒序時可以使用頭插法建表
接下來是尾插法建表
;}初始化線性表initlist()
該運算建立乙個空的單鏈表,即建立乙個頭結點
void
initlist
(linknode *
&l)
銷毀線性表destroylist()
釋放單鏈表l占用的記憶體空間。即逐一釋放全部結點的空間。
void
destroylist
(linknode *
&l)free
(pre)
;}
判線性表是否為空表listempty()
若單鏈表l沒有資料結點,則返回真,否則返回假
bool listempty
(linknode *l)
求線性表的長度listlength()
返回單鏈表l中資料結點的個數
int
listlength
(linknode *l)
return n;
}
輸出線性表displist()
逐一掃瞄單鏈表l的每個資料結點,並顯示各結點的data域值
void
displist
(linknode *l)
printf
("\n");
}
求線性表l中位置i的資料元素getelem()
在單鏈表l中從頭開始找到第i個結點,若存在第i個資料結點,則將其data域值賦給變數e
bool getelem
(linknode *l,
int i, elemtype &e)
if(p==
null
)return false;
else
}
按元素值查詢locateelem()
在單鏈表l中從頭開始找第1個值域與e相等的結點,若存在這樣的結點,則返回位置,否則返回0
int
locateelem
(linknode *l, elemtype e)
if(p==
null
)return0;
else
return i;
插入資料元素listinsert()
先在單鏈表l中找到第i-1個結點p,若存在這樣的結點,將值為e的結點s插入到其後
刪除資料元素listdelete()
先在單鏈表l中找到第i-1個結點*p,若存在這樣的結點,且也存在後繼結點,則刪除該後繼結點
好了 今天的內容到此為止
下篇就講述順序表和單鏈表的應用以及其他型別的鍊錶
謝謝**
資料結構複習之 線性表
線性表簡單地說就是資料元素的序列,即一對一關係 讀取 o 1 插入 刪除 o n 實現 package org.xiazdong.list public class myarraylist public myarraylist int length public myarraylist tarr e...
資料結構複習之線性表
基本概念 從邏輯上可以把資料結構分為線性結構和非線性結構兩大類。對於給定的n個元素,可以構造出的邏輯結構有 集合,線性結構,樹形結構,圖狀結構或網狀結構。乙個資料元素可以由若干個資料項組成。資料項是最小單位。線性表的順序表示指的是用一組位址連續的儲存單元依次儲存線性表的資料元素。構建乙個空的線性表 ...
複習資料結構 線性表
線性表實現 陣列方式 隨機訪問很快,常數級別。但是增刪慢了,n級別。預先要知道線性表的大小 鍊錶方式 隨機訪問不急,n級別。但是增刪快,常數級別。就是c 的new delete操作效能不怎樣,可以用free list來維護增刪的節點。對於new delete操作有5倍左右提公升吧。基於陣列 指標構造...