線性表 順序表,鍊錶等)及其實現(C 版)

2021-10-25 14:39:14 字數 4000 閱讀 4615

線性表的實現方式有下面幾種

線性表的順序儲存是指在記憶體中用一塊位址連續的空間依次存放線性表的資料元素,用這種方式儲存的線性表叫順序表,它的實現主要依賴於陣列。

(1)空間上:

順序表的實現一般是實現連續開闢一段空間,然後在進行資料的增刪查改,所以當我們不知道要儲存多少資料時,用順序表來開闢的空間如果太大,就會造成一定程度上的浪費,

(2)時間上:

訪問隨機元素的時間複雜度:由於支援陣列下標訪問,所以順序表訪問隨機元素的時間複雜度是o(1)。

隨機位置插入、刪除元素的時間複雜度:

因為順序表的元素是連續儲存的,因此要在特定位置插入、刪除元素需要把它之後的元素全部後移或前移乙個元素的位置,時間開銷比較大

順序表的實現:

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.threading.tasks;

namespace _線性表

public

int capacity

//容量,用於擴容

public

selflist

(int size)

public

selflist()

public

tgetitem

(int index)

else

}//通過索引器訪問

public

tthis

[int index]

setelse}}

public

void

add(

t item)

arry[

count

]= item;

count++;}

public

void

insert

(int index,

t item)

for(

int i = count-

1; i >= index; i--

) arry[index]

= item;

count++;}

else

}public

intindexof

(t item)

}return-1

;}public

intlastindexof

(t item)

}return-1

;}public

void

removeat

(int index)

count--;}

else

}// compareto(object) 必須返回 int32 具有以下三個值之一的,如下表所示。

//註解

//「值」 含義

//小於零 當前例項 compareto 在排序順序中位於方法所指定的物件之前。

//等於零 前例項與方法所指定的物件在排序順序**現的位置相同 compareto 。

//大於零 此當前例項 compareto 在排序順序中跟隨方法所指定的物件之後。

public

void

sort()

}}}}

}

鍊錶是用一組任意的儲存單元來儲存線性表中的資料元素(這組儲存單元可以是連續的,也可以是不連續的)。在儲存資料元素時,除了儲存資料元素本身的資訊外,還要儲存與它相鄰的資料元素的儲存位址資訊。這兩部分資訊組成該資料元素的儲存映像,稱為結點(node)。把儲存據元素本身資訊的域叫結點的資料域,把儲存與它相鄰的資料元素的儲存位址資訊的域叫結點的引用域。

下圖是線性表(a1,a2,a3,a4,a5,a6)對應的鏈式儲存結構示意圖。

(1)空間上:

單鏈表則是一次只開闢乙個結點的空間,用來儲存當前要儲存的資料及指向下乙個結點或null的指標,但由於每次開闢的空間不是連續的,容易形成碎片空間,造成空間的浪費

(2)時間上:

**訪問隨機元素的時間複雜度:**單鏈表的資料是鏈式儲存的,它的元素是不支援隨機訪問的,想要知道某個元素,只能從頭結點開始遍歷整個鍊錶,直到找到了該元素為止。

所以單鏈表訪問隨機元素的平均時間複雜度是o(n)。

隨機位置插入、刪除元素的時間複雜度:

單鏈表在插入或刪除元素時,只需要改變它的前驅節點及插入或刪除元素的指向即可,所以單鏈表在插入隨機位置插入、刪除元素的時間複雜度是o(1)。

鏈式表的實現

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.threading.tasks;

namespace _線性表

public

int count

public

tgetitem

(int index)

return temp.deta;

}else

}//通過索引器訪問

public

tthis

[int index]

set temp.deta =

value;}

else}}

public

void

add(

t item)

else

temp.next = newnode;

} count++;}

public

void

insert

(int index,

t item)

else

node prenode = temp;

node currentnode = temp.next;

temp.next = newnode;

newnode.next = currentnode;

} count++;}

public

intindexof

(t item)

index++

; temp = temp.next;

}return-1

;}public

intlastindexof

(t item)

for(

int i = index-

1; i >=

0; i++)}

return-1

;}public

void

removeat

(int index)

else

node prenode = temp;

node nextnode = temp.next.next;

prenode.next = nextnode;

} count--;}

public

void

sort()

//氣泡排序

for(

int i =

0; i < count -

1; i++)}

}}}}

線性表及其實現

類項名稱 線性表 list 資料物件集 n個元素的構成的有序序列 n 0 操作集 l list,x elementtype,整線性表的基本操作主要有 如下 線性表的基本操作 list makeempty 初始化乙個空的線性表 elementtype findkth int k list l 返回位序...

線性表(順序表 鍊錶)

在程式中,經常需要將一組 通常是同為某個型別的 資料元素作為整體管理和使用,需要建立這種元素組,用變數記錄他們傳進傳出函式等。一組資料中包含的元素個數可能發生變化。對於這種需求,最簡單的解決方案就是將這樣一組元素看成乙個序列,用元素在序列裡的位置和順序,表示實際應用中的某種有意義的資訊,或者表示資料...

C語言,線性表 順序表 鍊錶

c語言資料結構中兩個常見的線性表,用來儲存資料等 一 建立順序表 定義 將線性表中的元素相繼存放在乙個連續的儲存空間中。可利用一維陣列描述儲存結構 特點 線性表的順序儲存方式 遍歷 順序訪問,可以隨機訪問 順序表 include define maxsize 100 定義陣列長度 define ok...