一、简单描述
如果要实现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;
}