三种最常用的数据结构 - 线性表 、树 、堆

Java数据结构——线性表、队列、栈、堆、集合、散列表、映射的概念   下面是我在学习Java数据结构时梳理出来的一些知识点,供大家学习参考,类和接口的方法没有写出,具体以API文档为准。   数据结构在某种形式上是一种合集,数据结构不仅存储数据,还支持访问和处理数据。数据结构从本质上讲就是一个类,创建一个数据结构就是创建这个类的一个实例,然后使用这个实例上的方法操作这个数据结构。   Java中提供的数据结构通常称为java合集框架   Java合集框架中的... 阅读详情

数据结构概念(逻辑结构和物理结构)

数据结构概念:把数据元素按照一定的关系组织起来的集合,用来组织和存储数据

数据结构分类:数据结构分为逻辑结构和物理结构两大类

逻辑结构分类:集合结构、线性结构、树形结构、图形结构

a.集合结构:集合结构中数据元素除了属于同一个集合外,他们之间没有任何其他的关系

b.线性结构:线性结构中的数据元素之间存在一对一的关系

c.树形结构:树形结构中的数据元素之间存在一对多的层次关系

d.图形结构:图形结构的数据元素是多对多的关系

物理结构分类:逻辑结构在计算机中真正的表示方式(又称为映像)称为物理结构,也可以叫做存储结构。常见的物理结构有顺序存储结构、链式存储结构。

a.顺序存储结构:把数据元素放到地址连续的存储单元里面,其数据间的逻辑关系和物理关系是一致的 ,比如我们常用的数组就是顺序存储结构。

b.链式存储结构:是把数据元素存放在任意的存储单元里面,这组存储单元可以是连续的也可以是不连续的。此时,数据元素之间并不能反映元素间的逻辑关系,因此在链式存储结构中引进了一个指针存放数据元素的地址,这样通过地址就可以找到相关联数据元素的位置

顺序存储结构--查询块,增删慢

链式存储结构--查询慢,增删块

线性表

线性表中数据存储的方式可以是顺序存储,也可以是链式存储,按照数据的存储方式不同,可以把线性表分为顺序表和链表。基于线性表,又可以实现栈和队列。

顺序表

顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元,依次存储线性表中的各个元素、使得线性表中再逻辑结构上响铃的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系。

  • 顺序表的查找效率很高,根据索引可以直接定位,查找的时间复杂度为O(1),但是插入和删除的时候需要移动其他的元素,所以效率较低,比如,在位置i处插入,需要把i位置后面的元素依次向右移动一次,因此插入和删除的时间复杂度为O(n)。
  • 由于顺序表的底层由数组实现,数组的长度是固定的,所以在操作的过程中涉及到了容器扩容操作,需要更换新的更大的数组,把数据从就旧的数组中拷贝到新的数组中,这个过程比较耗时
  • Java中ArrayList集合的底层也是一种顺序表,使用数组实现,同样提供了增删改查以及扩容等功能。

链表

链表是一种物理存储单元上非连续、非顺序的存储结构,其物理结构不能只管的表示数据元素的逻辑顺序,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列的结点(链表中的每一个元素称为结点)组成,结点可以在运行时动态生成。

 在使用链表的时候,需要先创建一个节点类

public class Node<T> {
	//存储元素
	public T item;
	//指向下一个结点
	public Node next;
	public Node(T item, Node next) {
		this.item = item;
		this.next = next;
	}
}

生成链表: 

public static void main(String[] args) throws Exception {
    //构建结点
    Node<Integer> first = new Node<Integer>(11, null);
    Node<Integer> second = new Node<Integer>(13, null);
    Node<Integer> third = new Node<Integer>(12, null);
    Node<Integer> fourth = new Node<Integer>(8, null);
    Node<Integer> fifth = new Node<Integer>(9, null);
    //生成链表
    first.next = second;
    second.next = third;
    third.next = fourth;
    fourth.next = fifth;
}

 栈

栈是一种基于先进后出(FILO)的数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)
我们称数据进入到栈的动作为压栈,数据从栈中出去的动作为弹栈。

既可以使用顺序表实现栈,也可以用链表实现栈

使用数组,实现一个简单的不可扩容的栈:

public class stackDemo<m> {
	 m[] a;
	 int f=-1;
	 public stackDemo(int num)
	 {
		 a=(m[])new Object[num];
	 }
	 
	 public void add(m n)
	 {
		 if(f==a.length-1)
		 {
			 System.out.println("栈满");
			 return;
		 }
		 f++;
		 a[f]=n;
	 }
	 
	 public m get()
	 {
		 if(f==-1) 
		 {
			 System.out.println("栈空!");
			 return null;
		 }
		 m temp=a[f];
		 f--;
		 return temp;
	 }
	 
	 public static void main(String[] args) {
		stackDemo s=new stackDemo(5);
		String[] str=new String[] {"123","g","e","g","w","f","h","r"};
		for(int i=0;i<7;i++) s.add(str[i]);
		for(int i=0;i<7;i++) System.out.println(s.get());
	}
	 
}

 队列

队列是一种基于先进先出(FIFO)的数据结构,是一种只能在一端进行插入,在另一端进行删除操作的特殊线性表,它按照先进先出的原则存储数据,先进入的数据,在读取数据时先被读出来。

 同样的,既可以使用顺序表实现队列,也可以用链表实现队列

public class columnDemo <m>{	
	m[] a;
	int b=0;
	int e=0;
	
	public columnDemo(int num)
	{
		a=(m[])new Object[num];
	}
	
	public void add(m value)
	{
		if(e==a.length)
		{
			System.out.println("队列已满!");
			return;
		}
		a[e]=value;
		e++;
	}
	
	public m get()
	{
		if(b==e)
		{
			System.out.println("队空!");
			return null;
		}
		int n=b;
		b++;
		return a[n%a.length];
	}
	
	public static void main(String[] args) {
		columnDemo c=new columnDemo(5);
		String[] str=new String[] {"123","g","e","g","w","f","h","r"};
		for(int i=0;i<7;i++) c.add(str[i]);
		for(int i=0;i<7;i++) System.out.println(c.get());
	}
	
}

树

树的基本定义

树是由n(n>=1)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的 

二叉树

结点的度:一个结点含有的子树的个数称为该结点的度;
二叉树就是度不超过2的树(每个结点最多有两个子结点)

二叉树的节点类代码: 
private class Node<Key,Value>{
    //存储键
    public Key key;
    //存储值
    private Value value;
    //记录左子结点
    public Node left;
    //记录右子结点
    public Node right;

    public Node(Key key, Value value, Node left, Node right) {
        this.key = key;
        this.value = value;
        this.left = left;
        this.right = right;
    }
}

满二叉树

 一个二叉树,如果每一个层的结点树都达到最大值,则这个二叉树就是满二叉树。

完全二叉树 

叶节点只能出现在最下层和次下层,并且最下面一层的结点都集中在该层最左边的若干位置的二叉树

二叉树的遍历

  1. 前序遍历:先访问根结点,然后再访问左子树,最后访问右子树
  2. 中序遍历:先访问左子树,中间访问根节点,最后访问右子树
  3. 后序遍历:先访问左子树,再访问右子树,最后访问根节点
如果我们分别对下面的树使用三种遍历方式进行遍历,得到的结果如下:

前序遍历代码:

//使用前序遍历,获取整个树中的所有键
public Queue<Key> preErgodic(){
    Queue<Key> keys = new Queue<>();
    preErgodic(root,keys);
    return keys;
}

//使用前序遍历,把指定树x中的所有键放入到keys队列中
private void preErgodic(Node x,Queue<Key> keys){
    if (x==null){
        return;
    }
    //1.把当前结点的key放入到队列中;
    keys.enqueue(x.key);
    //2.找到当前结点的左子树,如果不为空,递归遍历左子树
    if (x.left!=null){
        preErgodic(x.left,keys);
    }
    //3.找到当前结点的右子树,如果不为空,递归遍历右子树
    if (x.right!=null){
        preErgodic(x.right,keys);
    }
}

中序遍历代码:

//使用中序遍历,获取整个树中的所有键
public Queue<Key> midErgodic(){
    Queue<Key> keys = new Queue<>();
    midErgodic(root,keys);
    return keys;
}
//使用中序遍历,把指定树x中的所有键放入到keys队列中
private void midErgodic(Node x,Queue<Key> keys){
    if (x==null){
        return;
    }
    //1.找到当前结点的左子树,如果不为空,递归遍历左子树
    if (x.left!=null){
        midErgodic(x.left,keys);
    }
    //2.把当前结点的key放入到队列中;
    keys.enqueue(x.key);
    //3.找到当前结点的右子树,如果不为空,递归遍历右子树
    if (x.right!=null){
        midErgodic(x.right,keys);
    }
}

后序遍历代码:

//使用后序遍历,获取整个树中的所有键
public Queue<Key> afterErgodic(){
    Queue<Key> keys = new Queue<>();
    afterErgodic(root,keys);
    return keys;
}

//使用后序遍历,把指定树x中的所有键放入到keys队列中
private void afterErgodic(Node x,Queue<Key> keys){
    if (x==null){
        return;
    }
    //1.找到当前结点的左子树,如果不为空,递归遍历左子树
    if (x.left!=null){
        afterErgodic(x.left,keys);
    }
    //2.找到当前结点的右子树,如果不为空,递归遍历右子树
    if (x.right!=null){
        afterErgodic(x.right,keys);
    }
    //3.把当前结点的key放入到队列中;
    keys.enqueue(x.key);
}

堆

堆的定义

堆是计算机科学中一类特殊的数据结构的统称,堆通常可以被看做是一棵完全二叉树的数组对象

堆的特性

  1. 它是完全二叉树,除了树的最后一层结点不需要是满的,其它的每一层从左到右都是满的,如果最后一层结点不是满的,那么要求左满右不满。
  2. 它通常用数组来实现。具体方法就是将二叉树的结点按照层级顺序放入数组中,根结点在位置1,它的子结点在位置2和3,而子结点的子 结点则分别在位置4,5,6和7,以此类推。如果一个结点的位置为k,则它的父结点的位置为[k/2],而它的两个子结点的位置则分别为2k和2k+1。这样,在不使用指针的情况下,我们也可以通过计算数组的索引在树中上下移动:从a[k]向上一层,就令k等于k/2,向下一层就令k等于2k或2k+1。
  3. 每个结点都大于等于它的两个子结点。这里要注意堆中仅仅规定了每个结点大于等于它的两个子结点,但这两个子结点的顺序并没有做规定,跟我们之前学习的二叉查找树是有区别的。

堆排序

 堆可以分为大根堆,小根堆

大根堆:每个节点的值都大于或者等于他的左右孩子节点的值

小根堆:每个结点的值都小于或等于其左孩子和右孩子结点的值0

堆是用数组完成数据元素的存储的,由于数组的底层是一串连续的内存地址,所以我们要往堆中插入数据,我们只能往数组中从索引0处开始,依次往后存放数据,但是堆中对元素的顺序是有要求的,每一个结点的数据要大于等于它的两个子结点的数据,所以每次插入一个元素,都会使得堆中的数据顺序变乱,这个时候我们就需要通过一些方法让刚才插入的这个数据放入到合适的位置。
以大根堆的调整为例:

同样,删除元素也需要进行堆调整:

对于大根堆,索引1处的元素,也就是根结点是最大的元素,当我们把根结点的元素删除后,需要有一个新的根结点出现,这时我们可以暂时把堆中最后一个元素放到索引1处,充当根结点,但是它不满足大根堆的有序性需求,这个时候我们就需要通过一些方法,让这个新的根结点放入到合适的位置。

堆排序实现步骤(使用大根堆,实现从小到大排序):
  1. 构造大根堆;
  2. 得到堆顶元素,这个值就是最大值;
  3. 交换堆顶元素和数组中的最后一个元素,此时所有元素中的最大元素已经放到合适的位置;
  4. 对堆进行调整,重新让除了最后一个元素的剩余元素中的最大值放到堆顶;
  5. 重复2~4这个步骤,直到堆中剩一个元素为止;
public class HeapSort {
	public static void main(String[] args) {
		int[] a=new int[]{5,32,4,23,1,8,64,67,35,85,12,123,543,45,23,10};
		System.out.println(Arrays.toString(a));
		int l=a.length;
		for(int i=0;i<a.length-1;i++)
		{
			for(int p=l-1;p>=0;p--)
			{
				sort(a,p,l);
			}
			int temp=a[0];
			a[0]=a[l-1];
			a[l-1]=temp;
			l--;
		}
		System.out.println(Arrays.toString(a));
	}
	
	public static void sort(int[] a,int p,int l)
	{
		int c=2*p+1;
		if(c<l)
		{
			int rc=c+1;
			if(rc<l && a[c]<a[rc]) c=rc;
			if(a[p]<a[c])
			{
				int temp=a[p];
				a[p]=a[c];
				a[c]=temp;
				p=c;
				sort(a,p,l);
			}
 		}
	}
	
}
NOIP——线性表与树 (1):1->2->4->6->7,7 无左孩子,也无右孩子,输出 7,此时 6 无左孩子,而 6 的右子树也全部输出,输出 6,此时 4 无左子树,而 4 的右子树全部输出,输出 4,此时 2 的左子树全部输出,且 2 无右子树,输出 2,此时 1 的左子树全部输出,接着转向右子树;,an组成的有限序列,记为(a1,a2,……(3):7 的左孩子为空,输出 7,右孩子也为空,此时 2 的左子树全部输出,输出 2,2 的右孩子为空,此时 1 的左子树全部输出,输出 1,接着 1 的右孩子; 阅读详情

相关推荐

STM32F407VET6与CH395Q串口通信实战:从零搭建以太网客户端(附完整代码)

本文详细介绍了基于STM32F407VET6微控制器与南京沁恒微CH395Q以太网芯片,通过串口通信从零搭建TCP客户端应用的完整实战过程。内容涵盖硬件连接、驱动层设计、基于FreeRTOS的任务实现以及核心调试技巧,并提供了完整的代码示例,帮助嵌入式开发者快速实现设备联网功能。

weixin_29179311的博客 416

数据结构——线性结构(线性表)

定义把所有的结点用一根直线穿起来详细定义线性表是具有相同数据类型的n(n≥0)个数据元素的有限序列,其中n为表长,n=0是一个空表。用L表示线性表a1是唯一的第一个数据元素,又称表头元素;an是唯一的最后一个元素,又叫表尾元素。除了第一个元素之外,每个元素有且仅有一个直接前驱。除了最后一个元素外,每个元素有且仅有一个直接后继。n个节点离散分配彼此通过指针相连每个节点只有一个前驱节点,每个节点只有一个后续节点首节点没有前驱节点,尾节点没有后续节点从某种角度而言。............

巧克力布丁的博客 1万+

强化学习经典算法笔记(九):LSTM加持的PolicyGradient算法

强化学习经典算法笔记(九):LSTM加持的PolicyGradient算法 在上文《强化学习经典算法笔记(八):LSTM加持的A2C算法解决POMDP问题》的基础上,实现了LSTM+MLP的Policy Gradient算法。 实现过程如下: import argparse, math, os, sys import numpy as np import gym from gym import wrappers import matplotlib.pyplot as plt import torch fr

hhy_csdn的博客 5636

数据结构之线性表和树

1:线性表 具有同一数据类型的有限数据序列。线性表主要由顺序存储结构或链式存储结构(链表又包括单链表、循环链表、双向链表。)表示。在实际应用中,常以栈、队列、字符串等特殊形式使用。 在线性表中数据有前驱元素和后继元素(除第一个和最后一个元素外),每个元素都有自己的位置(简单理解为下标,可以通过get(i)获取)。 所以线性表结构的数据对于随机插入、删除、移动时间复杂度为O(n)。修改一条元素,元素其后面的元素都要改变位置。 顺序存储结构:具有连续的物理地址,数据连续在一起结构类似于数组。随机插入删除效率低

weixin_43930865的博客 2270

别再为PCB和散热器文件发愁了!手把手教你用ADS导出DWG文件给工厂(附单位转换避坑指南)

本文详细解析了从ADS设计到PCB/散热器加工的DWG文件导出全流程,重点介绍了单位转换、分层导出策略及散热器文件处理等关键步骤,帮助射频工程师避免加工误差和返工。特别提供了mil与mm单位转换的精确处理方法,确保设计文件与工厂加工需求无缝对接。

weixin_30814329的博客 616

SAP采购订单中项目类别B(限制)的控制逻辑

在笔者所在企业中,框架类采购订单中项目类别需要选择B(限制)。今天笔者从比较全面的角度分析了一下这个项目类别B到底可以决定些什么?控制到什么?先从后台SPRO中打开相应的配置菜单。 打开项目类别B之后,可以看到一些配置信息,这里有一点与其它配置不同的地方,即无法新增项目,也无法修改现有项目。这个疑惑今后再去解决吧。当前只研究项目类别B的控制逻辑。 下面就参考上图中的配置分段来分析和测试其控制逻辑, 1、如项目类别配置图,所需材料值为不允许;经测试,如下图在采购订单创建时,不能输入物料编号条目。

专注SAP应用技术文章写作,致力于拉近用户与系统间的距离; 6034

数据结构

数据结构 一些概念 数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,而且确保经过这些运算后所得到的新结构仍然是原来的结构类型。 数据:所有能被输入到计算机中,且能被计算机处理的符号的集合。是计算机操作的对象的总称。 数据元素:数据(集合)中的一个“个体”,数据及结构中讨论的基本单位 数据项:数据的不可分割的最小单位。一

xfyangle的博客 1万+

react +ant desiagn pro实现按钮操作权限控制

在ant desiagn pro中提供了一个access用于对权限进行控制,需引入useAccess和Access

Sylvasylva的博客 2212

数据结构(线性表&树&图)

一、线性结构 1.1线性表 定义:线性表是n个元素的有限序列,通常表示为{a1,a2,...,an},对于非空线性表有如下几个特点: 1)存在唯一的一个被称为"第一个"(“最后一个”)的元素; 2)除第一个元素序列中的每一个元素都有唯一前驱; 3)除最后一个元素序列中的每一个元素都有唯一后继; 线性表的存储结构(顺序存储和链式存储) 顺序存储特点:逻辑上相邻的元素物理上也相连; 已...

)梦想之深邃( 3688

Solidworks二次开发(C# .NET API):从零构建装配体与虚拟零件

本文详细介绍了使用C#进行Solidworks二次开发,从零构建装配体与虚拟零件的完整流程。通过.NET API实现设计自动化,涵盖环境搭建、核心对象模型、虚拟零件创建与外部化保存等关键技术,帮助工程师将重复性建模工作程序化,大幅提升设计效率与标准化水平。

alice7model的博客 607

计算机组成原理(第三版)唐朔飞-第七章指令系统-课后习题

机器字长是指CPU一次能处理数据的位数通常与CPU的寄存器位数有关。指令字长是指机器指令中二进制代码的总位数。存储字长是指存储单元中存放二进制代码的总位数。三者可以相等也可以不等视不同机器而定。答:OP(4位)A1(6位)A_1(6位)A1​(6位)A2(6位)A_2(6位)A2​(6位)设二地址指令格式为该指令系统的基本格式,4位操作码共有16种编码,其中13种用来定义二地址指令,还剩3种可用作扩展标志。一地址指令条数=3∗26=192。

weixin_45735391的博客 7万+

【数据结构】常见线性结构

线性表 ( linear list ) 是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使 用的数据结构,... 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的, 线性表在物理上存储时,通常以数组和链式结构的形式存储。

qq_72952716的博客 1734

C#上位机+YOLO实时目标检测:摄像头采集+多线程推理+精度调优全流程

标注数据集:使用LabelImg工具标注目标对象,按YOLO格式整理数据集;模型训练:使用Ultralytics库训练自定义模型,提升特定目标的检测精度;训练参数优化:增加训练轮数(epochs=100200)、调整批次大小(batch=1632)、使用数据增强(flip、mosaic等)。摄像头采集:封装通用采集类,支持USB摄像头/网口相机,实现稳定帧读取与异常处理;多线程推理:采用“采集线程+推理线程+UI线程”解耦架构,使用线程安全队列传递帧数据,彻底解决界面卡顿;核心封装。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 673

【数据结构实战】 一起探索树与堆的奥秘

大家好!我是狐狸!上期内容我们完成了队列的实现,本期内容我们将开始学习数据结构中树的概念和堆的实现

m0_74779094的博客 1057

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

非线性表中的树、堆是干嘛用的 ?其数据结构是怎样的 ?

JavaScript 数据结构与算法之美全栈修炼1. 前言想学好前端,先练好内功,内功不行,就算招式练的再花哨,终究成不了高手。非线性表(树、堆),可以说是前端程序员的内...

全栈修炼 662

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【数据结构】堆和树详解&&堆和二叉树的实现&&堆的top-k问题

【数据结构】堆和树详解&&堆和二叉树的实现&&堆的top-k问题

m0_74722801的博客 1306

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【数据结构】树和二叉树——堆

树和二叉树的概念及结构,堆的结构和实现以及用用

黄超的博客 6734

数据结构 - 树、常用树分类

目录 1、树的一些基本概念 2、常用树的分类 1)、完全二叉树 2)、满二叉树 3)、堆(大顶堆、小顶堆) 4)、二叉搜索树 5)、平衡二叉树 6)、平衡二叉搜索树 7)、AVL树(自平衡二叉搜索树) 8)、红黑树 数组和链表都是常用的数据结构,并且前面博客分析了队列、栈等都可以基于数组和链表实现,树也不例外。大部分情况下树都会基于链表进行实现称为链式存储法,只有在特点的情况下才会基于数组进行实现称为顺序存储法。那么什么是树呢?什么情况下树会基于顺序存储法进行存储?一种数据结构...

it_lihongmin的博客 5613

[数据结构]树、堆、二叉树内容的详解与分析

[数据结构]二叉树内容的详解与分析前言一、树的结构与概念1.1树的概念1.2树的相关概念1.3树的表示1.4树的实际应用二、二叉树的概念与结构2.1二叉树的概念2.2特殊的二叉树2.3二叉树的性质2.4二叉树的存储2.4.1顺序存储2.4.1链式存储三、二叉树的顺序结构及实现3.1二叉树的顺序结构3.2堆的概念与分类3.3堆的实现3.4.1堆的向下调整算法3.4.2堆的创建3.4.3建堆的时间复杂度3.4.4堆的插入3.4.5堆的删除四、二叉树的链式结构及实现4.1前置说明4.2二叉树的遍历4.3二叉树的常

Mr、Jerry的博客 952

数据结构--线性表,栈,串,树

一、线性表的定义(逻辑结构)1.线性表是具有相同数据类型的n(n>=0)个数据元素的有限序列,其中n为表长,当n=0时,线性表是一个空表。若用L命名线性表,一般表示为: L=(a1,a2,,,,ai,ai+1,,,,,an)(1)ai是线性表中的“第i个”元素线性表中的位序。(2)a1是表头元素;an是表尾元素。(3)除第一个元素外,每个元素有且仅有一个直接前驱;除去最后一个元素外,每个元素有且仅有一个直接后继。二、线性表的基本操作。

2401_88135404的博客 1984

数据结构——堆

1.2树的相关概念。

zhoubancheng的博客 3128

数据结构——二叉树和堆(万字,最详细)

如上图就是树。注意:树 形结构中,子树之间不能有交集,否则就不是树形结构。看完了树,咱们再来看看非树,非树形结构:1. 子树是不相交的(如果存在相交就是上图)。2.除了根结点外,每个结点有且仅有⼀个父结点。3.⼀棵N个结点的树有N-1条边。

2402_86667364的博客 1789

数据结构-堆

的。注意:子树之间不能有交集,否则就不是树型结构。

weixin_74312694的博客 1754

八大数据结构-数组 栈 队列 链表 树 散列表 堆 图

八大数据结构 —— 数组 栈 队列 链表 树 散列表 堆 图 1. 数组 优点:按照索引查询速度快、遍历数组方便 缺点: 数组大小固定后无法扩容 数组只能存储一种类型的数据 添加删除慢(需要移动其它元素) 使用场景:频繁查询,对存储空间要求不大;增加删除少的情况 一维数组:a[0] a[1] a[2] a[3] 2. 栈 栈是一种特殊的线性表,仅能在线性表的一端操作,栈顶允许操作,栈底...

艾小逗 2487

数据结构初阶——树和二叉树/堆

int size;// 当前数据个数// 容量}HP;数据类型是inta记录一段连续的地址空间,就是数组。普通二叉树的增删查改没有意义,真正有意义的是搜索树,平衡树,红黑树这些复杂的二叉树。但是学习控制普通二叉树的结构,是有意义的。在学习二叉树的基本操作前,需先要创建一棵二叉树,然后才能学习其相关的基本操作。由于现在大家对二叉树结构掌握还不够深入,为了降低大家学习成本,此处手动快速创建一棵简单的二叉树,快速进入二叉树操作学习,等二叉树结构了解的差不多时,我们反过头再来研究二叉树真正的创建方式。

weixin_73870552的博客 1284

数据结构——树

本文我们来一起学习在数据结构中的又一个重要内容,二叉树!二叉树无论是结构还是应用都属于比较复杂的结构!但没关系,一起加油,这些都是小困难!本文我们来一起学习在数据结构中的又一个重要内容,二叉树!二叉树无论是结构还是应用都属于比较复杂的结构!但没关系,一起加油,这些都是小困难!

mdjsmg的博客 1530
上一篇: 对象如何在JVM中进行存储?
下一篇: 如何设计数据库(包括 三范式)
Fearless____
博客等级 码龄5年 14粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值