什么是顺序表
-
顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。
-
顺序表:可动态增长的数组,要求数据是连续存储的
-
与链表的区别:同样是存储想同类型数据的线性表,但是链表两个节点之间使用指针进行链接,相比来说占用更大的空间,但是对于增加和删除节点时相比比顺序表更快。
静态顺序表和动态顺序表
-
静态顺序表:静态顺序表通过一个提前分配好了的数组进行存储数据,优点是不能很好评估分配的大小
-
动态顺序表:动态顺序表是通过动态分配数组的大小进行存储数据,优点是可以动态分配大小,缺点是在扩容过程中可能比较复杂
动态顺序表
顺序表的数据结构定义
typedef struct OrderLists {
int *datas;
int maxsize;
int size;
}OrderList;
size代表当前顺序表已经存储的数据量,maxsize表示当前顺序表所能存储的最大数据,当size=maxsize时会进行扩容操作,datas是用来存储数据的动态数组,数组大小动态分配。
顺序表的初始化
// 初始化顺序表
void initOrderList(OrderList* list,int maxsize) {
list->datas = (int*)malloc(maxsize * sizeof(int));
list->maxsize = maxsize;
list->size = 0;
}
在初始化时定义一个预先分配的最大值,通过malloc函数进行分配内存,maxsize相应进行赋值,size分配为0
顺序表扩容
/// <summary>
/// 顺序表扩容,扩容为原来内容的两倍
/// </summary>
/// <param name="list"></param>
void expansion(OrderList *list) {
// 申请两倍当前maxsize的内存
int* new_data = malloc(2 * list->maxsize * sizeof(int));