一維陣列的儲存結構:
對應一維陣列,按元素順序儲存到一塊位址連續的記憶體單元中。假設第乙個元素a1的儲存位址用loc(ai)表示,每個元素占用k個儲存單元,則任一陣列元素ai的儲存單元loc(ai)即可由以下公式求出:
loc(ai)=loc(a1)+(i-1)x k (2≤i≤n)
該式說明一維陣列中任一元素的儲存位址可直接計算得到,即一維陣列中的任一元素可直接訪問,因此,一維陣列具有隨機儲存特性。
二維陣列的儲存結構(按行優先存放):
假設第乙個元素a1,1的儲存位址用loc(a1,1)表示,每個元素占用k個儲存單元,則該二維陣列中的任一元素ai,j的儲存位址可由下式確定:
loc(ai,j)=loc(a1,1)+[(i-1) x n+(j-1)] x k
二維陣列的儲存結構(按列優先存放):
假設第乙個元素a1,1的儲存位址用loc(a1,1)表示,每個元素占用k個儲存單元,則該二維陣列中的任一元素ai,j的儲存位址可由下式確定:
loc(ai,j)=loc(a1,1)+[(j-1) x m+(i-1)] x k
當乙個階數較大的矩陣中的非零元素個數s相對於矩陣元素的總個數t非常小時,即s<<t時,稱該矩陣為稀疏矩陣。
把稀疏矩陣的三元組線性表按順序儲存結構儲存,則稱為稀疏矩陣的三元組順序表,簡稱為三元租表。三元組順序表的資料型別宣告:
#define m 《稀疏矩陣行數》
#define n 《稀疏矩陣列數》
#define maxsize 《稀疏矩陣中非零元素最多的個數》
typedef
struct
tupnode;
//三元組型別
typedef
struct
tsmaxsize;
//三元順序表的型別
#define m 《稀疏矩陣行數》
#define n 《稀疏矩陣列數》
#define max((m)>(n)?(m):(n))
//矩陣行列較大者
typedef
struct
tag;
}maxnode;
//十字鍊錶的結點型別
廣義表是線性表的推廣,是有限個元素的序列,其巡邏結構採用括號表示法如下:
gl=(a1,a2,……ai,……,an)
其中n表示廣義表的長度,即廣義表中所含元素的個數,n≥0。若n=0,稱為空表。ai為廣義表的第i個元素,如果ai屬於原子型別(原子型別的值是不可分解的,如整型,實型,字元型等),稱為廣義表gl的原子;如果ai又是乙個廣義表,稱為廣義表gl的子表。
廣義表具有的特性:
廣義表中的資料元素是有相對次序的
廣義表的長度定義為最外層包含元素的個數
廣義表的深度定義為所含括弧的重數,其中原子的深度為0,空表的深度為1
廣義表可以共享,乙個廣義表可以被其他廣義表共享,這種共享廣義表稱為再人表
廣義表可以是乙個遞迴的表,乙個廣義表可以是自己的子表,這種廣義表稱為遞迴表。遞迴表的深度是無窮值,而長度是有限值。
廣義表是一種遞迴的資料型別,因此很難為每個廣義表分配固定大小的匹配空間,所以其儲存結構只好採用鏈式儲存結構。
廣義表結點型別glnode宣告:
typedef struc val;
struct lnode *link;
} glnode;
資料結構 陣列和廣義表
感覺陣列這一段沒講什麼太多的東西。先是講了下定義,就是每個維度上都有對應的前驅後繼,首尾元素例外。操作只有初始化 銷毀 取元素 修改元素。然後講了下適合用順序儲存結構,多維情況下根據下標 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...