資料結構之線性表的順序儲存結構實現

2021-09-17 05:02:21 字數 4036 閱讀 1483

3 主要操作實現

線性表(list,鍊錶):零個或多個資料元素的有限序列

元素之間是有順序的,若存在多個元素,則第乙個元素無前驅,最後乙個元素無後繼,其他每個元素都有且只有乙個前驅和後繼。

線性表的順序儲存是指在記憶體中用位址連續的一塊儲存空間順序存放線性表的各元素。可以使用一維陣列來實現順序儲存結構。

typedef

struct _tag_seqlist

tseqlist;

這裡使用 typedef void seqlistnode 即:void 型別作為資料節點,可以儲存任意型別的資料元素。

順序儲存的三個屬性:

儲存空間:node

鍊錶的最大容量:capacity

鍊錶的當前長度:length

/* 

* seqlist.h

*/#ifndef __my_seqlist_h

#define __my_seqlist_h

typedef

void seqlist;

typedef

void seqlistnode;

seqlist*

seqlist_create

(int capacity)

;void

seqlist_destroy

(seqlist* list)

;void

seqlist_claer

(seqlist* list)

;int

seqlist_length

(seqlist* list)

;int

seqlist_capacity

(seqlist* list)

;int

seqlist_insert

(seqlist* list, seqlistnode* node,

int pos)

;seqlistnode*

seqlist_get

(seqlist* list,

int pos)

;seqlistnode*

seqlist_delete

(seqlist* list,

int pos)

;#endif

// __my_seqlist_h

seqlist*

seqlist_create

(int capacity)

tmp-

>node =

(unsigned

int*

)malloc

(sizeof

(unsigned

int*

)* capacity);if

(tmp-

>node ==

null

) tmp-

>length =0;

tmp-

>capacity = capacity;

return tmp;

}

//銷毀鍊錶

void

seqlist_destroy

(seqlist* list)

tlist =

(tseqlist *

)list;

if(tlist-

>node !=

null

)free

(tlist)

;return

;}

在鍊錶 list 的第 pos 位置,插入元素node。

操作:1)判斷list,node,pos的合法性。

2)如果鍊錶已滿,返回。

3)從最後乙個元素開始向前遍歷到第pos個位置,分別將他們都向後移動乙個位置。

4)將要插入元素填入位置pos處。

5)表長加1。

int

seqlist_insert

(seqlist* list, seqlistnode* node,

int pos)

tlist =

(tseqlist *

)list;

//鍊錶已滿

if(tlist-

>length == tlist-

>capacity)

//容錯修正 如果鍊錶已有6個元素, 容量為20, 使用者在pos=10處插入

if(pos > tlist-

>length)

for(i = tlist-

>length; i > pos; i--

) tlist-

>node[pos]

= node;

tlist-

>length++

;return0;

}

注意:下標從0開始計算,即第乙個元素在第0個位置。

seqlistnode*

seqlist_get

(seqlist* list,

int pos)

tlist =

(tseqlist *

)list;

return tlist-

>node[pos]

;}

刪除鍊錶list第pos個位置的元素,並返回其元素。

操作:1)判斷合法性。

2)取出元素。

3)從第pos個位置開始遍歷到最後乙個元素位置,並分別將它們都向前移動乙個位置。

4)表長減1.

seqlistnode*

seqlist_delete

(seqlist* list,

int pos)

tlist =

(tseqlist *

)list;

seqlistnode *tmp =

(seqlistnode *

)tlist-

>node[pos]

;for

(i = pos+

1; i < tlist-

>length; i++

) tlist-

>length--

;return tmp;

}

/*

* seqlisttest.cpp

*/#include

#include

#include

#include

"seqlist.h"

typedef

struct _teacher

teacher;

intmain()

//插入節點

ret =

seqlist_insert

(list,

(seqlistnode*

)&t1,0)

;//頭插法

ret =

seqlist_insert

(list,

(seqlistnode*

)&t2,0)

; ret =

seqlist_insert

(list,

(seqlistnode*

)&t3,0)

; ret =

seqlist_insert

(list,

(seqlistnode*

)&t4,0)

; ret =

seqlist_insert

(list,

(seqlistnode*

)&t5,0)

;//遍歷

for(i =

0; i <

seqlist_length

(list)

; i++

)//刪除節點

while

(seqlist_length

(list)

>0)

system

("pause");

return0;

}

優點:

缺點:

資料結構之線性表 順序儲存

從新在學習一遍資料結構,每天盡量都寫點!fuction the list struct by xiaolong date 2012年 03月 13日 星期二 16 50 12 cst 功能 線性表的順序儲存實現 主要功能 include include define max size 20 defi...

資料結構 線性表之順序儲存

第i個元素與第乙個元素的儲存位置滿足 loc ai loc a1 i 1 m include include include include 線性表的順序儲存 define max size 100 定義線性表最大長度 順序儲存的缺陷之一 typedef structdata typedef str...

資料結構之線性表 順序儲存

線性表作為一種最簡單的資料結構,在資料的管理和運用方面有著很大的作用,而這種特殊的資料集合,其自身有著很強的特點 線性表 線性表是n個型別相同的資料元素的有限集合,且n大於0,除第乙個元素無直接前驅,和最後乙個元素沒有直接後繼以外,其餘的每個元素都有乙個直接前驅和乙個直接後繼,而且元素之間具有一對一...