C語言動態順序表的實現

2021-08-20 23:35:42 字數 3987 閱讀 2840

上一次我們實現了靜態順序表,靜態順序表的大小固定,不方便我們去訪問資料。

而動態順序表就可以很方便的訪問資料。

同樣,我們有以下介面要實現:

#ifndef __seqlist_h__

#define __seqlist_h__

#include#include#include#include#define max 3

typedef int datatype;

typedef struct seqlist

seqlist, *pseqlist;

//初始化

void initseqlist(pseqlist pseq);

//銷毀初始化的空間

void destorylist(pseqlist pseq);

//增容函式

void deletecapicitylist(pseqlist pseq);

//尾部插入

void pushback(pseqlist pseq, datatype d);

//尾部刪除

void popback(pseqlist pseq);

//頭部插入

void pushfront(pseqlist pseq, datatype d);

//頭部刪除

void popfront(pseqlist pseq);

//查詢指定元素

int find(pseqlist pseq, datatype d);

//指定位置插入

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

//刪除指定位置元素

void erase(pseqlist pseq, int pos);

//刪除指定元素

void remove(pseqlist pseq, datatype d);

//刪除所有的指定元素

void removeall(pseqlist pseq, datatype d);

//返回順序表的大小

int size(pseqlist pseq);

//判斷順序表是否為空

int empty(pseqlist pseq);

//氣泡排序

void bubblesort(pseqlist pseq);

//選擇排序

void selectsort(pseqlist pseq);

//選擇排序的優化

void selectsortop(pseqlist pseq);

//二分查詢

int binarysearch(pseqlist pseq, datatype d);

//二分查詢遞迴寫法

int binarysearch_r(pseqlist pseq, int left, int right, datatype d);

//列印

void printseqlist(pseqlist pseq);

#endif //__seqlist_h__

實現主函式:

#define _crt_secure_no_warnings 1

#include "seqlist.h"

void testpushback()

void testpushfront()

void testfind()

void testinsert_erase()

void testsize_empty()

void testsort()

int main()

實現子函式:

#define _crt_secure_no_warnings 1

#include"seqlist.h"

void initseqlist(pseqlist pseq)//初始化

memset(pseq->data, 0, (pseq->capicity)*sizeof(datatype));

} void destorylist(pseqlist pseq)//銷毀初始化的空間

void checkcapicitylist(pseqlist pseq)//增容函式

else

}}void pushback(pseqlist pseq, datatype d)//尾部插入

void popback(pseqlist pseq)//尾部刪除

pseq->sz--;

}void pushfront(pseqlist pseq, datatype d)//頭部插入

pseq->data[0] = d;

pseq->sz++;

}void popfront(pseqlist pseq)//頭部刪除

int i = 0;

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

pseq->sz--;

}int find(pseqlist pseq, datatype d)//查詢指定元素

int i = 0;

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

return -1;

}void insert(pseqlist pseq, int pos, datatype d)//指定位置插入

pseq->data[pos] = d;

pseq->sz++;

}void erase(pseqlist pseq, int pos)//刪除指定位置元素

int i = 0;

for (i = pos; i < pseq->sz - 1; i++)

pseq->sz--;

}void remove(pseqlist pseq, datatype d)//刪除指定元素

int i = 0;

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

pseq->sz--;

return;

} }}void removeall(pseqlist pseq, datatype d)//刪除所有的指定元素

int i = 0;

int count = 0;

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

pseq->sz = count;

}int size(pseqlist pseq)//返回順序表的大小

int empty(pseqlist pseq)//判斷順序表是否為空

else if (pseq->sz > 0)

return 1;

}void bubblesort(pseqlist pseq) //氣泡排序

} if (flag == 0)

}}void selectsort(pseqlist pseq)//選擇排序

if (max != pseq->sz - 1 - i)

}}void selectsortop(pseqlist pseq)//選擇排序的優化

if (max != end)

end--;

if (max == min)

min = max;

if (min != start)

start++; }}

int binarysearch(pseqlist pseq, datatype d)//二分查詢

else if (pseq->data[mid] < d)

else

return mid;

} return -1;

}int binarysearch_r(pseqlist pseq, int left, int right, datatype d)//二分查詢遞迴寫法

void printseqlist(pseqlist pseq)//列印

printf("\n");

}

這樣,動態的就實現了!

C語言動態實現順序表

順序表的動態儲存結構 typedef int datatype typedef struct seqlistd seqlistd,pseqlistd 部分函式操作 void initseqlistd pseqlistd pseq 初始化 void checkcapacity pseqlistd ps...

C語言動態順序表的實現

靜態順序表只適用於確定知道需要存多少資料的場景。靜態順序表的定長陣列導致n定大了,空間開多了浪費,開少了不夠用。所以現實中基本都是使用動態順序表,根據需要動態的分配空間大小,所以下面我們實現動態順序表。seqlist.h ifndef seqlist h define seqlist h inclu...

C語言實現動態順序表

include include include include ifndef list h define list h define default 3 初始化開闢容量大小 define int sz 2 每次固定增容大小 typedef int datatype typedef struct se...