陣列和廣義表

2022-02-15 06:20:22 字數 1654 閱讀 7393

陣列和廣義錶可看成是一種特殊的線性表,其特殊在於: 表中的元素本身也是一種線性表。記憶體連續。根據下標在o(1)時間讀/寫任何元素。

二維陣列,多維陣列,廣義表、樹、圖都屬於非線性結構

陣列的順序儲存:行優先順序;列優先順序。陣列中的任一元素可以在相同的時間記憶體取,即順序儲存的陣列是乙個隨機訪問結構。

關聯陣列(associative array),又稱對映(map)、字典( dictionary)是乙個抽象的資料結構,它包含著類似於(鍵,值)的有序對。 不是線性表。

矩陣的壓縮:

對稱矩陣、三角矩陣:直接儲存矩陣的上三角或者下三角元素。注意區分i>=j和i

廣義表(lists,又稱列表)是線性表的推廣。廣義表是n(n≥0)個元素a1,a2,a3,…,an的有限序列,其中ai或者是原子項,或者是乙個廣義表。若廣義表ls(n>=1)非空,則a1是ls的表頭,其餘元素組成的表(a2,…an)稱為ls的表尾。廣義表的元素可以是廣義表,也可以是原子,廣義表的元素也可以為空。表尾是指除去表頭後剩下的元素組成的表,表頭可以為表或單元素值。所以表尾不可以是單個元素值。

例子:a=()——a是乙個空表,其長度為零。

b=(e)——表b只有乙個原子e,b的長度為1。

c=(a,(b,c,d))——表c的長度為2,兩個元素分別為原子a和子表(b,c,d)。

d=(a,b,c)——表d的長度為3,三個元素都是廣義 表。顯然,將子表的值代入後,則有d=(( ),(e),(a,(b,c,d)))。

e=(a,e)——這是乙個遞迴的表,它的長度為2,e相當於乙個無限的廣義表e=(a,(a,(a,(a,…)))).

三個結論:

廣義表的元素可以是子表,而子表的元素還可以是子表。由此,廣義表是乙個多層次的結構,可以用圖形象地表示

廣義錶可為其它表所共享。例如在上述例4中,廣義表a,b,c為d的子表,則在d中可以不必列出子表的值,而是通過子表的名稱來引用。

廣義表的遞迴性

考點:廣義表是0個或多個單因素或子表組成的有限序列,廣義表可以是自身的子表,廣義表的長度n>=0,所以可以為空表。廣義表的同級元素(直屬於同乙個表中的各元素)具有線性關係

廣義表的表頭為空,並不代表該廣義表為空表。廣義表()和(())不同。前者是長度為0的空表,對其不能做求表頭和表尾的運算;而後者是長度為l的非空表(只不過該表中惟一的乙個元素是空表),對其可進行分解,得到的表頭和表尾均是空表()

已知廣義表ls=((a,b,c),(d,e,f)),運用head和tail函式取出ls中原子e的運算是head(tail(head(tail(ls)))。根據表頭、表尾的定義可知:任何乙個非空廣義表的表頭是表中第乙個元素,它可以是原子,也可以是子表,而其表尾必定是子表。也就是說,廣義表的head操作,取出的元素是什麼,那麼結果就是什麼。但是tail操作取出的元素外必須加乙個表——「()「。tail(ls)=((d,e,f));head(tail(ls))=(d,e,f);tail(head(tail(ls)))=(e,f);head(tail(head(tail(ls))))=e。

二維以上的陣列其實是一種特殊的廣義表

在(非空)廣義表中:1、表頭head可以是原子或者乙個表 2、表尾tail一定是乙個表 3.廣義表難以用順序儲存結構 4.廣義表可以是乙個多層次的結構

陣列和廣義表

一 陣列 陣列是一組型別相同的資料元素構成。有一維陣列 二維陣列 n 維陣列。一般實現時,可以過載操作符,比較方便一點。二 矩陣 1 矩陣的加減,需要兩個矩陣擁有相同的行列數才可以。對應各個位置分別進行計算 2 矩陣的相乘,需要第乙個陣的列數等於第二個的行數。如c 0,0 a 的第一列分別乘以 b的...

陣列和廣義表

陣列一旦被定義,它的維數和維界就不再改變 採用順序結構儲存結構表示陣列 二維陣列的儲存方式 以行序為主 c語言 以列序為主 loc i,j loc 0,0 b2 i j l 陣列是隨機儲存結構,由於計算各個元素儲存位置的時間相等,所以儲存陣列中任一元素的時間也相等。壓縮儲存 為多個值相同的元只分配乙...

串 陣列和廣義表

1 串是內容受限的線性表,它限定了表中的元素為字元。申有兩種基本儲存結構 順序儲存和鏈式儲存,但多採用順序儲存結構。串的常用演算法是模式運配演算法,主要有bf演算法和kmp演算法。bf演算法實現簡單,但存在回溯,效率低。時間復豪度為o m n kmp演算法對bf演算法進行改進,消除回溯,提高了效率,...