数据结构算法-顺序表、栈和队列-顺序表的删除元素操作(适用考研408)

一、简单描述

如果要实现ListDelete(SeqList *L,int i,ElemType e),即在线性表L中的第i个位置删除e元素

结果:删除元素后每个位置都需要前移一位

(图源:程杰《大话数据结构(溢彩加强版)》)

二、详细步骤:

1.如果线性表为空,输出异常信息

if(L->length==0)

{

    return ERROR;

}

2.如果删除位置不合理,输出异常信息

if(i<1||i>L->length)

{

    return ERROR;

}

3.因为数组从0开始,所以第i个也就是在i-1的位置取出删除元素,放到e中

*e=L->data[i-1]

4.如果删除的元素不在表尾,从删除位置遍历到线性表最后一个位置,分别将他们前移一个位置

if(i<=L->length)

{

  for(k=i;k<L->length;k++)

   {

      L->data[k-1]=L->data[k];

    }

}

5.表长减1

L->length--;

三、完整代码:


#define MAXSIZE 100  // 定义顺序线性表的最大容量
 
typedef struct {
    ElemType data[MAXSIZE];  // 数据存储区域
    int length;  // 当前线性表的长度
} SeqList;
 
#define OK 1


    int k;
    if (L->length == 0) /* 线性表为空 */
        return ERROR;
    if (i < 1 || i > L->length) /* 删除位置不正确 */
        return ERROR;
    
    *e = L->data[i - 1]; /* 将要删除的元素的值存储在指针 e 指向的位置 */

    if (i < L->length) { /* 如果删除不是最后位置 */
        for (k = i; k < L->length; k++) /* 将删除位置后继元素前移 */
            L->data[k - 1] = L->data[k];
    }
    
    L->length--; /* 线性表长度减少 */
    return OK;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值