數據結構----數組


數組

按照一定格式排列起來的,具有相同類型的數據元素的集合

一維數組:

int num[5] = {0,1,2,3,4}

二維數組:若一維數組中的元素又是一維數組結構,稱為二維數組

int num[2][3]; 兩行三列

  • 因為一個二維數組等於一個一維數組里面放入一維數組,所以二維數組的還可以使用下面的方式定義:
    typedef elemtype array2[m][n]
    等價於:elemtype為數據的類型,可以為int,float等
    typedef elemtype arry1[n]
    typedef arry1 arry2[m]

三維數組:若二位數數組中的元素又是一個一維數組,則稱作為三維數組。

n維數組:若n-1維數組中的元素又是一個一維數組結構,則稱作n維數組。

  • 線性表結構是數組結構的一個特例,而數組結構又是線性表結構的擴展。
  • 數組特點:結構固定,定以后維數和維界不再改變
  • 數組的基本操作:除了結構的初始化和銷毀以外,只有取元素和修改元素值的操作。

數組的存儲

  • 因為數組的結構固定,維數和維界不變,且數組的基本操作一般為初始化,銷毀,取元素,修改元素值,一般不做插入和刪除操作,故數組一般都是用順序存儲,而不使用鏈式存儲的方式。

  • 注意:數組可以是多維的,但存儲數據元素的內存單元地址是一維的,因此,在存儲數組結構之前,需要解決將多維關系映射到一維關系的問題。

    • 列如:定義數組int a[5];每個元素占用4個字節,假設a[0]存儲在2000單元,a[3]存儲在2012到2015;
    • 假設初始的地址為i,第i個元素的存儲地址LOC(I) = a+i*L,L是數據結構占用的大小,如int型L=4,a是起始地址;
  • 二維數組的空間存儲結構

    • 有兩種存儲方式,行優先與列優先,C語言與JAVA等都是使用的行優先的存儲方式

      行存儲方式就是一行一行的存儲,如上圖所示;同理列序的存儲方式就是按照列一列一列的存儲
    • 有二維數組A[m][n],LOC(a[i][j]) = LOC(0, 0) + (ni+j)L;L是數據類型占用的大小,如int的時候就是4;i是所在行數,j是所在的列數,注意i和j都是從0開始的,不是從1開始的。
  • 三維數組,每一個頁來存,頁內按照二維數組的存儲方式

  • n維元素的存儲方式

特殊矩陣的壓縮存儲

  • 對稱矩陣

  • 三角矩陣

  • 對角矩陣

  • 稀疏矩陣
    三元組的法進行保存


第一行代表當前矩陣有多少行多少列,且一共有多少個元素是非零的

  • 三元組法的缺點,順序讀取與存儲,插入和查找麻煩

  • 稀疏矩陣的鏈式存儲結構----十字鏈表

廣義表

  • 廣義表的長度與與深度
    • 長度:最外層所包含元素的個數
    • 深度:廣義表展開后所包含的括號重數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM