网站域名注册多少钱,微信的网站开发,医疗器械网站模板,wordpress theme sage一#xff1a;概述链表#xff08;Linked list#xff09;由一些节点组成#xff0c;物理存储非连续的线性表。其中每个节点都会存储下个节点的指针#xff0c;由于实际存储空间不连续#xff0c;对链表插入节点#xff0c;删除节点可以达到O(1)的复杂度#xff0c;但是… 一概述链表Linked list由一些节点组成物理存储非连续的线性表。其中每个节点都会存储下个节点的指针由于实际存储空间不连续对链表插入节点删除节点可以达到O(1)的复杂度但是对一个节点的访问需要O(n)的时间。链表有单向链表双向链表。二单向链表单向链表的每个节点有数据项和指针(指向下个节点地址数据)组成下图为一个单向链表表头没有数据项只有指向下一个节点的指针。表尾节点指向下一个节点pNext指针为NULL空。结构体表示为//单向链表节点数据结构
typedef struct linkNode
{void *val; //数据项(任意类型)struct linkNode *next;
}node;
插入节点操作单向链表中由四个数据节点数据1数据2数据3数据4现在数据1和数据2节点间插入数据5只需把数据1节点的pNext指向新的节点把新节点的pNext指向数据2节点即可。删除节点操作删除节点2只需把第一个节点的pNext执行数据3节点同时释放节点2的存储空间即可。三双向链表双向链表有别于单向的每个节点除了数据项外有两个指针分别指向前一个节点和后一个节点占用空间会大一些可以实现从头到尾的遍历又可以从尾到头遍历。结构体表示为//双向链表节点数据结构
typedef struct dLinkNode
{void *val; //数据项(任意类型)struct dLinkNode *prev; struct dLinkNode *next;
}node;
插入节点操作节点1与节点2之间插入新节点5需要把节点1的pNext指向节点5节点5的pHead指向节点1节点5的pNext指向节点2节点2的pHead指向节点5如下图所示删除节点操作删除节点2把节点1的pNext指向节点3把节点3的pHead指向节点1同时释放节点2的存储空间即可。四链表与数组区别1.链表存储空间不连续可以充分利用碎片空间数组的存储空间是连续的内存空间要求高必须要有足够连续的内存空间。2.链表的插入删除元素简单无需对元素移动但查询元素会慢数组对元素的插入删除较复杂同时使用时要预先指定长度但数组的查询会很快。最后为大家准备一篇「Java最常见200面试题全解析」助力大家找到合适的工作这份面试题包含的模块有Java、Jvm 最常见面试题解析Spring、Spring MVC、MyBatis、Hibernate 面试题解析MySQL、Redis 面试题解析RabbitMQ、Kafka、Zookeeper 面试解析微服务 Spring Boot、Spring Cloud 面试解析。扫描下面二维码付费阅读【End】关注下方二维码订阅更多精彩内容。转发朋友圈是对我最大的支持。