资讯专栏INFORMATION COLUMN

数据结构JavaScript描述(一)

scq000 / 2752人阅读

摘要:本文主要用实现一些常用的数据结构,并带上相应的讲解,本系列中的所有代码并非所有都由本人编写,但出于学习目的,在此分享出来并带上一定的解释,方便大家学习。相应的数据结构有队列栈单链表双向链表二叉树相应代码已上传地址。

本文主要用JavaScript实现一些常用的数据结构,并带上相应的讲解,本系列中的所有代码并非所有都由本人编写,但出于学习目的,在此分享出来并带上一定的解释,方便大家学习。

相应的数据结构有:

队列

单链表

双向链表

二叉树

相应代码已上传GitHub地址:https://github.com/HolyZheng/...   。

本文先给大家介绍队列和栈,其他的在后续的文章中给大家带来。

队列

队列 的概念应该不用多说了吧,一句话:先进先出(first in first out),就跟我们平时排队一样,先排队的就先到。

代码实现:

/**
 *       使用javascript实现一个队列
 *       具有enqueue、dequeue、show三个方法
 */
function Queue () {
    this._oldestIndex = 1;
    this._newestIndex = 1;
    this._storage = {};
}

Queue.prototype.size = function () {
    return this._newestIndex - this._oldestIndex;
}

Queue.prototype.enqueue = function (data) {
    this._storage[this._newestIndex] = data;
    this._newestIndex++;
}

Queue.prototype.dequeue = function () {
    var oldestIndex = this._oldestIndex,
        newestIndex = this._newestIndex,
        deletedData;
    if (oldestIndex !== newestIndex) {
        deletedData = this._storage[oldestIndex];
        delete this._storage[oldestIndex];
        this._oldestIndex++;
        return deletedData;
    }
    return;
}

Queue.prototype.show = function () {
    console.log(this._storage);
}

这个队列主要有三个方法:enqueue、dequeue、show,分别为入队,出队,查看队列。
enqueue跟show都很简单,相信这里不用我来讲,大家一看就能懂,所以就讲一下dequeue函数:

enqueue 函数:

Queue.prototype.dequeue = function () {
    var oldestIndex = this._oldestIndex,  //记录队头位置
        newestIndex = this._newestIndex,  //记录队尾位置
        deletedData;                      //记录要删除的数据,并返回。
    if (oldestIndex !== newestIndex) {
        deletedData = this._storage[oldestIndex];
        delete this._storage[oldestIndex];
        this._oldestIndex++;
        return deletedData;
    }
    return;
}

删除元素的时候,只需要用先判断队列是否为空了,如果不空就用 delete 方法把相应的对象属性删除,然后对头位置加一就行了。

跟队列就刚好相反,“先进后出”,就像往桶里放球,后面放的在上方,可以先拿到。

代码实现:

/**
 *       使用javascript实现一个栈
 *       具有push、pop、show三个方法
 */
function Stack () {
    this._size = 0;
    this._storage = {};
}


Stack.prototype.push = function (data) {
    var size = ++this._size;
    this._storage[size] = data;
}

Stack.prototype.pop = function () {
    var size = this._size;
    var deletedData;
    if (size) {
        deletedData = this._storage[size];
        delete this._storage[size];
        this._size--;
        return deletedData;
    }
}

Stack.prototype.show = function () {
    var len = 1;
    while (len <= this._size) {
        console.log(this._storage[len]);
        len++;
    }
}

var stackA = new Stack();

这个 栈 主要有三个方法:push、pop、show 三个方法,同样我们挑一个相对较难的方法来讲一下:

Stack.prototype.pop = function () {
    var size = this._size; //指向栈头
    var deletedData;
    if (size) {
        deletedData = this._storage[size];
        delete this._storage[size];
        this._size--;
        return deletedData;
    }
}

pop 元素的时候,先判断栈是否为空,如果不为空的话,就 delete 掉栈头的元素,即最上方最先拿到的元素,然后this._size --指向下一个元素。

总结

队列,先进先出,就像我们平时排队

栈,先进后出,就像往桶里放球,后放的在上方,可以先拿到

因为队列和栈相对简单,所以本文篇幅比较短,下一篇文章我会为大家带来难度高一点的 单链表双向链表 的代码实现和讲解,文章也会相对详细,欢迎大家关注。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/90339.html

相关文章

  • React.js 小书 Lesson6 - 使用 JSX 描述 UI 信息

    摘要:上面的代码小书经过编译以后会变成小书会构建一个对象里描述你结构的信息,包括标签名属性还有子元素等。第二个原因是,有了这样一个对象。负责把这个用来描述信息的对象变成元素,并且渲染到面上。下一节中我们将介绍小书组件的方法。 React.js 小书 Lesson6 - 使用 JSX 描述 UI 信息 本文作者:胡子大哈本文原文:http://huziketang.com/books/rea...

    ChanceWong 评论0 收藏0
  • 十大经典排序算法总结(Javascript描述)

    摘要:算法描述冒泡排序是一种简单的排序算法。算法描述和实现一般来说,插入排序都采用在数组上实现。平均情况希尔排序年发明第一个突破的排序算法是简单插入排序的改进版它与插入排序的不同之处在于,它会优先比较距离较远的元素。 前言 读者自行尝试可以想看源码戳这,博主在github建了个库,读者可以Clone下来本地尝试。此博文配合源码体验更棒哦~~~ 个人博客:Damonare的个人博客 原文地址:...

    Binguner 评论0 收藏0
  • JavaScript-面向对象、Object类型

    摘要:面向对象面向对象编程的全称为简称。面向对象编程是用抽象方式创建基于现实世界模型的一种编程方式。面向对象编程可以看做是使用一系列对象相互协作的软件设计。面向对象编程的三个主要特征是封装继承多态。 面向对象 面向对象编程的全称为Object Oriented Programming,简称OOP。面向对象编程是用抽象方式创建基于现实世界模型的一种编程方式。面向对象编程可以看做是使用一系列对象...

    amuqiao 评论0 收藏0
  • 讲清楚之 javascript 对象属性描述

    摘要:所以搞清楚是理解对象属性描述符的唯一途径。是一个对象,对象里的属性描述符有两种类型数据描述符和存取描述符。描述符必须是这两种形式之一不能同时是两者。描述符中未显示设置的特性使用其默认值。创建一个新属性默认描述符的键值都是或者。 对象属性描述符 当别人对你提及对象属性描述符,可能会蒙逼。而如果提及对象属性的 get/set 方法就秒懂了,标准描述和习惯表述在这里有些差别,但是指向的是同一...

    zhjx922 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<