文章目录
- 前言
- 一、动态顺序表的概念
- 二、顺序表的结构体
- 三、基本接口
- 1.SeqListInit(初始化数组)
- 2.SeqListDestory(销毁数组)
- 3. SeqListCheckCapacity(检查改顺序表是否需要扩容)
- 4.SeqListPushBack(尾增)
- 5.SeqListPopBack(尾删)
- 6.SeqListPushFront(头插)
- 7.SeqListPopFront(头删)
- 8. SeqListFind(查找)
- 9.SeqListInsert(插入)
- 10.SeqListErase(删除)
前言
有几天没写了,现在补上,又水一篇(小声逼逼hh)
一、动态顺序表的概念
顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存
储。在数组上完成数据的增删查改
二、顺序表的结构体
typedef int SeqListDatatype;//这样子写的好处是随便可以修改存储的数据类型
typedef struct SeqList
{
SLDataType* a;//指针存储一个数组的首地址
int size;//表示数组存储了多少个数据
int capacity;//表示实际能够存储多少数据
}SL;
三、基本接口
1.SeqListInit(初始化数组)
void SeqListInit(SL*ps)//我们只需要传递结构体的指针就可以修改结构体里面的数据
{
ps->a = NULL;
ps->size = ps->capacity = 0;
}
2.SeqListDestory(销毁数组)
代码如下(示例):
void SeqListDestory(SL*ps)
{
free(ps->a); //我们只需要得到数组申请的首地址即可销毁掉改数组
ps->a = NULL;
ps->capacity =0;
ps->size = 0;
}
3. SeqListCheckCapacity(检查改顺序表是否需要扩容)
void SeqListCheckCapacity(SL* ps)
{
if (ps->size == ps->capacity)
{
int newcapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;//->的优先级比这里的运算符都高,如果该顺序表容量为零即赋值4,如果不为零即扩充到原来的两倍,而且newcapacity指的是个数
SLDataType* temp = (SLDataType*)realloc(ps->a, newcapacity * (sizeof(SLDataType)));
if (temp == NULL)
{
printf("realloc fail\n");
exit(-1);
}
ps->a = temp;
ps->capacity = newcapacity;
}
}
4.SeqListPushBack(尾增)
void SeqListPushBack(SL* ps, SLDataType x)
{
SeqListCheckCapacity(ps);
ps->a[ps->size] = x;
ps->size++;
}
5.SeqListPopBack(尾删)
void SeqListPopBack(SL*ps)
{
assert(ps->size > 0);
ps->size--;
}
6.SeqListPushFront(头插)
void SeqListPushFront(SL*ps,SLDataType x)
{
SeqListCheckCapacity(ps);
int end = ps->size-1;
while (end > 0)
{
ps->a[end + 1] = ps->a[end];
--end;
}
}
7.SeqListPopFront(头删)
void SeqListPopFront(SL*ps)
{
int begain = 0;
assert(ps->size > 0);
while (begain < ps->size - 1)
{
ps->a[begain] = ps->a[begain + 1];
begain++;
}
ps->size--;
}
8. SeqListFind(查找)
int SeqListFind(SL* ps, SLDataType x)
{
if (ps->size <= 0)
{
exit(-1);
}
for (int i = 0; i < ps->size; i++)
{
if (x == ps->a[i])
{
return i;
}
}
}
9.SeqListInsert(插入)
void SeqListInsert(SL* ps, int pos, SLDataType x)
{
SeqListCheckCapacity(ps);
int end = ps->size;
while (end>=pos)
{
ps->a[end] = ps->a[end - 1];
end--;
}
ps->size++;
}
10.SeqListErase(删除)
void SeqListErase(SL* ps, int pos)
{
assert(ps ->size > 0);
while (pos < ps->size)
{
ps->a[pos - 1] = ps->a[pos];
pos++;
}
ps->size--;
}