資料結構與演算法(C語言)之線性表(順序儲存結構)

2021-06-29 07:48:11 字數 2605 閱讀 7460

1.線性表的定義

由零個或多個資料元素組成的有限序列。

用數學語言定義如下:

若線性表記為(a1,...,ai-1,ai,ai+1,...an)則表中ai-1領先於ai,ai領先於ai+1,稱ai-1是ai的直接前驅元素,ai+1是ai的直接後繼元素。

線性表的個數n>=0,n=0時為空表

2.      adt線性表(list)

data

線性表的資料物件集合為每個元素的型別為datatype。其中,除第乙個元素a1外,每乙個元素有且只有乙個直接前驅元素,除了最後乙個元素an外,每乙個元素有且只有乙個直接後繼元素,資料元素之間的關係是一對一的關係。

operation

initlist(*l):初始化操作,建立乙個空的線性表l

listempty(l):判斷線性表是否為空表,若線性表為空,返回true,否則返回false

createlist(*l):建立線性表

putlist(l):列印線性表

clearlist(*l):將線性表清空

getelem(l,i,*e):將線性表l中的第i個位置元素之返回給e

listdelete(*l,i,*e):刪除線性表中第i個位置元素,並用e返回其值

listlength(l):返回線性表l的元素個數

endadt

3.編碼實現

#include #include #define maxsize 20

#define ok 1

#define error -1

enum selection;

typedef int elemtype;

typedef struct

sqlist;

//初始化操作,建立乙個空的線性表l

void initlist(sqlist *l)

//判斷線性表是否為空表,若線性表為空,返回true,否則返回false

void listempty(sqlist l)

//建立線性表

void createlist(sqlist *l)

fflush(stdin);//清空輸入緩衝區

printf("create successfully!\n");

}//列印線性表

void putlist(sqlist l)

printf("the end!");

printf("\n");

}//清空鍊錶

void clearlist(sqlist *l)

//將線性表l中的第i個位置元素返回給e

int getelem(sqlist *l,int i,elemtype *e)

*e=l->data[i-1];

return ok;

}int locateelem(sqlist l,int e)

}l->data[i-1]=e;

l->length++;

return ok;

}//返回線性表l的元素個數

void listlength(sqlist l)

//刪除線性表中第i個位置元素,並用e返回其值

int listdelete(sqlist *l,int i,elemtype *e)

l->length--;

return ok;

}void showitems()

int main()

else

break;

case locateelem:

printf("請輸入元素:\n");

scanf("%d",&e);

if(locateelem(l,e)>0)

else

break;

case listinsert:

printf("請輸入要插入的位置和元素:\n");

scanf("%d",&i);

scanf("%d",&e);

if(listinsert(&l,i,e)==1)

else

break;

case listdelete:

printf("請輸入要刪除的位置和元素:\n");

scanf("%d",&i);

scanf("%d",&e);

if(listdelete(&l,i,&e)==1)

else

break;

case listlength:

listlength(l);

break;

default:

fputs("error input!\n",stderr);}}

return 0;

}

4.分析

在存、讀資料時,不管是哪個位置,時間複雜度都是o(1).而在插入或刪除時,時間複雜度都是o(n).

它比較適合元素個數比較穩定,不經常插入和刪除元素,而更多的操作是訪問資料的應用。

5.線性表順序儲存結構的優缺點

優點:無須為表中的元素之間的邏輯關係而增加額外的儲存空間

可以快速的訪問表中任意位置的元素

缺點:插入和刪除操作需要移動大量元素

當線性表長度比較大時,難以確定儲存空間的容量

容易造成儲存空間的「碎片」

資料結構與演算法(C語言)之線性表(連式儲存結構)

1.線性表的鏈式儲存結構是用一組任意的儲存單元儲存線性表的資料元素,這組儲存單元可以存在記憶體中未被占用的任意位置。線性表的連式儲存結構包括資料域和指標域 其中資料域存放資料元素資訊指標域存放指標,我們把這兩部分資訊組成的資料元素稱為結點 node 2.adt linklist data 資料結構包...

資料結構C語言之線性表簡單實現

include stdafx.h include include include define list size 100 定義線性表結構 typedef structsqlist int tmain int argc,tchar argv void initlist sqlist l l.leng...

資料結構與演算法(C ) 線性表

資料元素之間的邏輯關係是線性關係 線性結構是資料元素間約束力最強的一種資料結構 非空集合中,除第乙個元素無前驅外,集合中每個元素有且只有乙個直接前驅 除最後乙個元素無後繼外,集合中每個元素有且只有乙個直接後繼。1 利用順序元素的儲存位置表示線性表中相鄰資料元素之間的前後關係,即線性表的邏輯結構與儲存...