在顺序表L中第i个位置上插入一个新的元素e

Status ListInsert_Sq(SqList &L , int i , ET e){

参考这篇文章就行了,有代码和运行结果
https://liuze.blog.csdn.net/article/details/126873103

//在双链表L的第i个位置插入值为e的结点
int ListInsert(DLinkNode *&L,int i,ElemType e)
{
    //p指向头结点,j设为0
    int j=0;
    DLinkNode *p=L,*s;
    //i错误时返回false
    if(i<0)
        return false;
    //查找第i-1个结点
    while(j<i-1&&p!=NULL)
    {
        j++;
        p=p->next;
    }
    //未找到第i-1个结点,返回false
    if(p==NULL)
        return false;
    //找到第i-1个结点
    else
    {
        //创建新结点s
        s=(DLinkNode *)malloc(sizeof(DLinkNode));
        s->data=e;
        //在p结点之后插入s结点
        s->next=p->next;
        //若p结点存在后继结点,修改其前驱结点
        if(p->next!=NULL)
            p->next->prior=s;
        s->prior=p;
        p->next=s;
        return true;
    }
}
  • 以下回答由chatgpt基于相关博客总结生成:

    代码演示:

    #define MAXSIZE 100  //假设线性表最大长度为100 
    typedef struct {
        ElemType data[MAXSIZE];//数据
        int length;//线性表当前长度
    }SqList;
    
    Status ListInitsert(SqList* 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;
    }
    

    步骤:

    1. 判断插入位置是否合法,不合法返回错误状态ERROR
    2. 如果线性表已满返回错误状态ERROR
    3. 如果插入位置不在表尾,需要将插入位置后的元素向后移动一位,然后将要插入的元素填入插入位置
    4. 线性表长度加1