我是荔園微風,作為一名在IT界整整25年的老兵,今天總結一下Visual C++環(huán)境下調試數(shù)據(jù)結構——線性表之順序存儲結構。?
線性表線性表(Linear List):有限多個相同類型的數(shù)據(jù)元素類(集合)線性表是最簡單、最基本的數(shù)據(jù)結構。通俗地講,線性表就是所有的節(jié)點按“一個連著一個”的方式組成的一個整體。
線性表主要的存儲結構有順序存儲結構和鏈式存儲結構。線性表的基本運算主要有創(chuàng)建線性表、求線性表長度、取第i個節(jié)點、插入數(shù)據(jù)元素、刪除數(shù)據(jù)元素、按值查找數(shù)據(jù)元素。在實際的算法實現(xiàn)中,這些基本運算一般會放入程序頭部進行說明,供程序員進行調用。
順序存儲結構常采用數(shù)組方式實現(xiàn)。一維數(shù)組形式的順序存儲結構具體如下所示。順序表使用一個連續(xù)存儲空間相繼存放線性表的各個節(jié)點。
a1? ?a2? ?a3? ?a4? ?......? ?an? ?......? ......數(shù)組是一種把相同類型的若干元素,有序地組織起來的集合。集合名就是數(shù)組名。組成數(shù)組的各個元素稱為數(shù)組元素。通過數(shù)組元素的位置序號(下標),可獲得某數(shù)組元素的地址,進而得到該數(shù)組元素的值。數(shù)組在數(shù)據(jù)結構中常常用來實現(xiàn)向量和矩陣。
數(shù)據(jù)結構中,數(shù)組的運算通常有兩個:
(1)給定數(shù)組的下標,存取相應的數(shù)據(jù)元素
(2)給定數(shù)組的下標,修改對應的數(shù)據(jù)元素的值。
數(shù)組的運算通常不涉及插入和刪除運算。
一維數(shù)組即數(shù)組中每個元素都只有一個下標的數(shù)組。兩個一維數(shù)組組成二維數(shù)組,n個一維數(shù)組組成n維數(shù)組。假定a是數(shù)組的首地址,L是數(shù)組元素的長度,行優(yōu)先存儲(先存儲第一行,然后存儲第二行,……,直至最后一行),則數(shù)組某元素的地址對應關系見下。
數(shù)組類型? ? ? ? ? 數(shù)組表示形式? ? ? ? ? 某元素對應的存儲地址 一維數(shù)組? ? ? ? ? a[n]? ? ? ? ? ? ? ? ? ? ? ? ? 元素a[i]的存儲地址:a+(i-1)*L 二維數(shù)組? ? ? ? ? a[m][n](m行n列)? ? ? ?元素a[i][j]的存儲地址:a+(i*n+j)*L2.稀疏矩陣稀疏矩陣即矩陣中0元素個數(shù)遠遠多于非0元素,并且非0元素分布沒有規(guī)律。稀疏矩陣可以采用三元組數(shù)組和十字鏈表兩種存儲方式,兩種方式均只存儲非0元素。
三元組數(shù)組:非0元素用三元組(行號、列號、值)表示,并全部存儲在數(shù)組中。這也完成了稀疏矩陣的壓縮。下面給出了一個稀疏矩陣用三元組數(shù)組表示的例子。
0? ?0? ?6? ?0? ?9? ?0
7? ?0? ?0? ?0? ?0? ?0
0? ?0? ?0? ?0? ?0? ?0
0? ?0? ?6? ?0? ?0? ?0
0? ?3? ?0? ?0? ?2? ?0
0? ?0? ?0? ?0? ?0? ?1
以上矩陣用三無組表示為:
(1? ?3? ?6)
(1? ?5? ?9)
(2? ?1? ?7)
(4? ?3? ?6)
(5? ?2? ?3)
(5? ?5? ?2)
(6? ?6? ?1)
十字鏈表:非0元素均為十字鏈表的一個節(jié)點,節(jié)點有5個域(行號、列號、值、行和列的后繼指針)。 常見的特殊稀疏矩陣有上三角、下三角和三對角矩陣。具體特點見下。
上三角矩陣(當i>j時,矩陣元素aij=0)
a11? ?a12? ?a13? ?a14? ?a15
0? ? ? ?a22? ?a23? ?a24? ?a25
0? ? ? ?0? ? ? ?a33? ?a34? ?a35
0? ? ? ?0? ? ? ?0? ? ? ?a44? ?a45
0? ? ? ?0? ? ? ?0? ? ? ?0? ? ? ?a55
矩陣元素aij對應一維數(shù)組下標:(2n-i+2)*(i-1)/2+j-i+1 化簡為 (2n-i)*(i-1)/2+j下三角矩陣(當i a11? ?0? ? ? ?0? ? ? ?0? ? ? ?0 a21? ?a22? ?0? ? ? ?0? ? ? ?0 a31? ?a32? ?a33? ?0? ? ? ?0 a41? ?a42? ?a43? ?a44? ?0 a51? ?a52? ?a53? ?a54? ?a55 三對角矩陣 a11? ?a12? ? 0??? ? ?0? ??? ?0?? a21? ?a22? ?a23? ??0? ? ? ?0 0? ? ? ?a32? ?a33? ?a34? ? 0 0? ? ? ?0? ? ? ?a43? ?a44? ?a45 0? ? ? ?0? ? ? ?0? ? ? ?a54? ?a55 順序表的特點是:邏輯相鄰的數(shù)據(jù)元素,物理結構必相鄰。 作者簡介:荔園微風,1981年生,高級工程師,浙大工學碩士,軟件工程項目主管,做過程序員、軟件設計師、系統(tǒng)架構師,早期的Windows程序員,Visual Studio忠實用戶,C/C++使用者,是一位在計算機界學習、拼搏、奮斗了25年的老將,經(jīng)歷了UNIX時代、桌面WIN32時代、Web應用時代、云計算時代、手機安卓時代、大數(shù)據(jù)時代、ICT時代、AI深度學習時代、智能機器時代,我不知道未來還會有什么時代,只記得這一路走來,充滿著艱辛與收獲,愿同大家一起走下去,充滿希望的走下去。 你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
網(wǎng)頁題目:VisualC++環(huán)境下調試數(shù)據(jù)結構——線性表(順序存儲結構)-創(chuàng)新互聯(lián)
URL分享:http://weahome.cn/article/ieegg.html