SeqListD 順序表的動態實現

2021-08-04 15:41:28 字數 3277 閱讀 9781

由於靜態順序表開闢後記憶體是固定的,而需要存入的資料比較大而且需要變動時,此時靜態順序表是有缺陷的,這時就需要動態開闢;動態順序表是基於靜態順序表所實現的,它空間不夠時可以自動增容。

下面是具體**的實現:

seqlistd.h      //標頭檔案
#ifndef __seqlist_h__

#define __seqlist_h__

#include

#include

#include

#include

#define max 2

#define default_sz 3

#define default_inc 2 //預設增長

typedef int datatype; //int 型別重新命名為datatype

typedef struct seqlist

seqlist, *pseqlist;

void initseqlist(pseqlist ps);

void pushback(pseqlist ps, datatype d);

void popback(pseqlist ps);

void display(const pseqlist ps);

void pushfront(pseqlist ps, datatype d);

void popfront(pseqlist ps);

int find(pseqlist ps, datatype d);

void insert(pseqlist ps, datatype d, int pos);

void remove(pseqlist ps, datatype d);

void removeall(pseqlist ps, datatype d);

void reverse(pseqlist ps);

void sort(pseqlist ps);

int binarysearch(pseqlist ps, datatype d);

#endif //__seqlist_h__

seqlist.c   //相關函式的具體實現
#include "seqlistd.h"

void

initseqlist(pseqlist ps)

memset(ps->data, 0, default_sz*sizeof(datatype));//初始化

ps->capacity = default_sz;

}void

checkcapacity(pseqlist ps)

else

//printf("增容成功\n");

ps->capacity += default_inc;

}}void

pushback(pseqlist ps, datatype d)

void

popback(pseqlist ps)

ps->sz--;

}void

display(const pseqlist ps) //列印

printf("\n");

}void

pushfront(pseqlist ps, datatype d)

ps->data[0] = d;

ps->sz++;

}void

popfront(pseqlist ps)

for (i = 0; i < ps->sz - 1; i++)

ps->sz--;

}int

find(pseqlist ps, datatype d)

}return -1;

}void

insert(pseqlist ps, datatype d, int pos)//插入

checkcapacity(ps);//擴容

assert(ps->data != null);

for (i = ps->sz; i > pos; i--)

ps->data[pos] = d;

ps->sz++;

}void

remove(pseqlist ps, datatype d)

if (pos != -1)

}ps->sz--;

}void

removeall(pseqlist ps, datatype d) //移除所有的d

for (i = 0; isz; i++)

}}void

reverse(pseqlist ps) //逆序

while (left < right)

}void

sort(pseqlist ps) //排序 小—>—大

for (i = 0; i < ps->sz; i++)}}

}int

binarysearch(pseqlist ps, datatype d) //二分法查詢

while (left <= right)

else

if (d < ps->data[mid])

else

}return -1;

}

test.c   //測試**
#include "seqlistd.h"

void test1()

void test2()

void test3()

void test4()

void test5()

int main()

執行結果 test1 :

動態順序表

ifndef seqlist h define seqlist h define capacity 3 typedef struct seqlist typedef enum tag typedef struct findret void expendseqlist seqlist pseq 擴大容...

動態順序表

動態順序表 引用庫函式 include include 巨集定義 define list init size 4 define list add size 2 define overflow 2 typedef int elemtype elemtype元素型別 定義結構體 typedef stru...

動態順序表

順序表是在進算計記憶體總以陣列的形式儲存的線性表,是指用一組位址連續的儲存單元依次儲存資料元素的線性結構。線性表採用的順序儲存就稱之為順序表。順序表是將表中的節點依次存放在計算機記憶體中一組位址連續的儲存單元中。任務要求 實現乙個動態順序表 功能要求 表可以動態增長,尾插元素,尾刪元素,頭插元素,頭...