| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 数据结构----链表、双向链表、集合 -> 正文阅读 |
|
[数据结构与算法]数据结构----链表、双向链表、集合 |
目录 一、链表链表的优势: 链表中的内容不必是连续的空间 链表的每个元素都由一个存储元素本身的节点和一个指向下一个元素的引用组成 在插入和删除数据时,事件复杂度可以达到O(1) 链表的缺点: 访问元素需要从头访问 封装:LinkedList类 ? ? ? ? ? ?内部有一个Node类,用于封装每一个节点上的信息 ? ? ? ? ? ? 保存两个属性,一个是链表的长度,一个是链表中的第一个节点 常见操作: append(el)? ? ? ? ? ? ? ? ? ? 向列表尾部添加一个新的项 insert(position,el)? ? ? ?向列表的特定位置插入一个新的项 get(position)? ? ? ? ? ? ? ? ? 获取对应位置的元素 indexOf(el)? ? ? ? ? ? ? ? ? ? 返回元素在列表中的索引 update(position,el)? ? ?修改某个位置的元素 removeAt(position)? ? ? ?从列表的特定位置删除一项 remove(el)? ? ? ? ? ? ? ? ? ? 从列表中移出一项 isEmpty()? ? ? ? ? ? ? ? ? ? ? 链表是否为空 size()? ? ? ? ? ? ? ? ? ? ? ? ? ? ?链表中元素的个数 toString()? ? ? ? ? ? ? ? ? ? ? ?只输出元素的值 二、双向链表单向的弊端:只能从头遍历,过程是单向的,寻找上一个节点很困难 特点:head指针指向着节点,tail指针指向尾部节点 ? ? ? ? ? ?每个节点由三部分组成:prev、data、next ? ? ? ? ? ?第一个节点的prev指向null ? ? ? ? ? ?最后一个节点的next指向null 缺点:插入及删除节点要复杂一些 封装:DoublyLinkedList :head? ? tail? ? length? 常见操作: append(el)? ? ? ? ? ? ? ? ? ? 向列表尾部添加一个新的项 insert(position,el)? ? ? ?向指定位置添加一个项 get(position)? ? ? ? ? ? ? ? ? 获取对应位置的元素 indexOf(el)? ? ? ? ? ? ? ? ? ? 返回元素在列表中的索引 update(position,el)? ? ?修改某个位置的元素 removeAt(position)? ? ? ?从列表的特定位置删除一项 remove(el)? ? ? ? ? ? ? ? ? ? 从列表中移出一项 isEmpty()? ? ? ? ? ? ? ? ? ? ? 链表是否为空 size()? ? ? ? ? ? ? ? ? ? ? ? ? ? ?链表中元素的个数 toString()? ? ? ? ? ? ? ? ? ? ? ?只输出元素的值 forwardString()? ? ? ? ? ? ? 返回正向遍历的节点字符串 backwardString()? ? ? ? ? 返回反向遍历的节点字符串 三、集合set常见操作: add(value)? ? ? ? ? ? ? 添加一个项,返回一个布尔值 remove(value)? ? ? ? 删除一个项 has(value)? ? ? ? ? ? ? 是否包含某个项 clear()? ? ? ? ? ? ? ? ? ? ?清空集合 size()? ? ? ? ? ? ? ? ? ? ? 集合中元素的个数 values()? ? ? ? ? ? ? ? ? 返回一个包含集合中所有元素的数组 集合间的操作: 1.并集 ? ? ? ? union(other){ ? ? ? ? ? ? // this? ? other ? ? ? ? ? ? ? let arr=this.values().concat(other.values(other)) ? ? ? ? ? ? let newMS=new MySet() ? ? ? ? ? ? arr.forEach(value=>{ ? ? ? ? ? ? ? ? newMS.add(value) ? ? ? ? ? ? }) ? ? ? ? ? ? return newMS ? ? ? ? } 2. 交集 insertSection(other){ ? ? ? ? ? ? // this? ? ?other ? ? ? ? ? ? // 从this中拿到每一个元素判断other中是否包含 ? ? ? ? ? ? let newMS=new MySet() ? ? ? ? ? ? let arr=this.values() ? ? ? ? ? ? arr.forEach(value=>{ ? ? ? ? ? ? ? ? if(other.has(value)){ ? ? ? ? ? ? ? ? ? ? newMS.add(value) ? ? ? ? ? ? ? ? } ? ? ? ? ? ? }) ? ? ? ? ? ? return newMS ? ? ? ? } ?3.差集 difference(other){ ? ? ? ? ? ? // this? ? other ? ? ? ? ? ? let newMS=new MySet() ? ? ? ? ? ? let arr=this.values() ? ? ? ? ? ? arr.forEach(value=>{ ? ? ? ? ? ? ? ? if(!other.has(value)){ ? ? ? ? ? ? ? ? ? ? newMS.add(value) ? ? ? ? ? ? ? ? } ? ? ? ? ? ? }) ? ? ? ? ? ? return newMS ? ? ? ? } 4.子集 ?isSubSet(other){ ? ? ? ? ? ? // this是否是other的子集 ? ? ? ? ? ? let arr=this.values() ? ? ? ? ? ? let is=true ? ? ? ? ? ? arr.forEach(value=>{ ? ? ? ? ? ? ? ? if(!other.has(value)){ ? ? ? ? ? ? ? ? ? ? is= false ? ? ? ? ? ? ? ? } ? ? ? ? ? ? }) ? ? ? ? ? ? return is ? ? ? ? } ? ? ? ? ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 19:26:53- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |