實現動態順序表

2021-10-02 22:09:55 字數 3954 閱讀 5502

seqlist.h

#pragma once   

//防止檔案被重複包含

#include

#include

#include

#include

//#define maxsize 20

#define defaultcapacity 20

typedef

int datatype;

//因為儲存的可能不只是整形,所以使用通用的型別

// seqlist儲存在連續的空間之中 --- 陣列

//靜態順序表

//struct seqlist

//;//動態順序表

//所以結構體中的動態空間不能給死

typedef

struct seqlist

seqlist;

void

seqlistinit

(seqlist* seq)

;//用指標的原因是,結構體可能比較大

//利用傳值的方式,就會有些浪費空間

void

seqlistprint

(seqlist* seq)

;void

seqlistdestroy

(seqlist* seq)

;//動態開闢的空間需要手動的進行釋放

void

seqlistpushback

(seqlist* seq, datatype data)

;//進行尾插的操作

void

seqlistpopback

(seqlist* seq)

;//尾刪

void

seqlistpushfront

(seqlist* seq, datatype data)

;//頭插

void

seqlistpopfront

(seqlist* seq)

;//頭刪

void

seqlistinsert

(seqlist* seq,

int index, datatype data)

;//在任意位置進行插入

void

seqlisterase

(seqlist* seq,

int index)

;//在任意位置進行刪除

intseqlistfind

(seqlist* seq, datatype data)

;//查詢元素

void

seqlistremove

(seqlist* seq, datatype data)

;//移除第乙個值為data的元素

void

seqlistremoveall

(seqlist* seq, datatype data)

;//移除所有值為data的元素

intseqsize

(seqlist* seq)

;//獲取順序表中元素的個數

intseqcapacity

(seqlist* seq)

;//獲取順序表的容量

intseqlistempty

(seqlist* seq)

;//判斷順序表是否為空

datatype seqlistfront

(seqlist* seq)

;//獲取順序表的第乙個元素

datatype seqlistlast

(seqlist* seq)

;//獲取順序表的最後乙個元素

seqlist.c
#include

"seqlist.h"

static

void

checkcapacity

(seqlist *seq)

memcpy

(newarray, seq->array, seq->_size *

sizeof

(datatype));

//釋放就空間

free

(seq->array)

; seq->array = newarray;

seq->_capacity = newcapacity;}}

void

seqlistinit

(seqlist* seq)

//如果if不成立,說明申請空間已經成功了

seq->_size =0;

seq->_capacity = defaultcapacity;

}void

seqlistdestroy

(seqlist* seq)

void

seqlistpushback

(seqlist* seq, datatype data)

//尾插

void

seqlistpopback

(seqlist* seq)

//尾刪

void

seqlistprint

(seqlist* seq)

printf

("\n");

}void

seqlistpushfront

(seqlist* seq, datatype data)

seq->array[0]

= data;

seq->_size++;}

void

seqlistpopfront

(seqlist* seq)

} seq->_size--;}

void

seqlistinsert

(seqlist* seq,

int index,datatype data)

//然後還需要檢測容量是否夠用

checkcapacity

(seq)

;for

(int i = seq->_size -

1; i >= index; i--

) seq->array[index]

= data;

seq->_size++;}

void

seqlisterase

(seqlist* seq,

int index)

for(

int i = index; i <= seq->_size -

2; i++

) seq->_size--;}

intseqlistfind

(seqlist* seq, datatype data)

return-1

;}void

seqlistremove

(seqlist* seq, datatype data)

void

seqlistremoveall

(seqlist* seq, datatype data)

//還可以通過一遍遍歷,單獨呼叫erase

//還可以通過提供輔助空間,此時空間複雜度為o(n),時間複雜度為0(n)

/* int count=0; //記錄待刪除元素的個數

for(int i=0;i_size;i++)

//這種方法的時間複雜度為o(n),空間複雜度為o(1)

*/}intseqlistsize

(seqlist* seq)

intseqlistcapacity

(seqlist* seq)

intseqlistempty

(seqlist* seq)

datatype seqlistfront

(seqlist* seq)

datatype seqlistlast

(seqlist* seq)

#include

"seqlist.h"

intmain()

動態實現順序表

順序表是在計算機記憶體中以 陣列的形式儲存的線性表,是指用一組位址連續的 儲存單元 依次儲存 資料元素 的線性結構。線性表採用順序儲存的方式儲存就稱之為順序表。順序表是將表中的結點依次存放在計算機記憶體中一組位址連續的 儲存單元中。下面來進行順序表的動態實現 標頭檔案 ifndef seqlist ...

實現動態順序表

標頭檔案seqlist.h中 pragma once include include typedef int datatype typedef struct seqlist seqlist 列印順序表 void printseqlist seqlist pseq printf n 增大容量 void...

實現動態順序表

靜態順序表和動態順序表之間的區別就是靜態順序表的儲存大小一旦設定好之後便不能修改 顯然動態順序表採用的是動態分配記憶體,容量是可以增加的,當然動態順序表要比靜態順序表多增加乙個監測容量的引數,每當當前容量存滿的時候就要觸發擴容機制,實現動態開闢記憶體。由於兩者差別不是很大,這裡我就只實現動態順序表,...