一,線性表的概念以及數學定義
1.線性表的概念
零個或多個資料元素的有限序列。首先說明這是乙個序列,也就是說資料元素之間是有順序的,若元素存在多個,則第乙個元素無前驅,最後乙個元素無後繼,其他每個元素都有且僅有乙個前驅和後繼。
2.數學定義
若將線性表記為(a1...ai-1,ai,ai+1....an),則線性表中,ai-1領先於ai,ai領先於ai+1,則稱ai-1是ai的直接前驅元素,ai+1是ai的直接後繼元素,當i=1,2....n-1的時候,ai有且僅有乙個直接後繼元素,當i=2,3...n的時候,ai有且僅有乙個直接前驅元素。
二,線性表的順序儲存結構
1.順序儲存結構的概念
線性表的順序儲存結構,指的是利用一段位址連續的儲存單元依次儲存線性表的資料元素。
2.順序儲存方式的實現
我們利用陣列這個資料型別,來表示一段位址連續的儲存單元。
三,線性表之順序儲存結構的的實現
1.線性表基本功能:
1.建立線性表 ==> list * createlist(int capacity);
2.銷毀線性表 ==> void destorylist(list * list);
3.清空線性表 ==> void clearlist(list * list);
4.獲取線性表長度 ==> int length(list * list);
5.獲取線性表容量 ==> int capacity(list * list);
6.線性表的插入 ==> void insert(list * list,int pos,node * node);
7.線性表的刪除 ==> node * delete(list * list,int pos);
8.線性表的修改 ==> node * update(list * list,int pos,node * node);
9.線性表的獲取 ==> node * get(list * list,int pos);
2.線性表基本功能的**實現:
# include# include3.測試程式實現# include
typedef
void
node;
typedef
struct
seqlist
list;
/*建立指定容量大小的線性表
*/list * createlist(int
capacity)
/*銷毀線性表
*/void destorylist(list *list)
//釋放線性表物件
free
(list);
list =null;
}}/*
清空線性表
*/void clearlist(list *list)}/*
線性表的長度
*/int length(list *list)
/*線性表的容量
*/int capacity(list *list)
/*線性表的插入
*/void insert(list * list, int pos, node *node)
if (pos > list->capacity)
if (list->length > list->capacity)
//容錯機制 6個長度,容量20,插入10,則自動插入到7這個位置
if (pos>list->length)
//移動pos之後的資料
for (int i = list->length; i > pos-1; i--)
//插入資料
list->array[pos - 1] =node;
//線性表長度加一
list->length++;}/*
線性表的刪除
*/node * delete(list * list, int
pos)
if (pos > list->length)
//返回的元素
node * node = list->array[pos - 1
];;
//刪除元素後線性表長度減一
list->length--;
//刪除最後乙個
if (pos == list->length)
//刪除
for (int i = pos - 1; i < list->length; i++)
return
node;}/*
線性表的修改
*/node * update(list * list, int pos, node *node)
//返回修改前的物件
node * result = list->array[pos - 1
];
//修改
list->array[pos - 1] =node;
return
result;}/*
線性表的獲取
*/node * get(list * list, int
pos)
return list->array[pos - 1
];}
/*四,線性表順序儲存結構的總結1.順序儲存結構的優點1.無需為線性表中的邏輯關係增加額外的空間。測試程式
*/typedef
struct
student
student;
intmain()
; student s2 = ;
student s3 = ;
student s4 = ;
student s5 = ;
student s6 = ;
//頭插法插入
insert(list, 1, &s1);
insert(list,
2, &s2);
insert(list,
3, &s3);
insert(list,
4, &s4);
insert(list,
5, &s5);
insert(list,
19, &s6);
//獲取長度
printf("
############線性表長度############\n");
printf(
"length = %d\n
", length(list));
//獲取容量
printf("
############線性表容量############\n");
printf(
"capacity = %d\n
", capacity(list));
//遍歷
printf("
############線性表遍歷############\n");
for (int i = 1; i <= length(list); i++)
//刪除第乙個元素
delete(list, 3
); printf(
"############刪除第三個元素############\n");
//遍歷
for (int i = 1; i <= length(list); i++)
//修改第乙個元素
printf("
############修改第乙個元素############\n");
student sss = ;
update(list,
1, &sss);
//遍歷
for (int i = 1; i <= length(list); i++)
//清空線性表
printf("
############清空線性表############\n");
clearlist(list);
//遍歷
for (int i = 1; i <= length(list); i++)
//銷毀線性表
printf("
############銷毀線性表############\n");
destorylist(list);
return0;
}
2.可以快速獲取線性表中合法位置的資料元素。
2.順序儲存結構的缺點
1.插入和刪除操作需要移動大量元素。
2.當線性表長度變化較大時難以確定儲存空間的容量。
3.總結
線性表順序儲存結構適用於查詢多,增刪少,資料長度變化小的場景。
線性表之線性表與陣列的區別
線性結構是最簡單也是最常用的資料結構之一。線性結構的特點 在資料元素有限集中,除第乙個元素無直接前驅,最後乙個元素無直接後續以外,每個資料元素有且僅有乙個直接前驅元素和乙個直接後繼元素。如果線性表中的資料元素時物件時,陣列存放的是物件的引用,即線性表中所有資料元素的物件引用是存放在一組連續的位址空間...
線性表之陣列順序表
ifndef seqlist h define seqlist h include include include define seqlist init size 8 define inc size 3 typedef int elemtype typedef struct seqlist seq...
線性表之陣列實現
因為線性表的順序儲存結構是一種隨機訪問的儲存結構,同時線性表的長度可變,且所需最大儲存空間隨問題不同而不同,則在c語言中,用動態分配的一維陣列來實現。下面是線性表的動態分配順序儲存結構 typedef struct sqlist 該程式採用選單和結構體陣列,這樣方便測試每個功能的實現。同時將類c 轉...