首页
/
每日頭條
/
科技
/
數據結構中怎麼表示數組
數據結構中怎麼表示數組
更新时间:2026-06-11 06:54:41

數組的基本概念

數組是一個二元組(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
推荐阅读
qq安裝包打不開是怎麼回事
qq安裝包打不開是怎麼回事
一、發現問題今天有朋友說他電腦怎麼都裝不上QQ,總是彈出“安裝包可能被非法改動導緻安裝失敗,請從官網下載最新安裝包重新安裝”,操作系統是XP,我覺得很不可思議,結果我試了試還真是:1、重新下載安裝包,還是不行2、殺毒,還是不行2、重裝系統,...
2026-06-11
電腦無法啟動錯誤代碼0xc 0000001
電腦無法啟動錯誤代碼0xc 0000001
“您的計算機的引導配置數據缺少一些必要的信息”是一個藍屏錯誤,也稱為錯誤代碼:0xc0000185。錯誤消息顯式地指示錯誤與已損壞或丢失關鍵信息的引導配置數據有關。因此,系統不會啟動,除非個人電腦擁有者采取一些補救措施,以恢複丢失或損壞的數...
2026-06-11
河南科技大學實力如何及未來發展
河南科技大學實力如何及未來發展
2004年,親戚家的男孩子考入了河南科技學院新科學院;那個三本院校蓬勃發展的時期,有很多新興院校出現也不足為奇,在那個咨詢相對不發達的年代,自己對其母體院校也少有感知,因為有河南科技大學在洛陽,總以為河南科技學院與之有或多或少的關系。後來才...
2026-06-11
oppo手機音量鍵調節在哪裡
oppo手機音量鍵調節在哪裡
1、閃拍當我們出去旅遊或者走在街上,看到美麗的風景,或者是身邊突然出現一位美女,如果這是等你掏出手機,再解鎖,可能美女的背影都不見了。這時候抓拍就很重要了,閃拍就派上了用場。開啟之後,即在待機狀态下,按住手機音量鍵中間,手感受到手機震動,就...
2026-06-11
異步編程的理解
異步編程的理解
2021年06月10日09:30寫大家好,我是小鄭!簡單聊一下,大家用得比較多的異步處理方式。async&await同時也是大家代碼中容易反複出現問題的地方。Promise化編程幾乎是前端功能開發中的必選項。而當我在幫其它同學review代...
2026-06-11
Copyright 2023-2026 - www.tftnews.com All Rights Reserved