顺序表概念:
顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构。一般情况下用数组存储。在数组上完成数据的增删查改。
代码解析:
1.准备工作
1. 首先对一些头文件的引用和创建一个结构体,结构体包含一个数组,size表示该数组目前有多少个元素,capacity表示目前数组能存多少个元素。例如:
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<assert.h>
typedef int DataType;
typedef struct SeqList
{
DataType* a;
int size;
int capacity;
}SL;
2.创建一个顺序表
SL sl;
二、顺序表的基本操作
1.顺序表的初始化函数
注意这里的参数得是指针,形参是实参的一份临时拷贝,所以得把地址传给函数才能改变值。
void SeqListInit(SL* sl)
{
sl->a = NULL;
sl->size = 0;
sl->capacity = 0;
}
2.尾插函数(在尾部插入数据)
写尾插函数之前我们得先判断一下数组空间是否够。例如下面的例子。
所以我们要先检查空间是否满了,满了就扩容
将这个判断空间函数命名为 void CheckSpace(SL* sl) (这是动态顺序表区别于静态顺序表最主要的部分)
void CheckSpace(SL* sl)
{
if (sl->size == sl->capacity)
{
//因为capacity一开始等于0,所以先给capacity一个值
int newcapacity = sl->capacity == 0 ? 4 : sl->capacity * 2;
DataType* tmp = (DataType*)realloc(sl->a, sizeof(DataType)*newcapacity);
if (tmp == NULL)
{
printf("开辟失败\n");
exit(-1);
}
else
{
sl->capacity = newcapacity;
sl->a = tmp;
}
}
}
尾插函数:
void SeqListPushBack(SL* sl, DataType x)
{
CheckSpace(sl);
sl->a[sl->size] = x;
sl->size++;
}