線性表之陣列

2022-04-15 17:50:19 字數 4605 閱讀 2477

一,線性表的概念以及數學定義

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# include

# 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

];}

3.測試程式實現

/*

測試程式

*/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;

}

四,線性表順序儲存結構的總結1.順序儲存結構的優點1.無需為線性表中的邏輯關係增加額外的空間。

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 轉...