JS数据结构

一 数据结构:

数据结构是计算机存储、组织数据的方式。数据结构意味着接口或封装:一个数据结构可被视为两个函数之间的接口,或者是由数据类型联合组成的存储内容的访问方法封装

我们每天的编码中都会用到数据结构,因为数组是最简单的内存数据结构,下面是常见的数据结构:

  • 数组(Array)
  • 栈(Stack):栈是一种遵从先进后出 (LIFO) 原则的有序集合;新添加的或待删除的元素都保存在栈的末尾,称作栈顶,另一端为栈底。在栈里,新元素都靠近栈顶,旧元素都接近栈底。(堆叠的盘子例子)。
  • 队列(Queue):是一种特殊的线性表;特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。即先进先出(FIFO)。(银行窗口排队例子)
  • 堆(Heap):存放引用类型(如对象、数组、函数等),值大小不固定,栈内存中存放的地址指向堆内存中的对象; 堆是一种二叉树结构。它的存取数据的方式与书架非常相似。堆的特点是以“键值对”存储方式,存取方式和顺序无关。
  • 链表(Linked List)
  • 树(Tree)
  • 图(Graph)
  • 散列表(Hash)

其中,栈和队列是一种类似数组的数据结构,它们之间的区别仅仅体现在数据项的插入和移除的方式上。链表、树和图则是另一种节点与节点之间维持引用关系的数据结构。散列表(也称哈希表)依赖散列函数来保存和定位数据。

就复杂性而言,栈和队列是最简单的两种,并且二者都可以通过链表来进行构造。树和图则是最复杂的,因为它们继承了链表的概念。散列表需要利用这些数据结构来可靠地执行。就执行效率而言,链表在对数据的记录和排序上表现最好,同时散列表也更加擅长查找和提取数据。

二 JavaScript数据结构:

栈内存:javaScript中,数据类型分为基本数据类型和引用数据类型,基本数据类型七种包含:null、undefined、string、number、boolean、symbol、bigint 这几种。在内存中这几种数据类型存储在栈空间,我们按值访问。基本类型都存储在栈内存中,是大小固定并且有序的

堆内存:一般由操作人员(程序员)分配释放,若操作人员不分配释放,将由OS(操作系统)回收释放。分配方式类似链表。堆存储在二级缓存中。JavaScript 的数据类型除了原始类型,还有一类是 Object 类型,它包含:

  • Object
  • Function
  • Array
  • Date
  • RegExp

三 数据结构分类:

  1. 线性结构: 数据元素之间是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的有序数据元素的集合。常用的线性结构有:线性表,栈,队列,双队列,数组,串。
  2. 非线性结构:中各个数据元素不再保持在一个线性序列中,每个数据元素可能与零个或者多个其他数据元素发生联系(例如:球形,网型)。根据关系的不同,可分为层次结构和群结构。常见的非线性结构有:二维数组,多维数组,广义表,树(二叉树等),图。(其中多维数组是由多个一维数组组成的,所以不再是线性结构)

参考链接:

JS数据结构分类:https://blog.csdn.net/huangpb123/article/details/103645846

栈,堆,队列深入理解:https://blog.csdn.net/huangpb123/article/details/103646184

JS数据结构实现:https://www.cnblogs.com/jaxu/tag/JavaScript%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/ 

原文地址:https://www.cnblogs.com/terrymin/p/14167513.html