欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【数据结构】基于二分搜索树和链表的集合(Set)实现

程序员文章站 2024-03-24 23:48:40
...

集合(Set):是一种高层数据结构,需要用底层数据结构来实现,集合中每个元素只能存在一个,常用于去重。

典型应用:客户统计,词汇量统计。


(一)接口Set<E>

public interface Set<E> {

    public void addFirst(E e);
    public void remove(E e);
    public boolean isEmpty();
    public boolean contains(E e);
    public int getSize();
}

 


(二)基于二分搜索树集合实现

 

 

 


(三)基于链表的集合实现

这里采用自己前几节复实现的链表,而不是用标准库库自带的链表。

public class LinkedListSet<E> implements Set<E>{
    private LinkedList<E> list;

    //构造函数
    public  LinkedListSet(){
        list=new LinkedList<>();
    }
    @Override
    public void addFirst(E e) {//重组逻辑,不能添加重复元素
        if(contains(e)){
            System.out.println("添加失败,元素已存在!");
        }else{
            list.add(e);
        }

    }

    @Override
    public void remove(E e) {
        if (contains(e)){
            list.remove(e);
        }else{
            System.out.println("删除失败,元素不存在!");
        }
    }

    @Override
    public boolean isEmpty() {
        return list.isEmpty();
    }

    @Override
    public boolean contains(E e) {
        return list.contains(e);
    }

    @Override
    public int getSize() {
        return list.size();
    }
}

(五)两种实现方式的复杂度分析

(1)LinkedListSet

增 add    O(n)
查 contains  O(n)
删 remove    O(n)


(2)BSTSet

增 add    O(h)
查 contains  O(h)
删 remove    O(h)
h:二分搜索树的高度
h与n的关系分析:(1)最优情况:满二叉树,h=log2(n+1),故O(h)=O(logn)
                             (2)最坏情况:当二分搜索树是链表时,h=n,O(h)=O(n)

 

 

相关标签: 集合实现