感覺陣列這一段沒講什麼太多的東西。
先是講了下定義,就是每個維度上都有對應的前驅後繼,首尾元素例外。操作只有初始化 銷毀 取元素 修改元素。然後講了下適合用順序儲存結構,多維情況下根據下標(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...
資料結構 陣列 廣義表
陣列,是有序的元素序列。若將有限個型別相同的變數的集合命名,那麼這個名稱為陣列名。組成陣列的各個變數稱為陣列的分量,也稱為陣列的元素,有時也稱為下標變數。用於區分陣列的各個元素的數字編號稱為下標。陣列是在程式設計中,為了處理方便,把具有相同型別的若干元素按無序的形式組織起來的一種形式。這些無序排列的...