什麼是線性表&特點、順序表(靜態存儲&動態存儲)

什麼是線性表?

線性表是具有相同數據類型的n個元素的有限序列

1.線性表(邏輯結構)的存儲結構分爲順序表和鏈表

  • 線性表是具有相同數據類型的n個數據元素的有窮集合 -- 它是一種邏輯結構。
  • 線性表是一種邏輯結構,表示元素之間一對一的相鄰關係。順序表和鏈表是指存儲結構,兩者屬於不同層面的概念,因此不能互相混淆。
  • 也就是說線性表這一種邏輯結構對應的的存儲結構分爲順序表鏈表

2.線性表特點:

有限性:元素個數有限

邏輯上的順序性:排序有先後順序

每個元素都相同大小的存儲空間,因爲表中元素數據類型都相同

表中元素具有抽象性,但我們僅討論元素間的邏輯關係我們不在意元素究竟表示什麼內容。

3.比如↓↓↓

例:線性表是具有n個(數據元素)的有限序列。(數據庫中的一條記錄就是一組數據元素。)

例:集合不是線性表(不滿足順序性),所有整數組成的序列不是線性表(不滿足有窮性),鄰接表不是線性表(是一種存儲結構,而線性表是邏輯結構,在此不能相提並論)

我們一定要理解線性表,以及其與順序表、鏈表的區別!!!下面我們看線性表順序存儲結構和鏈式存儲結構~

 

 

線性表的順序存儲結構

也稱順序表,用一組物理地址連續的存儲單元依次存儲線性表中的數據元素,從而使邏輯上相鄰的元素物理位置也相鄰。表中的邏輯位置與物理位置相同!線性表位序從1開始,數組下標從0開始

順序存儲有兩種描述方式:

1.靜態分配方式

#define MaxSize 50
typedef struct{
    ElemType data[MaxSize];
    int length;
}SqList;

這是靜態分配的,數組的大小和空間事先已經固定,一旦空間佔滿,再加入新的數據就會溢出,進而導致程序崩潰!

2.動態分配方式

#define InitSize 100    //表長度的初始定義
typedef struct{
    ElemType *data;    //指示動態分配數組的指針
    int MaxSize, length;//數組的最大容量和當前個數
}SeqList;

動態分配時,存儲數組的空間是在程序執行的過程中通過動態分配語句分配的,一旦數據空間佔滿,就另外開闢一塊更大的存儲空間,用以替換原來的存儲空間,從而達到擴充數據存儲空間的目的,而不需要爲線性表一次性的劃分所有的空間。

  • C的初始動態分配語句:L.data = (ElemType*)malloc(sizeof(ElemType)* InitSize);
  • C++的初始動態分配語句:L.data = new ElemType(InitSize);

PS:動態分配不是鏈式存儲,它同樣屬於順序存儲結構,物理結構沒有變化,依然是隨機存取方式,只是分配時的大小可以在運行時決定。

數據表完整代碼實現:https://blog.csdn.net/lady_killer9/article/details/82695770

先寫到這,明日接着更~

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章