一、前言
線性表的順序表示是指用一組位址連續的儲存單元依次儲存線性表的資料元素。
一般來說,線性表的第i個資料元素ai的儲存位置為:
loc(ai) = loc(a0)+(i-1)xl;
其中loc(a0)表示的是第乙個資料元素的儲存位置,通常稱為線性表的起始位置或者基位址。
l代表的時每個資料元素需要占用l個儲存單元。
二、順序表
1、概念:線性表的這種機內表示稱為線性表的順序儲存結構或者順序映像,通常,稱這種儲存結構的線性表為順序表。
2、特點:以元素在計算機內「物理位置相鄰」來表示線性表中資料u之間的邏輯關係。只要確定儲存線性表的起始位置,線性表中的任一元素都可以隨機訪問,所以線性的順序儲存結構式一種隨機儲存的儲存結構。
3、通常用陣列來描述資料結構中的順序儲存結構。
4、線性表的動態分配順序儲存結構
// 線性表的動態分配順序儲存結構
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#define list_init_size 100 //線性表儲存空間的初始分配量
#define listincrement 10 //線性表儲存空間的分配增量
typedef
struct
sqlist;
5、初始化線性表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
status initlist_sq(sqlist &l)
l.length = 0;
//空表長度為0
l.listsize = list_init_size;
//初始儲存容量
return
ok;
}
//initlist_sql
6、線性表的插入
一般情況下,在第i(1<=i<=n)個元素之前插入乙個元素時,需要將第n個到第i(共n-i+1)個元素向後移動乙個位置。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
status listinsert_sq(sqlist &l,
int
i,elemtype e)
if
(l.length>=l.listsize)
//當前儲存空間已滿,增加分配
l.elem = newbase;
//新基址
l.listsize+=listincrement;
//增加儲存容量
}
q = &(l.elem[i-1]);
//q為插入位置
for
(p=&(l.elem[l.length-1]);p>=q;--p);--p)*(p+1) = *p;
*q = e;
++l.length;
return
ok;
}
7、線性表順序儲存結構的特點:
邏輯關係上相鄰的兩個元素在物理位置上也相鄰,因此可以隨機訪問表中任一元素,它的儲存位置可以用乙個簡單直觀的公式表hi
8、線性表順序儲存結構的缺點
每次做插入和刪除操作時,需要移動大量的元素。
線性表 順序表示和實現(順序表)
線性表 順序表 實現 方式 陣列 說明 1.資料元素從下標0開始 2.順序表元素個數初始是為0,有乙個時為1,即 size比元素個數大1 3.也是size比陣列下標大1 4.有上限 maxsize 線性表 順序表 實現 陣列 1.資料元素從下標0開始 2.順序表元素個數初始是為0,有乙個時為1,即 ...
線性表的順序表示和實現
1 線性表是最常用且最簡單的一種資料結構。簡言之,乙個線性表就是n個資料元素的有限序列。儲存空間是連續變化的 線性表的順序表示和實現 include include define list init size 10 define listincrement 10 define elemtype ch...
線性表的順序表示和實現
線性表的順序表示指的是用一組位址連續的儲存單元依次儲存線性表的資料元素。假設線性表的每個元素需占用l個儲存單元,並能所佔的第乙個單元的儲存位址作為資料元素的儲存位置。則線性表中第i 1個資料元素的儲存位置loc ai 1 和第i個資料元素的儲存位置loc ai 之間滿足下列關係 loc ai 1 l...