顺序表:
顺序表是用一段物理地址的存储单元一次存储数据元素的线性结构,一般情况下采用“数组存储”,在数组上完成数据的增删查改。
头插 尾插 头删 尾删
void SeqlistPushBack(PSeq ps, DataType data)//尾插
{
assert(ps);//保证顺序表存在
ps->_array[ps->_size] = data;//把增加的数字放到size位置
ps->_size++;//把size往后移一位
}
void SeqListPopback(PSeq ps)//尾删
{
assert(ps);
if (SeqListEmpty(ps))
return;//删除时判断顺序表是否为空
ps->_size--;//只需size往前走,覆盖最后一个有效元素
}
void SeqlistPushFront(PSeq ps, DataType data)//头插
{
assert(ps);
for (int i = ps->_size - 1; i >= 0; i--)//将顺序表中所有元素往后搬移一位
{ //从size-1开始
ps->_array[i + 1] = pa->_array[i];//把i搬到i+1的位置
}
ps->_array[0] = data;//插入元素从0位置开始
ps->_size++;//更新size的位置
}
void SeqListPopFront(PSeq ps)//头删
{
if (SeqListEmpty(ps))//删除时判断顺序表是否为空
return;
for (int i = 1; i < ps->_size; i++)//
ps->_array[i - 1] = ps->_array[i];
ps->_size--;
}
void SeqListInsert(PSeq ps, int pos, DataType data)//任意位置的插入
{
assert(0);
if (pos<0 || pos>ps->_size)//pos位置比较特殊,不能进行插入
return;
CheckCapacity(ps);
for (int i = ps->_size - 1; i > pos; i--)
ps->_array[i + 1] = ps->array[i];
ps->_array[pos] = data;
ps->_size++;
}
void SeqListErase(PSeq ps, int pos)//任意位置的删除
{
assert(ps);
if (pos < 0 || pos >= ps->_size)
return;
for (i=pos+1;i<ps->_size;i--)
ps->_array[i - 1] = ps->_array[i];
ps->_size--;
}
int SeqListFind(PSeq ps, int pos, DataType data)//元素的查找
{
assert(ps);
for (int i = 0; i < ps->_size; i++)
{
if (ps->_array[i] == data)
return i;
}
return -1;
}
int SeqLIstSize(PSeq ps)//有效元素的个数
{
assert(ps);
return ps->_size;
}
int SeqListCapacity(PSeq ps)//容量
{
assert(ps);
return ps->_capacity;
}
void SeqListClear(PSeq ps)//清空有效元素
{
assert(ps);
ps->_size = 0;
}
void SeqLIstRomve(PSeq ps, DataType data)
{
SeqListErase(ps.SeqListFind(ps, data));//找到该元素,再删除
}
void CheckCapacity(PSeq ps)//扩容 ,一般扩大两倍
{
assert(ps);
if (ps->_size == ps->_capacity)//有效元素的个数等于总的容量需要扩容
{
int newCapacity = ps->capacity * 2;//申请新空间
int* pTmp = (DataType*)malloc(newCapacity * sizeof(DataType));
//临时空间大小 ——每个元素占datatype个字节
if (NULL == pTmp)//判断空间是否申请成功
{
assert(0);
return;
}
for (int i = 0; i < ps->_size; i++)//拷贝旧空间中的元素
pTmp[i] = ps->_array[i];
free(ps->_array);//释放旧空间
ps->_array = pTmp;//更新参数
ps->_capacity = newCapacity;
}
}
顺序表常见操作
最新推荐文章于 2022-06-01 12:45:21 发布