#include"SeqList.h"
void SeqListInit(SL* s)
{
s->arr = (SLDataType*)malloc(sizeof(SLDataType) * 10);//动态开辟内存。
if (s->size==NULL)
{
printf("申请内存失败!\n");
exit(-1);
}
s->size = 0;
s->capicity = 20;
}
void SeqListDistory(SL* ps)
{
free(ps->arr);
ps->arr = NULL;
ps->capicity = ps->size = 0;
}
void SeqListprint(SL* ps)
{
assert(ps);
for (size_t i = 0; i < ps->size; i++)
{
printf("%d ", ps->arr[i]);
}
printf("\n");
}
void SeqListCheckCapicity(SL* ps)
{
//如果满了,需要扩容,通常情况下增二倍。
if (ps->size >= ps->capicity)//如果数组的大小大于空间,则需要扩容。
{
ps->capicity *= 2;
ps->arr = (SLDataType*)realloc(ps->arr, sizeof(SLDataType) * ps->capicity);
}
if (ps->arr == NULL)
{
printf("扩容失败!\n");
exit(-1);
}
}
void SeqListPushBack(SeqList* ps, SLDataType x)
{
assert(ps);//assert 断言,条件为假的时候,报错并终止程序。
SeqListCheckCapicity(ps);
ps->arr[ps->size] = x;// 将数据类插入最后数组的最后一位。
ps->size++;
}
void SeqListPopBack(SeqList* ps)
{
assert(ps);
ps->arr[ps->size - 1] = 0;//一般不置0;残留着数据。可以找回,一般删数据,不删真数据。
ps->size--;
}
//循序表头部插入的思想:先将原有的数据挨个向后挪动一位,在把要插入的元素插到第一个位置。
void SeqListPushFront(SeqList* ps, SLDataType x)
{
assert(ps);
SeqListCheckCapicity(ps);//容量检查。
int momve_bit = ps->size - 1;
while (momve_bit>=0)
{
ps->arr[momve_bit+ 1] = ps->arr[momve_bit];
momve_bit--;
}
ps->arr[0] = x;//把X(顺序表元素类型)插入到数组的第0位。
ps->size++;//数组个数大小加1
}
void SeqListPopFront(SeqList* ps)
{
int i=0;
while (i<ps->size-1)
{
ps->arr[i]= ps->arr[i+ 1];
i++;
}
ps->size--;
}
void SeqListInsert(SeqList* ps, int pos, SLDataType x)//可以复用到头插,头删。
{
assert(ps);
assert(pos <= ps->size && pos >= 0);
SeqListCheckCapicity(&ps);
int i = ps->size-1;
while (i<pos)
{
ps->arr[i + 1] = ps->arr[i];
i++;
}
ps->arr[pos] = x;
ps->size++;
}
void SeqListErase(SeqList* ps, int pop)//可以复用到头删,尾删。
{
assert(ps);
assert(pop <= ps->size && pop >= 0);
int i = pop;
while (i<ps->size-1)
{
ps->arr[pop] = ps->arr[pop + 1];
++i;
}
ps->size--;
}
int SeqListSort(SL* psl, SLDataType x)
{
assert(psl);
int i = 0;
while (i<=psl->size-1)
{
if (psl->arr[i] == x)
{
return i;
}
else
++i;
}
return -1;
}
SeqList顺序表原文件
最新推荐文章于 2024-07-06 12:43:17 发布