資料結構 C語言 線性表的順序表示和實現

2021-09-26 07:01:53 字數 2709 閱讀 9188

線性結構的特點是:在資料元素的非空有限集中,(1)存在唯一乙個被稱作「第乙個」的資料元素;(2)存在唯一乙個被稱作「最後乙個」的資料元素;(3)除第乙個之外,集合中的每個元素均只有乙個前驅;(4)除最後乙個之外,集合中每個資料元素均只有乙個後繼。

線性表是最常用且最簡單的一種資料結構。乙個線性表是n個資料元素的有限序列。線性表中元素的個數n(n≥0)定義為線性表的長度,n=0時稱為空表。

線性表是乙個相當靈活的資料結構,它的長度可以根據需要增長或縮短,即對線性表的資料元素不僅可以進行訪問,還可以進行插入和刪除等。

線性表的順序表示指的是用一組位址連續的儲存單元依次儲存線性表的資料元素。

global.h

#ifndef global_h

#define global_h

#include

#define ok 1

// 通過

#define error 0

// 錯誤

#define overflow -2

// 堆疊上溢

typedef

int status;

// 函式型別,其值為狀態碼

typedef

int elemtype;

// 抽象資料型別

#endif

// !global_h

儲存結構

由於線性表的長度可變,且所需最大儲存空間隨問題不同而不同,在c語言中可用動態分配的一維陣列,如下描述。

#define list_init_size 10  

// 線性表儲存空間初始分配量

#define listincremrnt 10

// 線性表儲存空間的分配增量

// 線性表的動態分配順序儲存結構

typedef

struct sqlist

sqlist;

上述定義中,陣列指標elem指示線性表的基位址,length指示線性表的當前長度。順序表的初始化操作就是為順序表分配乙個預定義大小的陣列空間,並將線性表的當前長度設為「0」。listsize指示順序表當前分配的儲存空間大小,一旦因插入元素而空間不足時,可進行再分配,即增加乙個大小為儲存listincremrnt個資料元素的空間。

status initlist_sq

(sqlist* l)

// initlist_sq

插入和刪除

一般情況下,在第i(1≤i≤n)個元素之前插入乙個元素時,需將第n至第i(共n-i+1)個元素向後移動乙個位置。

// 在順序線性表l中第i個位置之前插入新的元素e

status listinsert_sq

(sqlist* l,

int i, elemtype e)

elemtype* q =

&(l->elem[i -1]

),* p =

null

;// q為插入位置

for(p =

&(l->elem[l->length -1]

); p >= q;

--p)

*(p +1)

=*p;

// 插入位置及之後的元素後移

*q = e;

// 插入e

++(l->length)

;// 表長增加1

return ok;

}// listinsert_sq

一般情況下,刪除第i(1≤i≤n)個元素時需將從第i+1至第n(共n-i)個元素依次向前移動乙個位置。

// 在順序線性表l中刪除第i個元素,並用指標e返回

status listdelete_sq

(sqlist* l,

int i, elemtype* e)

// listdelete_sq

測試

測試**:

int

main()

printlist_sq

(l);

elemtype* e =

(elemtype*

)malloc

(sizeof

(elemtype));

listdelete_sq

(l,5

, e)

;printf

("%d is del\n"

,*e)

;printlist_sq

(l);

return0;

}

演算法分析

在順序儲存結構的線性表中某個位置插入或者刪除乙個資料元素時,其時間主要耗費在移動元素上(換句話說,移動元素的操作為預估演算法時間複雜度的基本操作),而移動元素的個數取決於插入或刪除的元素的位置。

假設pi是在第i個元素之前插入乙個元素的概率,則在長度為n的線性表中插入乙個元素時所需移動元素次數的期望(平均次數)為:

假設qi是刪除第i個元素的概率,則在長度為n的線性表中刪除乙個元素時所需移動元素次數的期望(平均次數)為:

於是可分別進行化簡:

由上面兩式可見,在順序儲存結構的線性表中插入或者刪除乙個資料元素,平均移動表中一半元素。若表長為n,則演算法listinsert_sq和listdelete_sq的時間複雜度為o(n)。

資料結構 線性表的順序表示

1.相關概念 2.順序表的型別定義 順序表的儲存結構 define max 100 順序表可能達到的最大長度 typedef struct sq sqlist elemtype是乙個抽象資料型別 可以是int,float,double等或者是自定義的資料型別。在實際使用是可以使用int,float等...

資料結構之線性表(順序表示)

順序表定義 define maxsize 50 typedef struct sqlist 陣列動態分配 define maxsize 50 typedef struct sqlist 動態分配的語句 c l.data elemtype malloc sizeof elemtype initsize...

資料結構(C語言)線性表(順序表)

首先線性表的基本函式 1.initlist l 建立乙個空的線性表l 2.destorylist l 如果線性表已經存在的話,則銷毀線性表l 3.listlength l 返回線性表的元素個數 4.getlist l,i e 用e返回線性表第i個元素的值 5.locateelem l,e compa...