前端要了解的数据结构基本知识

js数据类型

  • 基本类型(栈 stack) : Number、String 、Boolean、Null 和 Undefined , Symbol(es6 新增); 基本数据类型是按值访问 由高向低分配,栈内存最大是 8MB,(超出报栈溢出), String:是特殊的栈内存 (向高分配大小不定),程序员分配
  • 引用类型(堆 heap) :Object 、Array 、Function 、Data;引用类型数据在栈内存中保存的实际上是对象在堆内存中的引用地址(指针),向高分配,系统自动分配

堆栈空间分配区别:

  • 栈(操作系统):由操作系统自动分配释放 ,存放函数的参数,局部变量的值等。其操作方式类似于数据结构中的栈,是一种高效的数据结构,因为数据只能在栈顶删除或增加,操作很快;站内元素只能通过列表的一端访问,这一端称为栈顶(反之栈底);后入先出的数据结构;插入新元素又称作进栈、入栈或压栈,删除元素称作出栈或退栈
  • 堆(操作系统): 一般由程序员分配释放,若程序员不释放,程序结束时可能由 OS 回收,分配方式倒是类似于链表
  • 全局(静态)存储区:分为DATA段和BSS段。DATA段(全局初始化区)存放初始化的全局变量和静态变量;BSS段(全局未初始化区)存放未初始化的全局变量和静态变量。程序运行结束时自动释放。其中BBS段在程序执行之前会被系统自动清0,所以未初始化的全局变量和静态变量在程序执行之前已经为0。
  • 文字常量区:存放常量字符串。程序结束后由系统释放。
  • 程序代码区:存放程序的二进制代码。

堆栈缓存方式区别:

  • 栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放;
  • 堆是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。

堆 、栈数据结构区别:

  • 栈(数据结构):一种先进后出的数据结构。
  • 堆(数据结构):堆可以被看成是一棵树,如:堆排序;

数据结构

数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成;数据结构的基本操作的设置的最重要的准则是,实现应用程序与存储结构的独立(数据结构=数据的存储+算法)
在这里插入图片描述

数据结构分类

  • 逻辑结构:反映数据之间的逻辑关系;

  • 存储结构:数据结构在计算机中的表示;

逻辑结构:
  • 集合:结构中的数据元素除了同属于一种类型外,别无其它关系。(无逻辑关系)
  • 线性结构 :数据元素之间一对一的关系(线性表)
  • 树形结构 :数据元素之间一对多的关系(非线性)
  • 图状结构或网状结构: 结构中的数据元素之间存在多对多的关系(非线性)
存储结构:
  • 顺序存储数据结构
  • 链式存储数据结构
  • 索引存储数据结构
  • 散列存储数据结构
线性结构 :
  • 队列: 也是一种运算受限的线性表。它只允许在表的一端进行插入,而在另一端进行删除。允许删除的一端称为队头(front),允许插入的一端称为队尾(rear)。先进先出。
  • 栈: 是限制在表的一端进行插入和删除运算的线性表,通常称插入、删除的这一端为栈顶(Top),另一端为栈底(Bottom)。先进后出。top= -1时为空栈,top=0只能说明栈中只有一个元素,并且元素进栈时top应该自增. 后进先出
  • 串 :是零个或多个字符组成的有限序列。长度为零的串称为空串(Empty String),它不包含任何字符。通常将仅由一个或多个空格组成的串称为空白串(Blank String) 注意:空串和空白串的不同,例如“ ”和“”分别表示长度为1的空白串和长度为0的空串。
非线性结构
  • 树:一种非线性结构。树是递归结构,在树的定义中又用到了树的概念
    • 有序数:子节点之间有顺序关系
    • 无序树:子节点之间没有顺序关系
    • 二叉树:一种非线性结构。树是递归结构,在树的定义中又用到了树的概念
二叉树遍历
  • 使得每一个结点均被访问一次,而且仅被访问一次。非递归的遍历实现要利用栈。
  • 先序遍历DLR:根节点->左子树->右子树(广度遍历)
  • 中序遍历LDR:左子树->根节点->右子树。必须要有中序遍历才能得到一棵二叉树的正确顺序(广度遍历)
  • 后续遍历LRD:左子树->右子树->根节点。需要栈的支持。(广度遍历)
  • 层次遍历:用一维数组存储二叉树时,总是以层次遍历的顺序存储结点。层次遍历应该借助队列。(深度遍历)
    在这里插入图片描述
    内存: 一条很长一维数组;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值