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

一、简单描述

如果要实现ListInsert(SeqList *L,int i,ElemType e),即在顺序表L中的第i(1<=i<=L,length+1)个位置上插入元素e

插入元素后的每一个位置都需要后移一位

如图所示:

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

二、详细步骤:

1.如果插入位置不合理,即i不在线性表范围内时,结束程序,输出异常信息

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

{

   return ERROR;

}

2.如果线性表的长度大于等于数组的长度,结束程序,输出异常信息

if(L->length>=MAXSIZE)

{

   return ERROR;

}

3.如果i插入的位置不在表尾,从顺序表的最后一个元素开始向前遍历到第i个元素,分别将它们向后移动一个位置

因为数组是从0开始,所以k=L->length-1,从后面依次递减

if(i<=L->length)

    for(k=L->length-1;k>=i;k--)

    {   

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

    }

}

4.在第i个位置插入元素e

也是因为数组是从0开始,所以用的是L.data[i-1]

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

5.线性表表长加1

L->length++;

三、完整代码:

#define MAXSIZE 100  // 定义顺序线性表的最大容量

typedef struct {
    ElemType data[MAXSIZE];  // 数据存储区域
    int length;  // 当前线性表的长度
} SeqList;

#define OK 1
#define ERROR 0

int ListInsert(SeqList *L, int i, ElemType *e) {
    int k;
    if (L->length == MAXSIZE) { /* 顺序线性表已经满 */
        return ERROR;
    }
    if (i < 1 || i > L->length + 1) { /* 当 i 不在范围内时 */
        return ERROR;
    }
    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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值