陣列一旦被定義,它的維數和維界就不再改變
採用順序結構儲存結構表示陣列
二維陣列的儲存方式:以行序為主(c語言);以列序為主
loc[i, j] == loc(0, 0) + (b2*i + j )*l
陣列是隨機儲存結構,由於計算各個元素儲存位置的時間相等,所以儲存陣列中任一元素的時間也相等。
壓縮儲存:為多個值相同的元只分配乙個儲存空間,對零元不分配空間
特殊矩陣:值相同的元素或零元素在矩陣分布中具有一定規律,反之為稀疏矩陣。
2.1 特殊矩陣
對稱矩陣:將個元素壓縮至n(n+1)/2個儲存空間
下三角矩陣(上)
對角矩陣
2.2 稀疏矩陣
在m*n的矩陣中,有t個元素不為0,矩陣的稀疏因子:
該值<=0.05時,稱為稀疏矩陣
稀疏矩陣的壓縮儲存: 記錄非零元的行列位置以及值
線性表的推廣
廣義表:
n 是廣義表ls的長度
在廣義表中,ai可以是單個元素(被稱為原子),也可以是廣義表(成為子表)。
當ls非空時,a1是表頭,其餘的(a2,…an)是ls的表尾。
3.1 廣義表的儲存結構
採用鏈式儲存結構,每個資料元素可用乙個節點表示。
兩種結構的節點:
1) 表結點:表示列表,分為標識域,指示表頭的標誌域,指示表尾的標誌域。
2) 原子結點:表示原子,分為標誌域和值域。
也可採用另一種方式儲存廣義表,在此不贅述。
3.2 廣義表的遞迴演算法
3.2.1 廣義表的深度
廣義表的深度定義為括號的重數。
若是原子,定義其深度為0,ls的深度為各個的深度中最大值加1.
空表也是廣義表,其深度為1。
將該問題轉換為遞迴問題,得到遞迴條件以及邊界:
dep(ls)= 1 ,ls為空
dep(ls)= 0 ,ls為原子
總結:dep(ls)= 1+max ,n>=1
3.2.2 複製廣義表
乙個非空廣義表均可分解為表頭和表尾,即一對確定的表頭和表尾可惟一確定乙個廣義表。
複製乙個廣義表只要分別複製表頭和表尾,然後合成即可
3.2.3 建立廣義表的儲存結構
兩種方法:
1. 將廣義表分為表頭和表尾
2. 將廣義表看成含有n個並列子表(將原子也看成表)的表
陣列和廣義表
一 陣列 陣列是一組型別相同的資料元素構成。有一維陣列 二維陣列 n 維陣列。一般實現時,可以過載操作符,比較方便一點。二 矩陣 1 矩陣的加減,需要兩個矩陣擁有相同的行列數才可以。對應各個位置分別進行計算 2 矩陣的相乘,需要第乙個陣的列數等於第二個的行數。如c 0,0 a 的第一列分別乘以 b的...
陣列和廣義表
陣列和廣義錶可看成是一種特殊的線性表,其特殊在於 表中的元素本身也是一種線性表。記憶體連續。根據下標在o 1 時間讀 寫任何元素。二維陣列,多維陣列,廣義表 樹 圖都屬於非線性結構 陣列的順序儲存 行優先順序 列優先順序。陣列中的任一元素可以在相同的時間記憶體取,即順序儲存的陣列是乙個隨機訪問結構。...
串 陣列和廣義表
1 串是內容受限的線性表,它限定了表中的元素為字元。申有兩種基本儲存結構 順序儲存和鏈式儲存,但多採用順序儲存結構。串的常用演算法是模式運配演算法,主要有bf演算法和kmp演算法。bf演算法實現簡單,但存在回溯,效率低。時間復豪度為o m n kmp演算法對bf演算法進行改進,消除回溯,提高了效率,...