資料結構 陣列和廣義表

2021-09-06 15:36:46 字數 1365 閱讀 3511

感覺陣列這一段沒講什麼太多的東西。

先是講了下定義,就是每個維度上都有對應的前驅後繼,首尾元素例外。操作只有初始化 銷毀 取元素 修改元素。然後講了下適合用順序儲存結構,多維情況下根據下標(j1 j2 j3 ... jn)找到對應畫素的儲存位置 cn = l, ci-1 = bi * ci,  loc = loc基址 + σciji , l為每個元素儲存的單位。 然後給了些實現**。

新知識是: va_start( , );

va_arg( , );

va_end();

這三個可以用來處理變長參數列資訊。

接著就是講矩陣了。

首先是特殊矩陣的壓縮。對於有規律的特殊矩陣,如對角矩陣、下(上)三角矩陣,對角矩陣。可以根據規律將矩陣存在一維陣列中,建立起原始下標與壓縮後矩陣下標的對應關係就好。

對沒有規律的稀疏矩陣,只儲存稀疏矩陣的非0元。需要三元組表儲存(行、列、元素值)。根據三元組表的不同表示方式,得到稀疏矩陣不同的壓縮儲存方法。

①三元組順序表  以行序為主序排列。 就是用個陣列存起來,行號小的放前面。 講了下這種結構下轉置的操作,關鍵講了下如何在轉置後以行為主排序。又講了個快速轉置,就是儲存了原矩陣每一列首元素的位置和每一列元素個數,這樣就不用在之後排序了,直接放在對的位置就好了。

②行邏輯鏈結的順序表,就是把每行第乙個非0位置存了起來,為了方便抽取任意一行。講了兩個稀疏矩陣相乘的例子,說來說去就是為了去掉0與其他元素相乘這樣冗餘的計算需要行起始位置,具體沒看,太繁瑣。沒什麼新技術。

③十字鍊錶  在兩個稀疏矩陣相加時,非零元素數量變化可能很大,不宜採用順序儲存結構。 這種結構每個非零元有5個域(行、列、值、該行下一元素指標、該列下一元素指標) 用兩個一維陣列儲存每一行和每一列的頭結點。

廣義表 說白了,就是乙個表,表中的元素也可以是表。開始說表可以共享、可以遞迴但是後面的介紹都是在不可共享不可遞迴的前提下介紹的....表頭和表尾的定義也略奇怪。表頭很普通,就是第乙個元素。表尾居然是剩下的所有元素。定義結構時,用到了聯合跟列舉,感覺看了很有收穫。

typedef enum elemtag;

typedef struct glnodeptr; //也可能是另乙個廣義表

};}*glist;

講了m元多項式的表示,大概意思就是不斷的分解主變元,得到係數。如:

p=x10y3z2+2x6y3z2+3x5y2z2+x4y4z+6x3y4z+2yz+15

=((x10+2x6)y3+3x5y2)z2+((x4+6x3)y4+2y)z

這樣就可以用z的係數表示多項式,而z的係數又是y的多項式,y的係數又是x的多項式 這樣就可以用廣義表表示了。

之後講了下遞迴演算法求廣義表深度(括號重數)和廣義表複製,沒仔細看好繁瑣啊... 而且我在網上也沒查到什麼關於廣義表的應用,於是不想看了..

資料結構 陣列和廣義表

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

資料結構 陣列和廣義表

例 設有一 個二維陣列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...

資料結構 陣列 廣義表

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