链表的插入与删除

插入算法的思路:

1.如果插入位置不合理,抛出异常

2.如果线性表长度大于等于数组长度,则抛出异常,或者动态增加容量

3.从最后向前遍历到第i的位置,分别都将他们向后移动一个位置。

4.将要插入元素插入i处

5.表长加一

删除算法思路:

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

2.取出删除元素

3.从删除元素开始遍历到最后一个元素,集体都向前移动一个位置。

4.表长减一

单链表的插入与删除:

例如节点p和节点p->next中间插入一个节点s,操作为:s->next=p->next;p->next=s

千万不能把顺序弄反,因为如果把p->next=s放在前面就会导致s的地址覆盖了p->next的地址,就会出现错误。

单链表插入第i个数据的基本思路:

1.声明一节点p指向链表第一个节点,初始化j从1开始。

2.当j

3.若到链表末尾p为空,说明第i个元素不存在

4.否则查找成功,生成空结点

5.将数据e赋给s—>data;

6.单链表的标准插入语句//s->next=p->next;p->next=s

7.返回成功

单链表上基本操作的实现:

按位序插入(带头结点)
==ListInsert(&L, i, e): ==在表L中的第i个位置上插入指定元素e = 找到第i-1个结点(前驱结点),将新结点插入其后;其中头结点可以看作第0个结点,故i=1时也适用。

按位序插入(不带头结点)
==ListInsert(&L, i, e): ==在表L中的第i个位置上插入指定元素e = 找到第i-1个结点(前驱结点),将新结点插入其后; 因为不带头结点,所以不存在“第0个”结点,因此!i=1 时,需要特殊处理——插入(删除)第1个元素时,需要更改头指针L;

.指定结点的后插操作:

InsertNextNode(LNode *p, ElemType e): 给定一个结点p,在其之后插入元素e; 根据单链表的链接指针只能往后查找,故给定一个结点p,那么p之后的结点我们都可知,但是p结点之前的结点无法得知;

你可能感兴趣的:(数据结构与算法,数据结构)