概念
顺序表是将表中的数据依次存放在计算机内存中一组地址连续的存储单元中的一种数据结构,可以将顺序表看成一个可以动态改变大小的数组
数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系
是线性表的一种,采用顺序存储结构的线性表简称为"顺序表”,也就是在内存中连续存储
存储特点:只要确定了起始位置,数据可以通过指定位置得到:首地址+(位置*偏移大小)
基本操作:增、删、改、查
代码实现
typedef int Type;
//顺序表数据结构
typedef struct
{
Type *p;
int len;
int Maxsize;
}SqList;
//---创建空顺序表L---
bool InitList(SqList *L)
{
L->p = (Type *)malloc(L->Maxsize * sizeof(Type));//为顺序表动态开辟内存
if(!L->p)//未开辟成功
return false;
L->len = 0;
return true;
}
//---在顺序表第n个位置之前插入m---
bool Insert(SqList *L,int n,Type m)
{
if (L->len == L->Maxsize)//1.顺序表已满
return false;
if (n<1 || n>L->len+1)//2.插入位置不在范围内
return false;
if (n <= L->len)//3.插入位置不在表尾
{
for (int i = L->len-1; i >= n-1; i--)
{
L->p[i+1] = L->p[i];
}
}
L->p[n-1] = m;
L->len++;
return true;
}
//---将顺序表第n个位置的数删除---
bool Delete(SqList *L,int n)
{
if (L->len == 0)//1.顺序表为空
return false;
if (n<1 || n>L->len)//2.删除位置不在范围内
return false;
if (n < L->len)//3.删除位置不在表尾
{
for (int i = n-1; i <= L->len-2; i++)
{
L->p[i] = L->p[i+1];
}
}
L->len--;
return true;
}
//---将顺序表第n个位置的数改为m---
bool Change(SqList *L,int n,Type m)
{
if (L->len == 0)//1.顺序表为空
return false;
if (n<1 || n>L->len)//2.修改位置不在范围内
return false;
L->p[n-1] = m;
return true;
}