從結構性上考慮,通常將data 和last 封裝成乙個結構作為順序表的型別:
typedef struct
seqlist;
順序表的初始化即構造乙個空表,這對表是乙個加工型的運算,因此,將l設為指標引數,首先動態分配儲存空間,然後,將表中last
指標置為-1,表示表中沒有資料元素。演算法如下:
seqlist *init_seqlist( )
演算法2.1
設呼叫函式為主函式,主函式對初始化函式的呼叫如下:
main()
線性表的插入是指在表的第i個位置上插入乙個值為x
的新元素,插入後使原表長為n的表:
(a1,a2,... ,ai-1,ai,ai+1,... ,an)
成為表長為n+1
表:(a1,a2,...,ai-1,x,ai,ai+1,...,an ) 。
i 的取值範圍為1<=i<=n+1 。
順序表上完成這一運算則通過以下步驟進行:
(1) 將ai~an
順序向下移動,為新元素讓出位置;
(2) 將x 置入空出的第i個位置;
(3) 修改last
指標(相當於修改表長),使之仍指向最後乙個元素。
演算法如下:
int insert_seqlist(seqlist *l,int
i,datatype x)
/*表空間已滿,不能插入*/
if (i<1 || i>l->last+2)
/*檢查插入位置的正確性*/
for(j=l->last;j>=i-1;j--)
l->data[j+1]=l->data[j]; /*
結點移動*/
l->data[i-1]=x; /*新元素插入*/
l->last++;
/*last仍指向最後元素*/
return (1); /*插入成功,返回*/
}演算法2.2
本演算法中注意以下問題:
(1)
順序表中資料區域有maxsize個儲存單元,所以在向順序表中做插入時先檢查表空間是否滿了,在表滿的情況下不能再做插入,否則產生溢位錯誤。
(2)
要檢驗插入位置的有效性,這裡i 的有效範圍是:1<=i<=n+1,其中n 為原表長。
(3) 注意資料的移動方向。
線性表的刪除運算是指將表中第i 個元素從線性表中去掉,刪除後使原表長為n 的線性表:
(a1,a2,... ,ai-1,ai,ai+1,...,an)
成為表長為n-1
的線性表:
(a1,a2,... ,ai-1, ai+1,... ,an)。
i 的取值範圍為:1<=i<=n 。
順序表上完成這一運算的步驟如下:
(1) 將ai+1~an 順序向上移動。
(2)
修改last指標(相當於修改表長)使之仍指向最後乙個元素。
演算法如下:
int delete_seqlist(seqlist *l;int i)
for(j=i;j<=l->last;j++)
l->data[j-1]=l->data[j];
/*向上移動*/
l->last--;
return(1); /*刪除成功*/
}演算法2.3
本演算法注意以下問題:
(1)刪除第i個元素,i的取值為1<=i<=n
,否則第i個元素不存在,因此,要檢查刪除位置的有效性。
(2)當表空時不能做刪除,因表空時l->last的值為-1,條件(i<1 ||
i>l->last+1)也包括了對錶空的檢查。
(3)刪除ai 之後,該資料已不存在,如果需要,先取出ai
,再做刪除。
起依次和x比較,直到找到乙個與x相等的資料元素,則返回它在順序表中的儲存下標或序號(二者差一);或者查遍整個表都沒有找到與x
相等的元素,返回-1。
演算法如下:
int location_seqlist(seqlist *l, datatype x)
演算法2.4
本演算法的主要運算是比較。顯然比較的次數與x在表中的位置有關,也與表長有關。當a1=x
時,比較一次成功。當an=x 時比較n 次成功。平均比較次數為(n+1)/2,時間效能為o(n)。
資料結構 順序表
順序表的特徵 1由唯一的表名標識 2佔據一塊連續的儲存空間 3資料順序存放,元素之間有先後關係 定義動態的順序表 define maxsize 100 typedef struct sqlist 這個結構體型別存放的是順序表的資訊和順序表的資料 初始化順序表 void initsqlist sqli...
資料結構 順序表
順序表示最簡單的乙個資料結構,直接貼 吧,因為比較簡單。include include typedef struct sqlist sqlist void initlist sqlist l l length 0 void getelem sqlist l 初始化 l length j printf...
資料結構順序表
include include include include include include include include include include include include include include using namespace std define maxn 100000...