1、顺序表动态存储
typedef struct SeqList
{
SLDataType* a; // 指向动态开辟的数组
size_t size ; // 有效数据个数
size_t capicity ; // 容量空间的大小
}SeqList;
2、顺序表初始化
void SeqListInit(SeqList* ps)
{
assert(ps);
ps->a=NULL;
ps->size=0;
ps->capacity=0;
}
3、顺序表销毁
void SeqListDestory(SeqList* ps)
{
assert(ps);
free(ps->a);
ps->a=NULL;
ps->size = ps->capacity = 0;
}
4、顺序表打印
void SeqListPrint(SeqList* ps)
{
assert(ps);
for(size_t i=0;i<ps->size;++i)
{
printf("%d",ps->a[i]);
}
printf("\n");
}
5、顺序表检查空间,如果满了,进行增容
void CheckCapacity(SeqList* ps)
{
if(ps->size == ps->capacity)
{
size_t newcapacity = ps->capacity == 0 ? 4 : ps->capacity*2;
ps->a = (SLDataType*)realloc(ps->a,newcapacity);
ps->capacity = newcapacity;
}
}
6、顺序表尾插
void SeqListPushBack(SeqList* ps,SLDataType x)
{
assert(ps);
CheckCapacity(ps);
ps->a[ps->size]=x;
ps->size++;
}
7、顺序表头插
void SeqListPushFront(SeqList* ps,SLDataType x)
{
assert(ps);
CheckCapacity(ps);
size_t end = ps->size;
while(end>0)
{
ps->a[end] = ps->a[end-1];
--end;
}
ps->a[0] = x;
++ps->size;
}
8、顺序表头删
void SeqListPopFront(SeqList* ps)
{
assert(ps);
size_t start = 1;
while(start<ps->size)
{
ps->a[start-1]=ps->a[start];
++start;
}
--ps->size;
}
9、顺序表尾删
void SeqListPopBack(SeqList* ps)
{
assert(ps);
ps->size--;
}
10、顺序表查找
void SeqListFind(SeqList* ps,SLDataType x)
{
for(size_t i=0;i<ps->size;++i)
{
if(ps->a[i]==x)
{
return i;
}
}
return -1;
}
11、顺序表在pos位置插入x(可实现头插、尾插)
void SeqListInsert(SeqList* ps, size_t pos, SLDataType x)
{
assert(ps);
assert(pos <= ps->size);
CheckCapacity(ps);
size_t end = ps->size;
while(end > pos)
{
ps->a[end] = ps->a[end-1];
--end;
}
ps->a[pos]=x;
ps->size++;
}
12、顺序表删除pos位置的值(可实现头删、尾删)
void SeqListErase(SeqList* ps, size_t pos)
{
assert(ps && pos<=ps->size);
size_t start = pos+1;
while(start < ps->size)
{
ps->a[start-1] = ps->a[start];
++start;
}
ps->size--;
}