【数据结构】定长顺序表的操作(初始化、删除插入(按位置插入、头插、尾插)、删除(按元素值删除、按位置删除)、清空

定长顺序表

顺序表的常见操作:初始化、插入(按位置插入、头插、尾插)、删除(按元素值删除、按位置删除)、清空

  • 插入:
//判空
static void DeterPointIsNull(pFixedSeqList list)  
{
 assert(list != NULL);
 if (list == NULL)
 {
  printf("list is NULL, Please check\n");
  exit(0);   
 }
}


// 对于顺序表的初始化
void InitFixedSeqList(pFixedSeqList list)
{
   DeterPointIsNull(list);
   list->length = 0;
}

// 根据pos位置插入val值
int InsertFixedSeqListPos(pFixedSeqList list, ElemType val, int pos)
{ 
   DeterPointIsNull(list);               //1.判断list是否为空
   if(list->length==LISTSIZE)            //2.判断顺序表是否还有存储空间
   {
     return 0;
   }
   if(pos<0||pos>list->length)           //3.判断pos位置是否合法
   {
     return 0;
   }
   int i=0;
   for(i=list->length;i>pos;i--)         //4.将pos位置和其后面的值统一向后挪一个位置
   {
     list->data[i]=list->data[i-1];
   }
   list->data[pos]=val;                  //5.将val值存储到pos
   list->length++;                       //6.顺序表length+1
   return 1;
}

// 头插
int InsertFixedSeqListHead(pFixedSeqList list, ElemType val)
{
   return InsertFixedSeqListPos(list, val, 0);
}
//尾插
int InsertFixedSeqListTail(pFixedSeqList list, ElemType val)
{
   DeterPointIsNull(list);
   return InsertFixedSeqListPos(list, val, list->length);
}

- 删除
按位置删除

//按位置删除
int DeleteFixSeqListpos(pFixedSeqList list,int pos)
{
   DeterPointIsNull(list);
   if(pos<0||pos>=list->length)
   {
      printf("pos is error\n");
      return 0;
   }
   for(int i=pos;i<=list->length-1;i++)        //注意临界值问题   如果删除最后一个,data[i+1]就会越界
   {
      list->data[i]=list->data[i+1];
   }
   list->length--;
   return 1;
}

注意临界值问题 如果是i<=list->length,删除最后一个,data[i+1]就会越界
按元素值删除:

int DeleteFixSeqListElem(pFixedSeqList list, ElemType val)
{
   DeterPointIsNull(list);
   int i=0;
   int j=0;
   while(j<list->length)
   {
      if(list->data[j]=val)
      {
         j++;
      }
    else
    {
      list->data[i++]=list->data[j++];
    }
   }
   list->length=i;
   return 1;
}
  • 清空
void ClearFixedSeqlist(pFixedSeqList list)
{
 DeterPointIsNull(list);
 list->length==0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值