資料結構 順序線性表

2021-09-08 15:04:01 字數 4314 閱讀 3079

/*

順序線性表標頭檔案

*/#ifndef _vzhangseqlist

#define _vzhangseqlisttypedef

void

seqlist;

typedef

void

seqlistnode;

//建立線性表

_declspec(dllexport)//

如果在動態庫中定義標頭檔案 這句話不可以缺少 不然會報錯 函式重定義

seqlist* seqlist_create(int

capacity);

//銷毀線性表

_declspec(dllexport)

int seqlist_destroy(seqlist**list);

//清空線性表

_declspec(dllexport)

int seqlist_clear(seqlist*list);

//獲取線性表長度

_declspec(dllexport)

int seqlist_length(seqlist*list);

//獲取線性表的容量

_declspec(dllexport)

int seqlist_capacity(seqlist*list);

//線性表指定位置插入元素

_declspec(dllexport)

int seqlist_insert(seqlist* list, seqlistnode* node, int

pos);

//獲取線性表指定位置的元素

_declspec(dllexport)

seqlistnode* seqlist_get(seqlist* list, int

pos);

//刪除線性表指定位置的元素

_declspec(dllexport)

seqlistnode* seqlist_delete(seqlist* list, int

pos);

#endif

//

動態庫**實現

#include#include

#include

#include

"seqlist.h

"typedef

struct

_tseqlist

tseqlist;

//建立線性表

_declspec(dllexport)//

檔案匯出關鍵字

seqlist* seqlist_create(int

capacity)

//分配指標域陣列

tlist->nodes = (unsigned int *)malloc(sizeof(int)*capacity);

if (tlist->nodes==null)

tlist->capacity =capacity;

tlist->length = 0

;

return (seqlist*)tlist;}//

銷毀線性表

_declspec(dllexport)

int seqlist_destroy(seqlist**list)

tseqlist * tlist = (tseqlist *)*list;

//釋放指標域陣列記憶體

if (tlist->nodes!=null)

//釋放線性表物件

if (tlist!=null)

return

erro_msg;}//

清空線性表

_declspec(dllexport)

int seqlist_clear(seqlist*list)

tseqlist *tlist = (tseqlist *)list;

memset(tlist->nodes, 0, sizeof(unsigned int)*tlist->capacity);

tlist->length = 0

;

return

erro_msg;}//

獲取線性表長度

_declspec(dllexport)

int seqlist_length(seqlist*list)

tseqlist *tlist = (tseqlist *)list;

return tlist->length;}//

獲取線性表的容量

_declspec(dllexport)

int seqlist_capacity(seqlist*list)

tseqlist *tlist = (tseqlist *)list;

return tlist->capacity;}//

線性表指定位置插入元素

_declspec(dllexport)

int seqlist_insert(seqlist* list, seqlistnode* node, int

pos)

tseqlist *tlist = (tseqlist *)list;

/*順序線性表指定位置插入元素 後面的元素必須後移

*///

判斷陣列元素是不是滿了

if (tlist->length >= tlist->capacity)

//判斷插入位置--線性表必須乙個個的插入 不能在容量位置向前插入 這樣陣列中間有些位置會空閒

if (pos<0 || pos>tlist->length)

for (i = tlist->length; i >pos; i--)

//將指標強轉為unsigned int型別

tlist->nodes[pos] = (unsigned int

) node;

//陣列元素個數加1

tlist->length++;

return

erro_msg;}//

獲取線性表指定位置的元素

_declspec(dllexport)

seqlistnode* seqlist_get(seqlist* list, int

pos)

tseqlist *tlist = (tseqlist *)list;

//判斷獲取位置

if (pos<0 || pos>tlist->length)

return (seqlistnode*)tlist->nodes[pos];}//

刪除線性表指定位置的元素

_declspec(dllexport)

seqlistnode* seqlist_delete(seqlist* list, int

pos)

tseqlist *tlist = (tseqlist *)list;

//判斷獲取位置

if (pos<0 || pos>tlist->length)

ret = tlist->nodes[pos];

for (i = pos; i < tlist->length-1; i++)

//最後元素置零--這一步也可以不要

memset(tlist->nodes + tlist->length - 1, 0, sizeof(unsigned int

));

//元素個數減1

tlist->length--;

return (seqlistnode*)ret;

}

//

順序線性表測試**

#define _crt_secure_no_warnings#include

#include

#include

#include

"seqlist.h

"typedef

struct

_studentstudent;

void

test()

//刪除線性表中的資料

student *delem = (student *)seqlist_delete(list, 1

); printf(

"我被刪除了,我的名字是%s;我的年齡是%d\n

", delem->name, delem->age);

//銷毀線性表

ret=seqlist_destroy(&list);

if (ret==0)printf("

線性表銷毀成功!\n");

資料結構 線性表 順序表

豐富了前邊的功能,更加完善。include include define list init size 100 線性表儲存空間的初始分配量 define listincrement 10 線性表儲存空間的分配增量 using namespace std const int overflow 2 ty...

資料結構 線性表 順序表

線性表是具有相同特性的資料元素的乙個有限序列。線性表的順序儲存結構是,把線性表中的所有元素按照其邏輯順序依次儲存到從計算機儲存器中指定的儲存位置開始的一塊連續的儲存空間。include include include define maxsize 50 using namespace std 假設l...

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

順序表就是把線性表中的所有元素按照其邏輯順序,依次儲存到從指定的儲存位置開始的一塊連續的儲存空間中。這樣線性表中第乙個元素的儲存位置就是指定的儲存位置,第i 1個元素的儲存位置緊接在第i個元素的儲存位置的後面。順序表就像如下圖中的房子,每個房間左邊的數字就是該房間離0點的距離,同時也代表了房間號,房...