1.1 定義
線性表是具有相同型別元素組成的乙個線性序列。元素的個數即為元素的長度,元素為0時稱為空表。如下:
(a,b,c,d,e,f,g)
這就表示乙個線性表。
1.2 特徵
有且只有乙個頭結點,頭結點沒有前驅結點。
有且只有乙個尾結點, 尾結點沒有後繼節點。
除頭尾結點外,其他結點都有乙個前驅結點和後繼節點。
1.3 儲存特徵
線性表的儲存結構分為順序儲存和鏈式儲存,它們都具有如下特點:
唯一性:乙個線性表只能儲存一種型別的元素
1.4 基本操作
建立 create()
初始化 init()
新增資料 adddata()
獲取長度 getlength()
獲取指定元素 get()
插入 insert()
刪除 delete()
清空表 clear()
這8種只是線性表的最基本操作,如果想要高階,請自己谷歌。
資料被儲存在指定長度的連續儲存單元,通過對應的索引(一般從0開始)找到對應的元素。在高階語言中,順序儲存可以用陣列表示。
前面提到過線性表的順序儲存查詢效率高,插入和刪除效率低。適合儲存需要連續訪問的資料。
2.1.1 建立順序表並初始化
使用結構體建立乙個結點,這個結點儲存了這個順序表的基本資訊,包括capacity,length,node。為了簡單起見,只儲存整形資料,其中用到了malloc和memset函式 ,**如下:
#include
#include
#include
//建立結點
typedef
struct seqlist hseqlist;
//建立順序表
hseqlist *
createseqlist
(int capacity)
memset
(head,0,
sizeof
(hseqlist));
//清空頭結點
head->capacity = capacity;
head->length =0;
head->node =
(int*)
malloc
(sizeof
(void*)
*capacity);if
(head->node ==
null
)return head;
}
2.1.2 獲取長度,容量並且封裝列印方法。//求順序表容量
intgetcapacity
(hseqlist * list)
temp = list;
return temp->capacity;
}//求順序表長度
intgetlength
(hseqlist * list)
temp = list;
return temp->length;
}//輸出
void
print
(hseqlist * list)
int length =
getlength
(list)
;int i;
printf
("[");
for(i=
0;i1;i++
)printf
("%d]\n"
,list->node[i]);
}
2.1.3 新增資料//新增資料
intadddata
(hseqlist * list,
int data)
if(list->length>=list->capacity)
int index = list->length;
list->node[index]
= data;
list->length++
;return1;
}
2.1.4 插入
如果要在順序表中插入資料,則需要將該位置後的所有元素往後移動。
例如,在[a,b,c,d,e,f]中把g插入到第二個位置。要先移位然後插入。如圖所示:
**如下:
//插入
intinsert
(hseqlist *list,
int data,
int pos)
if(list->length>=list->capacity)
//如何插入位置在length之前,則預設插入到最後一位
if(pos>list->length)
//從後往前移位,防止資料丟失
for(i=list->length;i>pos;i--
)//插入資料
list->node[i]
= data;
//增加長度
list->length ++
;return1;
}
2.1.5 刪除
刪除指定位置的元素後,該位置往後的元素依次往前移動。
delete
(hseqlist *list,
int pos)
if(list->length <=0)
if(pos <
0|| pos >list->length)
int i;
for(i=pos; i<=list->length;i++)
list->length--
;return1;
}
2.1.6 查詢某個位置上的指定元素
//查詢某個位置上的指定元素
intgetdata
(hseqlist *list,
int pos)
if(pos <
0|| pos >=list->length)
return list->node[pos]
;}
2.1.7 清空表
//清空表
intclear
(hseqlist *list)
list->length =0;
memset
(list->node,0,
(list->capacity *
sizeof
(void*)
));return1;
}
2.1.8 測試**
int
main()
print
(list)
;printf
("insert:\n");
insert
(list,
100,3)
;print
(list)
;printf
("delete:\n");
delete
(list,3)
;print
(list)
;printf
("getdata:\n");
printf
("index %d is %d\n",0
,getdata
(list,0)
);printf
("clear:\n");
clear
(list)
;print
(list)
;return0;
}
輸入結果:
原始碼位址
資料結構(二) 線性表
線性表是最簡單最常用的資料結構,是一種典型的線性儲存結構。定義 線性表是由n n 0 個資料元素 結點 a1 a 2 an 組成的有限序列。n為表的長度。當n 0,為 空表 n 0時,為 a1,a 2,an 邏輯特徵 非空的線性表只有乙個頭結點,也只有乙個終結點,頭結點只有乙個直接後繼結點,而沒有直...
資料結構實驗二 線性表
一 實驗目的 鞏固線性表的資料結構,學會線性表的應用。1.回顧線性表的邏輯結構,線性表的物理儲存結構和常見操作。2.學習運用線性表的知識來解決實際問題。3.進一步鞏固程式除錯方法。4.進一步鞏固模板程式設計。二 實驗內容 1.建立乙個n個學生成績的順序表,對錶進行插入 刪除 查詢等操作。分別輸出結果...
ZJU資料結構 二 線性表
線性表 由同型別資料元素構成有序序列的線性結構 表中元素個數稱為線性表的長度線性表沒有元素時,稱為空表表起始位置稱為表頭,表結束為止稱為表尾型別名稱 線性表 list 資料物件集 線性表是n 0 個元素構成的有序序列 a1,a2,an 操作集 線性表l list,整數i表示位置,元素x elemen...