資料結構 陣列 廣義表

2021-09-26 21:25:31 字數 1598 閱讀 8072

陣列,是有序的元素序列。 若將有限個型別相同的變數的集合命名,那麼這個名稱為陣列名。組成陣列的各個變數稱為陣列的分量,也稱為陣列的元素,有時也稱為下標變數。用於區分陣列的各個元素的數字編號稱為下標。陣列是在程式設計中,為了處理方便, 把具有相同型別的若干元素按無序的形式組織起來的一種形式。 這些無序排列的同類資料元素的集合稱為陣列。

陣列是用於儲存多個相同型別資料的集合。

陣列是在記憶體中儲存相同資料型別的連續的空間,宣告乙個陣列就是在記憶體空間中劃出一串連續的空間

陣列的使用陣列長度一旦宣告,不可改變不可追加。陣列是一種線性表資料結構,它用一組連續的記憶體空間,來儲存一組具有相同型別的資料。

宣告陣列:

string str=new string;      //string 型別

int arr=new int[13];//int 型別 定義乙個長度為13的陣列

優缺點:缺點

插入效率低,因為陣列要保證插入後資料的連續性,需要將插入位置後面的資料依次向後進行移動,所以插入的效率很低。插入時最好的情況是在陣列末尾插入,時間複雜度為o(1);最壞的情況是在陣列起始位置插入,時間複雜度為o(n);插入的平均時間複雜度為 (1+2+…+n)/n = o(n)。

廣義表(lists,又稱列表)是一種非線性的資料結構,是線性表的一種推廣。即廣義表中放鬆對錶元素的原子限制,容許它們具有其自身結構。它被廣泛的應用於人工智慧等領域的表處理語言lisp語言中。

廣義表的定義如下:它是n(n>0)個資料元素a0,a1,……,an-1組成的有限序列,記為glist=(a0,a1,……,an-1),其中,ai(0<=i

廣義表的資料結構:

廣義表節點(data資料域,child子表位址域,next後繼結點位址域)

舉例:已知三個有名廣義表

l(a,b)

t(c,l(a,b))

g(d,l(a,b),t(c,l(a,b)))

g的儲存結構如下:

為什麼需要頭節點?便於在表頭增加刪除結點。如果不要頭結點,那麼對廣義表的表頭新增刪除,將可能影響其他廣義表中元素。比如,上面g的儲存結構改為不要頭結點的方式。如下:

如果此時通過g訪問子表l並刪除l中的第乙個結點a後,g中l結點的child指向原a結點的後繼結點b。而這樣的刪除並沒有影響到t表中的l結點的child域。如下:

資料結構 陣列和廣義表

感覺陣列這一段沒講什麼太多的東西。先是講了下定義,就是每個維度上都有對應的前驅後繼,首尾元素例外。操作只有初始化 銷毀 取元素 修改元素。然後講了下適合用順序儲存結構,多維情況下根據下標 j1 j2 j3 jn 找到對應畫素的儲存位置 cn l,ci 1 bi ci,loc loc基址 ciji l...

資料結構 陣列和廣義表

陣列長度固定,元素型別一致,沒有鏈式映像,因為不能保證位址連續 陣列與線性表的區別與聯絡 相同點 都是相同資料型別的的資料元素組成的有限序列 不同點 陣列要求位址連續,而線性表則無此要求 線性表的元素是邏輯意義上不可再分的,而陣列中每乙個元素還可以是乙個陣列 多維陣列可分 操作上的不同,陣列一旦被定...

資料結構 陣列和廣義表

例 設有一 個二維陣列a m n 按行優先順序儲存,假設a 0 0 存 放位置在644 10 a 2 2 存放位置在676 10 每個元素佔乙個空間,問a 3 3 10 存放在什麼位置?腳注10表示用10進製表示。設陣列元素a i j 存放在起始位址為loc i,j 的儲存單元中 loc 2,2 l...