資料結構與演算法 線性表

2021-10-07 21:55:22 字數 3432 閱讀 1299

1. 線性表

1.1 線性表的定義和基本運算

定義:線性表是具有相同資料型別的n個資料元素的有限序列。除表頭元素外,每個元素有且僅有乙個直接前驅;除表尾元素外,每個元素有且僅有乙個直接後繼。

特點:個數有限;具有邏輯上的順序性;資料元素型別都相同。

基本操作:初始化;求表長;按值查詢;按位查詢;插入;刪除;輸出;判空。

1.2 順序表

定義:用一組位址連續的儲存單元依次儲存線性表中的資料元素,從而使邏輯上相鄰的兩個元素在物理位置上也相鄰。

特點:表中元素的邏輯順序和物理順序相同。

優點:隨機訪問,即通過首位址和元素序號可以在o(1)內找到指定元素;儲存密度高。

缺點:插入和刪除操作需要移動大量元素。

儲存型別

#define maxsize 100

#define elemtype int

typedef

struct

sqlist;

基本操作

(1)插入:在順序表l的第i個位置插入新元素e。注意i的取值範圍為(1<=i<=l.length+1)。第i個元素及其後的所有元素都要後移乙個位置。要注意區分順序表的位序和陣列下標。

bool

listinsert

(sqlist& l,

int i, elemtype e)

平均時間複雜度為o(n)。

(2)刪除:刪除順序表l中第i個位置的元素,若成功返回true,並將被刪除的元素用引用變數e返回,否則返回false。注意i的範圍為1<=i<=l.length。

bool

listdelete

(sqlist& l,

int i, elemtype& e)

平均時間複雜度為o(n)。

(3)按值查詢:在順序表l中查詢第乙個元素值等於e的元素,並返回其位序。

int

listfind

(sqlist l, elemtype e)

return0;

}

平均時間複雜度為o(n)。

1.3 單鏈表

定義:通過一組任意的儲存單元來儲存線性表中的資料元素,並通過指標建立資料元素之間的邏輯關係。

優點:插入和刪除元素不需要移動元素,只要修改對應的指標即可。

缺點:不能隨機訪問,訪問元素時要遍歷單鏈表。

結點型別

typedef

struct lnodelnode,

*linklist;

基本操作

(1)頭插法建表

linklist list_headinsert

(elemtype *arr,

int n)

return l;

}

平均時間複雜度為o(n)。

(2)尾插法建表

linklist list_tailinsert

(elemtype *arr,

int n)

return l;

}

平均時間複雜度為o(n)。

(3)按序號查詢節點

lnode*

getelem

(linklist l,

int i)

return res;

}

平均時間複雜度為o(n)。

(4)按值查詢節點

lnode*

locateelem

(linklist l, elemtype e)

平均時間複雜度為o(n)。

(5)插入節點:找第i-1個節點,在它的後面插入新的節點

bool

linklistinsert

(linklist& l,

int i, elemtype e)

if(pre !=

nullptr

)else

return

false

;}

查詢第i-1個元素,時間複雜度為o(n),插入節點的時間複雜度為o(1).

改進:假設s是待插節點,要將s插入到p的前面,可以先將s插入到p的後面,再交換兩者元素的值。

(6)刪除節點

bool

linklistdelete

(linklist& l,

int i)

if(pre !=

nullptr

)else

return

false

;}

查詢第i-1個元素,時間複雜度為o(n),刪除節點的時間複雜度為o(1).

改進:要刪除p所指節點,將p後繼節點的值賦給自身,然後刪除後繼節點。

1.4 雙鏈表

單鏈表結點中只有乙個指向其後繼的指標,使得單鏈表只能從頭結點依次順序地向後遍歷。雙鏈表結點中有兩個指標prior和next,分別指向其前驅結點和後繼結點。

節點型別

typedef

struct dnodednode,

*dlinklist;

插入操作:在p所指結點之後插入節點s。

s-

>next = p-

>next;

p->next-

>prior = s;

s->prior = p;

p->next = s;

刪除操作:刪除p的後繼結點q。

p-

>next = q-

>next;

q->next-

>prior = p;

free

(q);

資料結構與演算法 線性表

概念 一種資料結構,每個結點最多只有乙個前驅結點和乙個後繼結點 類別 順序表 定長 鍊錶 變長 棧 棧頂刪除 彈棧 棧頂插入 壓棧 後進先出 lifo 佇列 隊頭刪除 出隊 隊尾插入 入隊 先進先出 fifo 線性表的抽象資料型別定義 c 1.template2.class list 棧的抽象資料型...

資料結構與演算法 線性表

n維向量 x1,x2,xn 是乙個長度為n的線性表 英文小寫字母表 a,b,c,z 是乙個長度為26的線性表 一年中的四個季節 春,夏,秋,冬 是乙個長度為4的線性表 矩陣是乙個比較複雜的線性表 學生情況登記表是乙個複雜的線性表 由若干資料項組成的資料元素稱為記錄 由多個記錄構成的線性表又稱為檔案 ...

資料結構與演算法 線性表

線性表 list 由零個或多個資料元素組成的有限序列。這裡需要強調幾個關鍵的地方 如果用數學語言來進行定義,可如下 若將線性表記為 a1,ai 1,ai,ai 1,an 則表中ai 1領先於ai,ai領先於ai 1,稱ai 1是ai的直接前驅元素,ai 1是ai的直接後繼元素。所以線性表元素的個數n...