由于固定长度的顺序表不能进行扩容,这里通过动态分配空间的方式实现顺序表,空间不够的时候会申请一块新的内存区域,并将旧的区域复制到新的区域,然后释放旧区域
#include<stdio.h>
#include<stdlib.h> //
#define InitSize 10
//顺序表 - 动态分配
typedef struct
{
int *data;//指针动态分配数组的指针
int MaxSize;//顺序表的最大容量
int length;//顺序表的长度
} SeqList;
//初始化顺序表
void InitList(SeqList & L)
{
//用 malloc 函数申请 长度为 InitSize 的连续空间
L.data = (int *)malloc(InitSize * sizeof(int));
L.length = 0;
L.MaxSize = InitSize;
}
void IncreaseSize(SeqList &L,int len)
{
int *p = L.data;
L.data = (int *)malloc((InitSize + len) * sizeof(int));
for(int i = 0; i < L.length; i++) {
L.data[i] = p[i];//复制旧数据到新区域
}
L.MaxSize = InitSize + len;//顺序表最大长度增加 len
free(p); // 释放原来的内存空间
}
int main()
{
SeqList L;
InitList(L);//初始化顺序表
IncreaseSize(L,5);
return 0;
}