数据结构顺序表增删查改操作

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--;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值