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;
}
}
代码演示:
#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;
}
步骤: