数据结构----链表、双向链表、集合

目录

一、链表

二、双向链表

三、集合


一、链表

链表的优势:

链表中的内容不必是连续的空间

链表的每个元素都由一个存储元素本身的节点和一个指向下一个元素的引用组成

在插入和删除数据时,事件复杂度可以达到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

        }

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值