陣列和廣義表,可看成是一種擴充套件的線性資料結構。
(1)陣列
1從邏輯結構上看,陣列可以看成是一般線性表的擴充。一維陣列即為線性表,二維陣列可定義為「其資料元素為一維陣列(線性表)」的線性表。
2陣列是一組有固定個數的元素的集合。對陣列的操作不像對線性表的操作那樣可以在表中任意乙個合法的位置插入或刪除乙個元素。對於陣列的操作一般只有兩類:1.獲得特定位置的元素值;2.修改特定位置的元素值。其本質上是位址計算問題。
3陣列的順序儲存結構有兩種:一種是按行序儲存;一種是按列序儲存
4根據陣列的下標,可以計算出其在儲存器中的位置。因此,陣列的順序儲存是一種隨機訪問的結構。
5位址計算
(1)一維陣列的位址計算
loc(a[i])=loc(a[1])+(i-1)size
(2)二維陣列的位址計算
loc(a[i][j])=loc(a[1][1])+(n(i-1)+j-1)size
(3)三維陣列的位址計算
loc(a[i][j][k])=loc(a[1][1][1])+(mn*(i-1)+n*(j-1)+(k-1))*size
<1>規律分布特殊矩陣的壓縮儲存
三角矩陣
分為上三角、下三角和對稱矩陣。三角矩陣a的元素個數為1+2+3…+n=n(n+1)/2
下三角矩陣壓縮形式:
loc[i,j] = loc[1,1]+(i*(i-1)/2+j-1)
將n²個元素壓縮到n(n+1)/2個空間
a[i][j]儲存到b[k]中對應關係:a[i
][j]
=&0&&i=j \end \right.
a[i][j
]=triple;
typedef
struct
tsmatrix;矩陣轉置運算
演算法思路:把位於(row, col)位置上的元素換到(col, row)位置上,即把元素的行列互換。
''
'source 和dest 分別為被轉置的矩陣和轉置以後的矩陣(二維陣列表示)'
''void
transmatrix
(elementtype source[m]
[n],elementtype dest[n]
[m])
三元組表轉置
實現轉置方法如下:1.原表a行列互換得到轉置b 。2.b按b的行下標以遞增順序重新排序
a.列序遞增轉置法
演算法思想:1.找第一行全部元素:第一遍從頭至尾掃瞄三元組表a 找出所有col 為1的三元組,轉置後按順序送到三元組中。以此類推,找到k行(1<=k<=a.n)
為實現處理設定存放當前位置計數器j,用於指向當前轉置後元素應放入三元組表b中的位置下標,j 初值為1,處理完乙個元素後j+1.
void
transposetsmatrix
(tsmatrix a, tsmatrix *b)}}
}}
演算法的時間耗費主要是在雙重迴圈中,其時間複雜度為o(a.n×a.len),最壞情況下,當a.len=a.m×a.n時,時間複雜度為o(a.m×a.n2)。採用正常方式實現矩陣轉置的演算法時間複雜度為o(a.m×an)。因此,三元組表示法僅使用與儲存稀疏矩陣
b.一次定位快速轉置法
演算法思想:設兩個陣列num和position,其中num[col]用來存放三元組表a中第col列中非零元素個數(三元組表b中第col行非零元素的個數),position[col]用來存放轉置前三元組表a中第col列**置後三元組表b中第col行)中第乙個非零元素在三元組表b中的正確位置。
num[col]的計算方法,將三元組表a掃瞄一遍,對於其中列號為col的元素,給相應的num陣列中col的元素加1;
position[col]的計算方法:position[1]=1表示三元組表a中列值為1的第乙個元素在三元組表b中的下標值,position[col]=position[col-1]+num[col-1],其中2<=col<=a.n
position[col]的初值為三元組表a中第col列中第乙個非0元素的正確位置,當三元組表a中第col列有乙個元素加入到三元組表b時,position[col]=position[col]+1 即令position[col]始終指向三元組表a中第col列中下乙個非0元素在三元組表b中的正確存放位置。
void
fasttransposetsmatrix
(tsmatrix a, tsmatrix *b)
}}
時間複雜度為o(a.len+a.n) 資料結構期末複習第五章陣列和廣義表
資料結構期末複習第五章 陣列和廣義表 二維陣列a m n 按行優先 定址計算方法,每個陣列元素佔據d 個位址單元。設陣列的基址為loc a11 loc aij loc a11 i 1 n j 1 d 設陣列的基址為loc a00 loc aij loc a00 i n j d 二維陣列a m n 按...
第五章 陣列和廣義表(1)
1 陣列的定義 陣列 由一組名字相同,下表不同的標量構成 注意 本章所討論的陣列與高階語言中的陣列有所區別 高階語言中的陣列的順序結構 而本章的陣列既可以順序的,也可以是鏈式結構,使用者可根據需要選擇。2 陣列的結構 1 陣列中各元素具有統一的型別 2 陣列元素的下標一般具有固定的上界和下界,即陣列...
資料結構(第五章)
樹下 第一講一.堆 什麼是堆?在講堆之前,我們先看看什麼是優先佇列。優先佇列 是一種特殊的佇列,從名稱上看,優先,顧名思義,取出的元素是按照一定的優先順序出隊的,而不是元素進入佇列的先後順序。優先佇列的完全二叉樹表示 堆的兩個特性 結構性 用陣列表示的完全二叉樹。有序性 任一結點的關鍵字是其子樹所有...