数据结构

数据结构包括集合、线性结构、树形结构和图形结构。线性结构如数组和链表,数组访问高效但插入删除困难,链表反之。树形结构涉及堆、二叉树,二叉查找树保证排序。图形结构中节点关系任意,应用广泛。
摘要由CSDN通过智能技术生成

数据结构是计算机存储、组织数据的方式。它研究的是数据的逻辑结构和物理结构以及它们之间的相互关系。同一逻辑结构 可以对应不同的存储结构,算法的设计取决于数据的逻辑结构,实现依赖于指定的存储结构。

逻辑结构包括:

1.集合:数据结构中的元素除了“同属于一个集合”的相互关系外,没有其他关系。

2.线性结构:数据结构中的元素存在一对一的相互关系。

3.树形结构:数据结构中的元素存在一对多的相互关系。

4.图形结构:数据结构中的元素存在多对多的相互关系。

一、线性结构

线性结构是n个数据元素的有限序列。

实现方式有两种:

1.使用数组存储线性表的元素(用一组连续的存储单元依次存储线性表的数据元素)

2.使用链表存储线性表的元素(用一组任意的存储单元依次存储线性表的数据元素)

数组是一种固定大小的数据结构,优点在于可以通过下标来访问或修改元素比较高效,缺点在于插入和删除开销较大。

int[] array = new int[10];

链表是一种物理存储单元上非连续、非顺序的存储结构,由一系列节点组成,这些节点不必在内存中相连,每个节点由数据部分Data和链部分Next组成,这样当添加或者删除时,只需要改变相关节点的Next的指向,效率很高。

链表实现方式:

1.循环单链表:链表的最后一个节点指向第一个节点形成一个循环。

2.双向链表:一个节点中包含两个指针,一个指向前方,一个指向后方。

3.循环双向链表:第一个节点的前指针指向最后一个节点,最后一个节点的后指针指向第一个节点

//节点
class Node<E>{
    E item;
    Node<E> next;

    //构造函数
    Node(E element) {
       this.item = element;
       this.next = null;
   }
}

class test{
  void test(){
    //头节点和尾节点都为空 链表为空
    Node<E> head = null;
    Node<E> tail = null;
    
    head = new Node("one");
    tail = new Node("two");
    head.next = tail;

    System.out.println(head.item);
  }

}

3.栈(stack)是限制插入和删除只能在一个位置上的链表,遵循先进后出的规律。应用场景包括括号问题的求解,表达式的转换和求值,函数调用和递归实现,深度优先搜索遍历等

4.队列(Queue)是队尾插入、队头删除的链表,遵循先进先出的规律,可以用LinkedList来实现。应用场景包括计算机系统中各种资源的管理,消息缓冲器的管理和广度优先搜索遍历等。

public class MyQueue<E> {

    private LinkedList<E> list = new LinkedList<>();

    // 入队
    public void enqueue(E e) {
        list.addLast(e);
    }

    // 出队
    public E dequeue() {
        return list.removeFirst();
    }
}

二、树形结构

1.堆(heap)用来存放new创建的对象和数组,当实体不再被指向时,JVM启动垃圾回收机制,自动清除。

2.树:有n(n>=1)个有限节点组成一个具有层次关系的集合,每个节点有>=0个子节点,没有父节点的节点为根节点,一个非根节点只有一个父节点,每个非根节点都可以有多个不相交的子节点:

3.二叉树:最多只有两个子节点的树被称为二叉树,常用语二叉查找树和二叉堆。

        特点:二叉树的每个节点最多有两个子节点,子节点有左右之分,次序不能颠倒。

                    二叉树的第i层至多有2^(i-1)个子节点,深度为k的话最多有2^k-1个子节点。

                  一棵深度为k,且有2^k-1个节点的二叉树称之为 满二叉树 ; 深度为k,有n个节点的二叉树,当且仅当其每一个节点都与深度为k的满二叉树中,序号为1至n的节点对应时,称之为 完全二叉树

 二叉查找树(二叉排序树)或者是一棵空树,或者是具有下列性质的二叉树: (1) 若左子树不空,则左子树上所有结点的值均小于它的根结点的值;(2) 若右子树不空,则右子树上所有结点的值均大于它的根结点的值;(3) 左、右子树也分别为二叉排序树;(4) 没有键值相等的结点。

二叉查找树构建过程
二叉查找树构建过程

 

当给定值相同但顺序不同时,所构建的二叉查找树形态是不同的

 

三种遍历方法:

(1) 先序遍历 若二叉树为空,则空操作,否则先访问根节点,再先序遍历左子树,最后先序遍历右子树。

2) 中序遍历 若二叉树为空,则空操作,否则先中序遍历左子树,再访问根节点,最后中序遍历右子树。

(3) 后序遍历 若二叉树为空,则空操作,否则先后序遍历左子树访问根节点,再后序遍历右子树,最后访问根节点。

 

 三、图形结构

图是一种较线性表和树更为复杂的数据结构,在线性表中,数据元素之间仅有线性关系,在树形结构中,数据元素之间有着明显的层次关系,而在图形结构中,节点之间的关系可以是任意的,图中任意两个数据元素之间都可能相关。图的应用相当广泛,特别是近年来的迅速发展,已经渗入到诸如语言学、逻辑学、物理、化学、电讯工程、计算机科学以及数学的其他分支中。

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值