順序表就是把線性表中的所有元素按照其邏輯順序,依次儲存到從指定的儲存位置開始的一塊連續的儲存空間中。這樣線性表中第乙個元素的儲存位置就是指定的儲存位置,第i+1個元素的儲存位置緊接在第i個元素的儲存位置的後面。
順序表就像如下圖中的房子,每個房間左邊的數字就是該房間離0點的距離,同時也代表了房間號,房間的長度為1,因此,只要知道0點的位置,然後通過房間號就馬上可以找到任何乙個房間的位置,這就是順序表的第乙個特性——隨機訪問特性.
由圖中我們可以看出5個房間所用的地皮是緊挨著的,即連續地占用了一片空間,並且地皮的塊數6是確定的,若在地皮上布置新的房間或者拆掉老的房間,(對順序表的操作過程中),地皮的塊數不會增加,也不會減少,這就是順序表的第二個特性,即順序表要求占用連續的儲存空間。儲存分配只能預先進行,一旦分配好了,在對其操作的過程中,始終不變。
如圖所示的順序表中最右邊的乙個表結點空間代表沒有被利用(順序表還有剩餘空間來注入新資料),如果想要在1號房間和2號房間插入乙個房間,則必須將2號以後的房間都往後移動乙個位置,(假設房間是可以隨意搬動的),即順序表做插入操作的時候要移動多個元素
結構體示意圖:
如上圖所示,乙個順序表包括乙個儲存表中元素的陣列data[ ]和乙個指示元素個數的變數length。
有時候我們可以把上面的結構體定義寫成如下
int a[maxsize];
int n;
這兩句就定義了乙個長度為n,表內元素為整數的順序表。
1、按元素值得查詢演算法
在順序表中查詢第乙個值等於e的元素,並返回其下標。**如下
int findelem (sqlist l ,
int e)
2、插入資料元素的演算法
在順序表l的第p(0<=p<=length)個位置上插入新的元素e。如果p的輸入不正確,則返回0,代表插入失敗;如果p的輸入正確,則將順序表第p個元素及以後元素右移乙個位置,騰出乙個空位置,插入新元素,順序表長度增加1,插入操作成功,返回1.
插入操作**如下:
int
insertelem
(sqlist &l, int p, int e)//l本身要發生改變,所以用引用型
(2)求指定位置元素的演算法
用e返回l中p(0<=p<=length-1)位置上的元素,**如下:
int
getelem
(sqlist &l int p, int
&e)//要改變,所以要用引用型
資料結構 線性表 順序表
豐富了前邊的功能,更加完善。include include define list init size 100 線性表儲存空間的初始分配量 define listincrement 10 線性表儲存空間的分配增量 using namespace std const int overflow 2 ty...
資料結構 線性表 順序表
線性表是具有相同特性的資料元素的乙個有限序列。線性表的順序儲存結構是,把線性表中的所有元素按照其邏輯順序依次儲存到從計算機儲存器中指定的儲存位置開始的一塊連續的儲存空間。include include include define maxsize 50 using namespace std 假設l...
線性表 順序表(資料結構)
初學資料結構,便多作了些實踐內容,將課本上的內容自己理解後寫了一遍。希望付出值得。0.前提準備 define maxsize 50 typedef int elemtype 1.建立結構體 typedef struct sqlist 建立結構體2.創造線性表 void creatlist sqlis...