前端数据结构篇

栈(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. 删除栈顶元素

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

            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. 删除队头元素

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

            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. 顺序存储结构

                


        2. 链式存储结构

                                  



        二叉树遍历

           1.先序遍历(前序遍历)

                若二叉树非空,则依次执行如下操作:

                    ⑴ 访问根结点;

                    ⑵ 遍历左子树;

                    ⑶ 遍历右子树。

        2.中序遍历

              若二叉树非空,则依次执行如下操作:

                    ⑴遍历左子树;

                    ⑵访问根结点;

                    ⑶遍历右子树。

        3. 后序遍历

              若二叉树非空,则依次执行如下操作:

                    ⑴遍历左子树;

                    ⑵遍历右子树;

                    ⑶访问根结点。

        

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

        满足以下性质的二叉树

        1. 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 

        2.若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;    

        3.它的左、右子树也分别为二叉查找树。

        

        

 

        

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,204评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,091评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,548评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,657评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,689评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,554评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,302评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,216评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,661评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,851评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,977评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,697评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,306评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,898评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,019评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,138评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,927评论 2 355

推荐阅读更多精彩内容

  • 一些概念 数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,而且确保经过这...
    Winterfell_Z阅读 5,806评论 0 13
  • 动态规划 111. 爬楼梯思路类似斐波那契数列注意考虑第 0 阶的特殊情况 272. 爬楼梯 II思路类似上题,只...
    6默默Welsh阅读 2,431评论 0 1
  • 目录 1、什么是树 2、相关术语 3、二叉树 3.1、二叉树的类型 3.2、二叉树的性质 3.3、二叉树的结构 3...
    我哈啊哈啊哈阅读 2,548评论 0 10
  • 目录 1. 栈和队列1.用两个队列实现栈2.用两个栈实现队列3.实现一个栈,可以用常数级时间找出栈中的最小值4.判...
    MigrationUK阅读 3,033评论 4 20
  • Shino是一只患了老年痴呆的柴犬,不记得人,走路也总是会摔倒。然而家里陪伴了它6年的猫咪Kuu在察觉到Shino...
    企业管理学习阅读 316评论 0 1