首页
/
每日頭條
/
科技
/
數據結構中怎麼表示數組
數據結構中怎麼表示數組
更新时间:2025-11-22 07:24:51

數組的基本概念

數組是一個二元組(idx,value)的集合,對每個idx,都有一個value值與之對應。idx稱為下标,可以由一個整數、兩個整數或多個整數構成,下标含有d(d≥1)個整數稱為維數是d。

數組按維數分為一維、二維和多維數組。

一維數組A是n(n>1)個相同類型元素a0,a1,…,an-1構成的有限序列,其邏輯表示為A=(a0,a1,…,an-1),其中,A是數組名,ai(0≤i≤n-1)是數組A中序号為i的元素。

一個二維數組可以看作是每個數據元素都是相同類型的一維數組的一維數組。

以此類推

數據結構中怎麼表示數組(數據結構串和數組)1

數組具有以下特點

(1)數組中各元素都具有統一的數據類型。

(2)d(d≥1)維數組中的非邊界元素具有d個前驅元素和d個後繼元素。

(3)數組維數确定後,數據元素個數和元素之間的關系不再發生改變,特别适合于順序存儲。

(4)每個有意義的下标都存在一個與其相對應的數組元素值。

d維數組抽象數據類型

數據結構中怎麼表示數組(數據結構串和數組)2

數組的主要操作是存取元素值,沒有插入和删除操作,所以數組通常采用順序存儲方式來實現。

一維數組

一維數組的所有元素依邏輯次序存放在一片連續的内存存儲單元中。

其起始地址為第一個元素a0的地址即LOC(a0)。

假設每個數據元素占用k個存儲單元。

則任一數據元素ai的存儲地址LOC(ai)就可由以下公式求出

數據結構中怎麼表示數組(數據結構串和數組)3

d維數組

mn列的二維數組Am×n=(aij)為例讨論(二維數組也稱為矩陣)。

數據結構中怎麼表示數組(數據結構串和數組)4

按行優先存儲

假設每個元素占k個存儲單元,LOC(a0,0)表示a0,0元素的存儲地址。對于元素aij

ai,j前面有0~i-1共i行,每行n個元素,共有i×n個元素。

在第i行中前面有a[i,0..j-1],共j個元素。

合起來,ai,j前面有i×n j個元素。

數據結構中怎麼表示數組(數據結構串和數組)5

按列優先存儲

假設每個元素占k個存儲單元,LOC(a0,0)表示a0,0元素的存儲地址。對于元素aij

ai,j前面有0~j-1共j列,每列m個元素,共有j×m個元素。

在第j列中前面有a[0..i-1,j],共i個元素。

合起來,ai,j前面有j×m i個元素。則:

數據結構中怎麼表示數組(數據結構串和數組)6

數據結構中怎麼表示數組(數據結構串和數組)7

例子:設有二維數組a[1..50,1..80],其a[1][1]元素的地址為2000,每個元素占2個存儲單元,若按行優先存儲,則元素a[45][68]的存儲地址為多少?若按列優先存儲,則元素a[45][68]的存儲地址為多少?

按行優先存儲

元素a[45][68]前面有1~44行,每行80個元素,計44×80個元素。

在第45行中,元素a[45][68]前面有a[45][1..67]計67個元素,這樣元素a[45][68]前面存儲的元素個數=44×80 67。

LOC(a[45][68])=2000 (44×80 67)×2=9174。

例子:設有二維數組a[1..50,1..80],其a[1][1]元素的地址為2000,每個元素占2個存儲單元,若按行優先存儲,則元素a[45][68]的存儲地址為多少?若按列優先存儲,則元素a[45][68]的存儲地址為多少?

按列優先存儲

元素a[45][68]前面有1~67列,每列50個元素,計67×50個元素。

在第68列中,元素a[45][68]前面有a[1..44][68]計44個元素,這樣元素a[45][68]前面存儲的元素個數=67×50 44。

LOC(a[45][68])=2000 (67×50 44)×2=8788。

特殊矩陣的壓縮存儲

數據結構中怎麼表示數組(數據結構串和數組)8

對稱矩陣的壓縮存儲

數據結構中怎麼表示數組(數據結構串和數組)9

數據結構中怎麼表示數組(數據結構串和數組)10

數據結構中怎麼表示數組(數據結構串和數組)11

三角矩陣的壓縮存儲

數據結構中怎麼表示數組(數據結構串和數組)12

數據結構中怎麼表示數組(數據結構串和數組)13

數據結構中怎麼表示數組(數據結構串和數組)14

數據結構中怎麼表示數組(數據結構串和數組)15

對角矩陣的壓縮存儲

數據結構中怎麼表示數組(數據結構串和數組)16

數據結構中怎麼表示數組(數據結構串和數組)17

稀疏矩陣

一個階數較大的矩陣中的非零元素個數s相對于矩陣元素的總個數t十分小時,即s<<t時,稱該矩陣為稀疏矩陣。

例如一個100×100的矩陣,若其中隻有100個非零元素,就可稱其為稀疏矩陣。

稀疏矩陣和特殊矩陣的不同點:

特殊矩陣的特殊元素(相同元素、常量元素)分布有規律。

稀疏矩陣的特殊元素(非0元素)分布沒有規律。

稀疏矩陣的三元組表示

數據結構中怎麼表示數組(數據結構串和數組)18

三元組表示中每個元素的類定義如下:

數據結構中怎麼表示數組(數據結構串和數組)19

設計稀疏矩陣三元組存儲結構類TupClass如下:

數據結構中怎麼表示數組(數據結構串和數組)20

TupClass類中包含如下基本運算方法:

其中,data列表用于存放稀疏矩陣中所有非零元素,通常按行優先順序排列。這種有序結構可簡化大多數稀疏矩陣運算算法。

數據結構中怎麼表示數組(數據結構串和數組)21

稀疏矩陣的十字鍊表表示

每個非零元素對應一個結點

數據結構中怎麼表示數組(數據結構串和數組)22

每行的所有結點鍊起來構成一個帶行頭結點的循環單鍊表。以h[i](0≤i≤m-1)作為第i行的頭結點。

數據結構中怎麼表示數組(數據結構串和數組)23

每列的所有結點鍊起來構成一個帶列頭結點的循環單鍊表。 以h[i](0≤i≤m-1)作為第i列的頭結點。

數據結構中怎麼表示數組(數據結構串和數組)24

行、列頭結點可以共享

數據結構中怎麼表示數組(數據結構串和數組)25

增加一個總頭結點,并把所有行、列頭結點鍊起來構成一個循環單鍊表

數據結構中怎麼表示數組(數據結構串和數組)26

為了統一,設計結點類型如下:

數據結構中怎麼表示數組(數據結構串和數組)27

數據結構中怎麼表示數組(數據結構串和數組)28

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
電水壺常見問題維修方法
電水壺常見問題維修方法
電水壺常見問題維修方法電水壺常見問題維修方法加熱速度慢常見原因是電源電壓過低、室内電源線路或插頭座接觸不良,應首先排除。然後檢查電熱管是否嚴重積垢、底座與壺體的電源插頭座間的接觸是否嚴重不良等。若電熱管積垢,可先用小刀輕刮,再用細砂紙磨光。如果底座與壺體的電源插頭座間接觸嚴重不良,可先清除插頭座接觸...
2025-11-22
清洗油煙機小竅門有哪些
清洗油煙機小竅門有哪些
清洗油煙機小竅門有哪些抽油煙機油盒裡的廢油可利用現在許多家庭廚房裡,都使用抽油煙機,其油盒内不幾天就存滿了廢油。用它清除廚房窗棂、換氣扇和抽油煙機污漬是最佳的“祛油污劑”。具體方法:用破布或破毛巾在廢油中蘸一下塗于油污處,再用布擦淨油污,然後用幹淨布揩拭亮。油污厚的物件可先用...
2025-11-22
巧妙為冰箱除冰的小竅門
巧妙為冰箱除冰的小竅門
巧妙為冰箱除冰的小竅門巧妙為冰箱除冰的小竅門冰箱除冰的方法1:斷開電源除冰将電源關閉并且冰箱内的食品全部取出來,集中放在幹淨的大盆裡或鋪墊物上,蓋好防解凍。接着将台式電風扇開到最大風力,近距裡對着冰塊吹。如是冰櫃可将風扇放進去吹。十幾分鐘後,就會聽見冰塊啪啪往下掉,毫不費力就清掃得幹幹淨淨。擦幹冰箱...
2025-11-22
冰箱怎麼使用才正确?冰箱正确的使用方法
冰箱怎麼使用才正确?冰箱正确的使用方法
冰箱怎麼使用才正确?冰箱正确的使用方法【一】冰箱的基本使用方法,以直冷式機械溫控器為例:1、溫控器的旋鈕刻度0-7,0是停機,7是強冷,0-6越來越凍。2、冰箱冷凍室的溫度區間在-4~-24度(三星級-18度,四星級-24度),冷藏室的溫度區間在5~15度。3、機械溫控器調節時,冷凍室溫度和冷藏室溫...
2025-11-22
關于電熱水器正确使用的疑問解答
關于電熱水器正确使用的疑問解答
如何正确使用電熱水器?關于電熱水器使用的疑問解答1、封閉貯水式電熱水器必須配裝漏電保護開關嗎?答:不一定。這主要取決于電熱水器本身的過熱保護結構。當電熱水器的過熱保護元件是與漏電保護開關中的試驗按鈕一起組成連動的過熱保護裝置時,這時候電熱水器必須裝有漏電保護開關,但此時的漏電保護開關不僅可作為漏電保...
2025-11-22
Copyright 2023-2025 - www.tftnews.com All Rights Reserved