美文网首页
前端数据结构

前端数据结构

作者: CodeMT | 来源:发表于2019-12-01 15:01 被阅读0次

栈(stack)

限定仅在表尾进行插入和删除操作的线性表(一个线性表是n个具有相同特性的数据元素的有限序列,线性表中数据元素之间的关系是一对一的关系),表尾为栈顶,表头称为栈底。

栈基本操作(以数组为例)

1. 一个空栈

var Stack = [ ];  //字面量方式
var Stack = new Array()  //构造函数模式

2.清空栈

// 1. length
StackA.length = 0;

// 2. 赋值[ ]
StackA  = [ ];

//3.删除元素,并向数组添加新元素
splice()     

//arr.splice( index, howmany , itemq, .... ,itemx)
//index : 必需,整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置
//howmany : 必需,要删除的项目的数量,如果设置为0,则不会删除项目
//item, ...., itemX : 可选,向数组中添加新的项目

StackA.splice( -1 , StackA.length)            //从尾部(索引为-1)删除元素

3.判断是否为空栈,返回true/false

function isEmpty( stack ){
  if(stack.length == 0){
    return false
  } else {
    return true
  }
}

4.返回栈的元素个数

function stackLength ( stack ) {
  return stack.length 
}

5. 删除栈顶元素

//删除数组最后一个元素,把数组长度减1,并且返回它删除的元素的值
// 如果数组已为空,则pop()不改变数组,并返回undefined 值
pop ( )  

function popTop ( stack) {
  return stack.pop()
}

6. 插入新的栈顶元素

push ( )  //向数组的末尾添加一个或多个元素,并返回新的长度

//items为要添加的新元素构成的数组
function pushItem ( stack , items)  {
  stack.push (...items)
}    

队列

相反,队列 是一种先进先出(FIFO)的线性表,只允许在表的一端进行插入,而在另一端进行删除元素,最早进入队列的元素最早离开。允许插入的一端称为队尾,允许删除的一端称为队头

队列操作

1.构造一个空队列 (以数组为例)

var Queue = [ ] ;
var Queue = new Array();

2.清空队列

// 1. length
QueueA.length = 0;

// 2. 赋值
QueueA = [ ];

// 3. splice()
Queue.splice( 0 , QueueA.length)  //从头部删除元素

// 4.判断是否为空
function isEmpty( queue ){
  if(queue.length == 0){
    return false
  } else {
    return true
  }
}

// 5.返回元素个数
return queue.length 

// 6. 删除队头元素
//将数组第一个元素从其中删除,并返回第一个元素的值,如果数组为空,将不进行任何操作,并返回undefined
shift ( )  
queue.shift( )

// 7. 插入新的队尾元素
push ( )  //向数组的末尾添加一个或多个元素,并返回新的长度
//items为要添加的新元素构成的数组
function pushItem ( queue , items)  {
  queue.push (...items)
}    

3.树和二叉树

以分支关系定义的层次结构。树 是 n (n>=0)个结点的有限集

在任意一棵非空树中:
(1) 有且仅有一个特定的称为 **根(root) **的结点 ;
(2) 当 n>1 时,其余结点可分为m (m>0) 个互不相交的有限集T1,T2,...,Tm, 其中每一个集合本身又是一棵树,并且称为根的 子树

如图 是有6个结点的树,其中A 是根,其余结点分为2个互不相交的子集,T1= {B, D, E} , T2 = { C, F} ,T1 , T2 都是根A 的子树,且本身也是一棵树,如T1的根为B,而T11 = {D } , T12 = {E},则T11,T22都是B的子树,是只有一个根结点的树

二叉树

二叉树的特点是每个结点至多只有两课子树(即二叉树中不存在深度大于2的结点)。并且,二叉树的子树有左右之分,其次序不能任意颠倒

1. 二叉树的第i层上至多有2^(i-1)个结点 (i>=1)
2. 深度为K的二叉树至多有(2^k)-1个结点

二叉树分类

1. 满二叉树:一棵深度为k且有2^k - 1个节点的二叉树称为满二叉树
2. 完全二叉树:完全二叉树是指最后一层左边是满的,右边可能满也可能不满,然后其余层都是满的二叉树称为完全二叉树(满二叉树也是一种完全二叉树)

二叉树的存储结构

  1. 顺序存储结构
  1. 链式存储结构

二叉树遍历

1.先序遍历(前序遍历)
若二叉树非空,则依次执行如下操作:
访问根结点;
遍历左子树;
遍历右子树。

2.中序遍历
若二叉树非空,则依次执行如下操作:
遍历左子树;
访问根结点;
遍历右子树。

3. 后序遍历
若二叉树非空,则依次执行如下操作:
遍历左子树;
遍历右子树;
访问根结点。

二叉查找树(二叉搜索树)

满足以下性质的二叉树
1. 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
2. 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
3. 它的左、右子树也分别为二叉查找树。

相关文章

  • 前端算法完全总结——基础篇

    之前对前端的算法和数据结构做了一些寻章摘句的部分零散的总结和归纳,详见《前端算法与数据结构自学总结(实战篇)》和《...

  • 2019-07-01

    作为一个开发人员,无论是前端还是后端,基础的数据结构知识是必要的。本文主要是说在前端中经常使用的数据结构及相...

  • callback学习笔记

    学数据结构后看这些东西感觉特别简单... 觉得自己学早了前端...

  • Node MongoDB查询列表带分页

    前端需要的数据结构 下面代码将完整展现一个列表接口

  • ES6 map weakmap set weakset 区别

    前端数据结构 https://www.cnblogs.com/baoshuyan66/p/10307595.htm...

  • 前端常见数据结构小结

    常见数据结构的 JavaScript 实现 栈 队列 链表 集合 字典 哈希表 二叉树 图 前端与数据结构 数据结...

  • 二叉树的遍历

    一、为什么前端需要学习数据结构与算法? 以前的前端页面都是多页面,现在前端的趋势是单页面应用,需要将复杂的逻辑都放...

  • 前端数据结构

    栈(stack) 限定仅在表尾进行插入和删除操作的线性表(一个线性表是n个具有相同特性的数据元素的有限序列,线性表...

  • javascript中的数据结构---数组

    一、前言 看到标题,也许会说前端扯什么数据结构,写出页面完成交互不就ok了吗?实际上编程语言也有自己的数据结构,只...

  • 如何设计一个基于对象的链表?虽然我连对象都没有…

    前言 数据结构,应该大家或多或少都知道,作为一个前端用的最多的数据结构就是数组了;在写业务中必然离不开数组,因为它...

网友评论

      本文标题:前端数据结构

      本文链接:https://www.haomeiwen.com/subject/srqewctx.html