由於靜態順序表開闢後記憶體是固定的,而需要存入的資料比較大而且需要變動時,此時靜態順序表是有缺陷的,這時就需要動態開闢;動態順序表是基於靜態順序表所實現的,它空間不夠時可以自動增容。
下面是具體**的實現:
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...
動態順序表
順序表是在進算計記憶體總以陣列的形式儲存的線性表,是指用一組位址連續的儲存單元依次儲存資料元素的線性結構。線性表採用的順序儲存就稱之為順序表。順序表是將表中的節點依次存放在計算機記憶體中一組位址連續的儲存單元中。任務要求 實現乙個動態順序表 功能要求 表可以動態增長,尾插元素,尾刪元素,頭插元素,頭...