上一次我們實現了靜態順序表,靜態順序表的大小固定,不方便我們去訪問資料。
而動態順序表就可以很方便的訪問資料。
同樣,我們有以下介面要實現:
#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...