所謂順序表,就是順序儲存的線性表。順序儲存就是用一組位址連續的儲存單元依次存放線性表中各個資料元素的儲存結構。
線性表中所有資料元素的型別是相同的,所以每乙個資料元素在儲存器中占用相同的大小的空間。假設每乙個資料元素佔b個儲存單元,且a0(即線性表中的第乙個資料元素)的儲存位址為loc(a0)(此位址也稱為線性表的基位址),則第i個資料元素的位址可表示為:
loc(ai)=loc(a0)+i*b 其中0<=i&&i<=n-1
從以上可知,只要順序表的基位址和每乙個資料元素所佔的儲存空間的大小,就可以計算出第i個資料元素的位址,即順序表具有按資料元素的位序號隨機訪問的特點。
順序表的特點:
線性表中邏輯上響鈴的資料元素,在物理儲存位置上也是相鄰的
儲存密度高,但需要預先分配「足夠應用」的儲存空間(也就是夠用的儲存空間),這可能將會造成儲存空間的浪費;其中,儲存密度=資料元素本身值所需的儲存空間/該資料元素實際所占用的空間
便於隨機訪問
不便於插入和刪除操作,這是因為在順序表上進行插入和刪除操作會引起大量的資料元素的移動
因為陣列也具有隨機訪問的特點。為此,一般,順序表採用陣列來進行實現
順序表的實現**:
public class arraylistimplements list
public void clear()//清空
public boolean isempty()//判空
public int length()//求長度
public t get(int i)throws exception//按位查詢(在查詢前判斷位置是否合法),時間複雜度為o(1)
public int indexof(t x)//按值查詢,時間複雜度為o(n)
listelem[i]=x;
this.curlen++;
}public void remove(int i)throws exception//刪除操作,時間複雜度為o(n)
for(int j=i;j從以上的實現中可以看出,對於順序表而言,其插入,刪除,以及按值查詢的操作的時間複雜度為o(n),從而可知,順序表有如下侷限性:
若要將線性表擴充儲存空間,則需要重新建立乙個位址連續的更大的儲存空間,並把所有的資料元素都複製到新的儲存空間中;
因為順序儲存要求邏輯上相鄰的資料元素,在物理儲存位置上也是要相鄰的,這就使得要增刪資料元素則會引起平均約一半的資料元素的移動。
為此,順序表較適合表示「靜態」的線性表,即線性表一旦形成之後,就很少進行插入和刪除操作。對於需要頻繁執行插入和刪除操作的「動態」線性表,通常採用鏈式儲存結構。
回到目錄|·(工)·)
線性表 順序表的實現
順序表vs2010除錯 include include include include define list init size 50 struct seqlist 初始化順序表 int fninitlist struct seqlist l l length 0 l max size list ...
線性表順序實現
線性表實現,建立表,插入元素,刪除元素,銷毀表,表的遍歷,表的並集交集差集。不斷更新中。include include include include define list init size 100 初始大小 define error 0 define listincrement 10 增量大小...
線性表的順序實現
include using namespace std 線性表的順序儲存結構 const int maxlistsize 100 class list 構造乙個空線性表 void clear bool isempty 判斷是否為空,若為空,返回true,否則返回false intgetelem in...