顺序处处结构的插入与删除

1. 获得元素操作

#define OK 1

#define ERROR 0

#define TRUE 1

#define FALSE 0

typedef int Status;

/*Status是函数的类型,其值是函数结果状态码,如OK等*/

/*初始条件:顺序线性表L已存在,1<=i<=ListLength(L)*/

/*操作结果:用e返回L中第i个数据元素的值*/

Status GetElem(SqList L, int i, ElemType *e){

if(L.length==0 || i<1 ||i>L.length)return ERROR;

*e = L.data[i-1];

return OK;

}

2. 插入操作

插入算法思路:

插入位置不合理,抛出异常;

如果线性表长度大于这个数组长度,则抛出异常或动态增加容量;

从最后一个元素开始向前遍历到第i个位置,分别将它们都向后移动一个位置;

将要插入元素填入第i处;

表长加1。

实现代码如下:

Status ListInsert(SqList *L. int i, ElemType e){

int k;

if(L->length == MAXSIZE) return ERROR;   /*顺序线性表已满*/

if (i<1 || i>L->length+1) return ERROR;   /*当 i 不在范围内时*/

if(i<= L->length)  /*若插入数据位置不在表尾*/

{

    for(k=L->length-1; k>=i-1; k--) /*将要插入的位置后数据元素向后移动一位*/

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

}

L->data[i-1] = e;  /*将新元素插入*/

L->length++;

return OK;

}

3. 删除操作

算法思路:

如果删除位置不合理,抛出异常;

取出删除元素;

从删除元素开始遍历到最后一个元素,分别将它们都向前移动一个位置;

表长减1。

实现代码如下:

/*初始条件:顺序线性表L已存在,1<= i <= ListLength(L) */

/*操作结果:删除L的第 i 个数据元素,并用 e 返回其值,L的长度减 1*/

Status ListDelete(SqList *L, int i, ElemType *e){

int k;

if (L->length == 0)  return ERROR;   /*线性表为空*/

if(i<1 || i>L->length)  return ERROR;   /*删除位置不正确*/

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

if(i<L->length)   /*如果删除不是最后位置*/

{

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

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

}

L->length--;

return OK;

}

时间复杂度分析:

存取数据时间复杂度为O(1);

插入或删除 时间复杂度为O(n);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值