线性表初始化、插入、删除操作

顺序表的定义:

#define LIST_INIT_SIZE 100

#define LIST_INCREMENT 10

struct SqList{

      ElemType *elem;

      int listsize;

      int length;

}SqList;

 

status ListInit_Sq(SqList &L)

{

      L.elem=(ElemType*)malloc(LIST_IINIT_SIZE*sizeof(ElemType));

      if(!L.elem)

            exit(0);

      L.listsize=LIST_INIT_SIZE;

      L.length=0;

      return OK;

顺序表的插入操作(从新分配所有空间)

status ListInsert_Sq(SqList &L,int i,ElemType elem)

{

      if(i<0||i>L.length)//插入位置有误

            return ERROR;

      if(L.listsize==L.length){//需要扩展空间

            ElemType *pe=0;

            pe=(ElemType*)malloc((L.listsize+LISTINCREMENT)*sizeof(ElemType));

            if(!pe)

                  exit(0);

            for(int index=0;index<i;++i){

                  pe[index]=L.elem[index];

            }

            pe[i]=elem;

            for(int index=i;index<L.length;++i){

                  pe[index+1]=L.elem[index];

            }

            L.elem=pe;

            ++L.length;

            L.listsize+=LISTINCREMENT;

      }//无需增加空间,只是搬动元素

      for(int index=L.length;index>i;--index){

            L.elem[index]=L.elem[index-1];

      }

      L.elem[i]=elem;

      ++L.length;

}

//算法改进:

//注意:

//线性表的位置参数i映射到顺序表中对应的是下表为i-1的元素值

//在第i个元素之前插入一个元素时,需将第n至第i个元素向后移动一个位置

status ListInsert(SqList &L,int i,ElemType elem)

{

      if(i<1||i>L.length+1)

            return ERROR;

      if(L.length>=L.listsize){

            ElemType *newbase=(ElemType *)realloc(L.elem,(L.listsize+LIST_INCREMENT)*sizeof(ElemType));

            if(!newbase)

                  exit(OVERFLOW);

            L.elem=newbase;

            L.listsize+=LIST_INCREMENT;

      }

      q=&(L.elem[i-1]);

      for(ElemType *p=L.elem+L.length;p!=q;--p){

            *p=*(p-1);

      }

      L.elem[i]=elem;

      ++L.length;

      }

 

顺序表的删除操作:

status ListDelete_sq(SqList &L,int i,ElemType &e)

{

      if(i<1||I>L.length)

            exit(ERROR);

      e=(L.elem)[i-1];

      for(int index=i-1;index<L.length-1;++index){

            (L.elem)[index]=(L.elem)[index+1];

      }

      --L.length;

      return OK;

}

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值