数据结构链表插入:带头结点按位序插入、不带头结点按位序插入、前插操作

简介: 有思路分析和代码讲解和实现

image.png

按位序插入(带头节点)

ListInsert(&L,i,e):插入操作,在表L中的第i个位置插入指定的元素e

在第i个位置插入元素e(带头结点)

网络异常,图片无法展示
|

bool ListInsert(LinkList &L, int i, ElemType e){
    if(i<1)
        return false;
    LNode *p;   //指针p指向当前扫描到的结点
    int j=0;    //当前p指向的是第几个节点
    p=L;        //L指向头结点,头结点是第0个结点(不存数据)
    while(p!=Null && j<i-1){    //循环找到第i-1个结点
        p=p->next;
        j++;
    }
    if(p==Null)
        return false;
    LNode *s = (LNode *)malloc(sizeof(LNode));
    s->data = e;
    s->next = p->next;
    p->next = s;
    return true;   //插入成功
}

分析:如果i = 4 (插在表中),首先p会指向头结点,经过while循环后p会指向a3,通过malloc会申请一个结点,s指要插入的数据e,然后将s的下一个结点指向p的下一个结点,即a4;p的下一个结点在指向s;这样就完成了数据e的插入。

时间复杂度的: T(n) = O(n)

按位序插入(不头节点)

ListInsert(&L,i,e):插入操作,在表L中的第i个位置插入指定的元素e

在第i个位置插入元素e(带头结点),不存在第0个结点,因此在i=1的时需要特殊处理,思路和有带头结点相似

if(i==1){
    LNode *s = (LNOde *)malloc(sizeof(LNode));
    s->data = s;
    s->next = L;   
    L = s;         //头指针指向新结点
    return true;
}

当i=1的时候需要更改头指针L,当i>1的时候和带头结点代码逻辑是一样的

指定结点的前插操作

前插操作:在p结点之前插入结点s

网络异常,图片无法展示
|

分析思路:先把需要插入的新结点s还是插入到p结点后,即s结点的下一个结点还是指向p的下一个结点,p的下一个结点还是指向s;定义一个temp数据存储p的数据,从而达到p的data和s的data数据交换,这样就达到了前插操作,及在p结点之前插入结点s;

代码实现:

bool InsertProiorNode(LNode *p, LNOde *s){
    if(p==Null || s==Null)
        retrun false;
    s->next=p->next;
    p->next=s;
    ElemType temp=p->data;
    p->data=s->data;
    s->data=temp;
    retrun true;
}
目录
相关文章
|
20天前
链表的中间结点
链表的中间结点
170 57
|
1天前
|
Java
java数据结构,双向链表的实现
文章介绍了双向链表的实现,包括数据结构定义、插入和删除操作的代码实现,以及双向链表的其他操作方法,并提供了完整的Java代码实现。
java数据结构,双向链表的实现
|
22天前
|
存储 Java 索引
【数据结构】链表从实现到应用,保姆级攻略
本文详细介绍了链表这一重要数据结构。链表与数组不同,其元素在内存中非连续分布,通过指针连接。Java中链表常用于需动态添加或删除元素的场景。文章首先解释了单向链表的基本概念,包括节点定义及各种操作如插入、删除等的实现方法。随后介绍了双向链表,说明了其拥有前后两个指针的特点,并展示了相关操作的代码实现。最后,对比了ArrayList与LinkedList的不同之处,包括它们底层实现、时间复杂度以及适用场景等方面。
41 10
【数据结构】链表从实现到应用,保姆级攻略
|
1月前
|
存储 Java 程序员
"揭秘HashMap底层实现:从数组到链表,再到红黑树,掌握高效数据结构的秘密武器!"
【8月更文挑战第21天】HashMap是Java中重要的数据结构,采用数组+链表/红黑树实现,确保高效查询与更新。构造方法初始化数组,默认容量16,负载因子0.75触发扩容。`put`操作通过计算`hashCode`定位元素,利用链表或红黑树处理冲突。`get`和`remove`操作类似地定位并返回或移除元素。JDK 1.8优化了链表转红黑树机制,提升性能。理解这些原理能帮助我们更高效地应用HashMap。
32 0
|
1月前
|
存储 算法
【初阶数据结构篇】顺序表和链表算法题
此题可以先找到中间节点,然后把后半部分逆置,最近前后两部分一一比对,如果节点的值全部相同,则即为回文。
|
1月前
|
存储 测试技术
【初阶数据结构篇】双向链表的实现(赋源码)
因为头结点的存在,plist指针始终指向头结点,不会改变。
|
1月前
|
存储 测试技术
【初阶数据结构篇】单链表的实现(附源码)
在尾插/尾删中,都需要依据链表是否为空/链表是否多于一个节点来分情况讨论,目的是避免对空指针进行解引用造成的错误。
|
1月前
|
算法
【数据结构与算法】共享双向链表
【数据结构与算法】共享双向链表
12 0
|
1月前
|
算法
【数据结构与算法】双向链表
【数据结构与算法】双向链表
11 0
|
1月前
|
算法
【数据结构与算法】循环链表
【数据结构与算法】循环链表
13 0