1. 程式人生 > >2.2.1 順序表的定義

2.2.1 順序表的定義

線性表的順序儲存又被稱為順序表。它是用一組地址連續的儲存單元,依次儲存線性表中的資料元素,從而使得邏輯上相鄰的兩個元素在物理位置上也相鄰。第1個元素儲存線上性表的起始位置,第i個元素的儲存位置後面緊接著儲存的是第i+1個元素。因此,順序表的特點是表中元素的邏輯順序與其物理順序相同。 假設線性表L儲存的起始位置為LOC(A),sizeof(ElemType)是每個資料元素所佔用儲存空間的大小。 注意:線性表中的元素的位序是從1開始的,而陣列中元素的下標是從0開始的。 假定線性表的元素型別為ElemType,線性表的順序儲存型別描述為: #define MaxSize 50 //定義線性表的最大長度 Typedef struct{ Elemtype data [MaxSize]; // 順序表的元素 Int length; // 順序表的當前長度 }SqList; //順序表的型別定義 一維陣列可以是靜態分配的,也可以是動態分配的。在靜態分配時,由於陣列的大小和空間事先已經固定,一旦空間佔滿,再加入新的資料將產生溢位,就會導致程式崩潰。 而動態分配時,儲存陣列的空間是在程式執行過程中通過動態儲存分配語句分配的,一旦資料空間佔滿,可以另外開闢一塊更大的儲存空間,用以替換原來的儲存空間,從而達到擴充儲存陣列空間的目的,而不需要一次性地劃分所有所需空間給線性表。 #define InitSize 100 //表長度的初始定義 Typedef struct { ElemType data; //指示動態分配陣列的指標 Int MaxSize,length; //陣列的最大容量和當前個數 }SeqList; //動態分配陣列順序表的型別定義 初始的動態分配語句為 L.data = (ElemType

)malloc(sizeof(ElemType)*InitSize); C++的初始動態分配語句為 L.data = new ElemType[InitSize]; 注意:動態分配並不是鏈式儲存,同樣還是屬於順序儲存結構,其物理結構沒有變化,依然是隨機存取方式,只是分配的空間大小可以在執行時決定。 順序表最主要的特點是可以進行隨機訪問特性,即通過首地址和元素序號可以在O(1)的時間內找到指定的元素。 順序表的儲存密度高,每個結點只儲存資料元素。 順序表邏輯上相鄰的元素物理上也相鄰,所以,插入和刪除操作需要移動大量元素。