资讯专栏INFORMATION COLUMN

学习javascript数据结构(一)——栈和队列

doodlewind / 1761人阅读

摘要:原文地址学习数据结构一栈和队列博主博客地址的个人博客几乎所有的编程语言都原生支持数组类型,因为数组是最简单的内存数据结构。他们就是栈和队列。我们称作栈顶,而另一端我们称作栈底。移除栈顶的元素,同时返回被移除元素。

前言

只要你不计较得失,人生还有什么不能想法子克服的。

原文地址:学习javascript数据结构(一)——栈和队列

博主博客地址:Damonare的个人博客

几乎所有的编程语言都原生支持数组类型,因为数组是最简单的内存数据结构。javascript也有数组类型,而数组呢,其实就是一种特殊的栈或是队列,利用javascript Array所内置的API可以很方便的模拟栈和队列。

正文

我想对于数组每一个学过编程语言的都不会陌生吧,我们知道,我们可以在数组的任意位置添加或是删除元素,然而,有时候我们还需要一种在添加或是删除元素的时候有更多控制的数据结构。有两种数据结构类似于数组。但在添加或是删除元素的时候更为的可控。他们就是栈和队列。

栈是一种遵从后进先出(LIFO)原则的有序集合。新添加的或是待删除的元素都保存在栈的末尾。我们称作栈顶,而另一端我们称作栈底。


在现实生活中就有很多栈的例子,比如下图的书本,这一摞书如果要取肯定是先去最上面的那一本,但它是最后一个放上去的,也就是栈顶的元素都是待添加或是待删除的。这就是后进先出的实际例子。

栈的创建

首先我们先创建一个类:

function Stack(){
    //各种属性和方法的声明
}

然后我们需要一种数据结构来保存栈里面的数据:

var items=[];

接下来,我们需要给栈声明一些方法:

push(element):添加一个或是几个新元素到栈顶。

pop():移除栈顶的元素,同时返回被移除元素。

peek():返回栈顶的元素,但并不对栈顶的元素做出任何的修改。

isEmpty():检查栈内是否有元素,如果有返回true,没有返回false。

clear():清除栈里的元素。

size():返回栈的元素个数。

print():打印栈里的元素。

栈的完整代码

我们通过javascript提供的API,实现栈如下:

function Stack() {

    var items = [];

    this.push = function(element){
        items.push(element);
    };

    this.pop = function(){
        return items.pop();
    };

    this.peek = function(){
        return items[items.length-1];
    };

    this.isEmpty = function(){
        return items.length == 0;
    };

    this.size = function(){
        return items.length;
    };

    this.clear = function(){
        items = [];
    };

    this.print = function(){
        console.log(items.toString());
    };

    this.toString = function(){
        return items.toString();
    };
}
使用栈

创建完了栈,也给他了方法,然后我们来实例化一个对象:

var stack=new Stack();
console.log(stack.isEmpty());
//true
stack.push(1);
stack.push(3);
//添加元素
console.log(stack.peek());
//输出栈顶元素3
console.log(stack.size());
//2
//输出元素个数

其余方法调用读者可自行尝试。

队列

**我们已经接触了栈,接下来要说的队列和栈十分相似,他们都是线性表,元素都是有序的
。队列和栈不同的是,队列遵循的是FIFO,也就是先进先出的原则。队列从尾部添加新元素,从顶部移除元素,最新添加的元素必须排列在队列的末尾。**


在现实生活中,最常见的队列就是排队,如下图,先进入队列的先接受服务,后进入队列的必须排在队列末尾。

队列的创建

首先我们声明一个类:

function(){
    //这里是队列的属性和方法
}

然后我们同样创建一个保存元素的数组:

var items=[];

接下来声明一些队列可用的方法:

enqueue(element):向队列尾部添加一个(或是多个)元素。

dequeue():移除队列的第一个元素,并返回被移除的元素。

front():返回队列的第一个元素——最先被添加的也是最先被移除的元素。队列不做任何变动。

isEmpty():检查队列内是否有元素,如果有返回true,没有返回false。

size():返回队列的长度。

print():打印队列的元素。

队列的完整代码

我们通过javascript提供的API,实现队列如下:

function Queue() {

    var items = [];

    this.enqueue = function(element){
        items.push(element);
    };

    this.dequeue = function(){
        return items.shift();
    };

    this.front = function(){
        return items[0];
    };

    this.isEmpty = function(){
        return items.length == 0;
    };

    this.clear = function(){
        items = [];
    };

    this.size = function(){
        return items.length;
    };

    this.print = function(){
        console.log(items.toString());
    };
}
使用队列

创建完了队列,也给他了方法,然后我们来实例化一个对象:

var queue=new Queue();
console.log(queue.isEmpty());
//true
queue.enqueue(1);
queue.enqueue(3);
//添加元素
console.log(queue.front());
//返回队列的第一个元素1
console.log(queue.size());
//2
//输出元素个数
后记

这篇博客使用javascript实现了栈和队列这两种数据结构。关于具体的应用的有机会补上。

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

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

相关文章

  • 学习javascript数据结构(二)——链表

    摘要:就那么回事后记说到现在一直都是线性表,就是顺序数据结构,他们都是有顺序的,数据都是一条绳子上的蚂蚱。那么,如果数据是没有顺序的呢那又该使用哪种数据结构呢这个放到学习数据结构三集合中学习。 前言 人生总是直向前行走,从不留下什么。 原文地址:学习javascript数据结构(二)——链表 博主博客地址:Damonare的个人博客 正文 链表简介     上一篇博客-学习javascrip...

    Karrdy 评论0 收藏0
  • 数据结构与算法(栈和队列) --javascript语言描述

    摘要:用两个栈实现队列用两个栈来实现一个队列,完成队列的和操作。队列中的元素为类型。 用两个栈实现队列 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 var stack1 = []; var stack2 = []; function push(node){ stack1.push(node); } function pop(){ if(sta...

    刘德刚 评论0 收藏0
  • CSS技巧

    摘要:技巧使你的更加专业这是上关于技巧的一篇译文,另外你也可以在本项目看到原文。列举了一些很实用的技巧,比如给空内容的标签添加内容,逗号分隔列表等等。排序算法看源码,把它背下来吧排序算法的封装。主要帮助初学者更好的掌握排序算法的实现。 成为专业程序员路上用到的各种优秀资料、神器及框架 成为一名专业程序员的道路上,需要坚持练习、学习与积累,技术方面既要有一定的广度,更要有自己的深度。 Java...

    DangoSky 评论0 收藏0
  • CSS技巧

    摘要:技巧使你的更加专业这是上关于技巧的一篇译文,另外你也可以在本项目看到原文。列举了一些很实用的技巧,比如给空内容的标签添加内容,逗号分隔列表等等。排序算法看源码,把它背下来吧排序算法的封装。主要帮助初学者更好的掌握排序算法的实现。 成为专业程序员路上用到的各种优秀资料、神器及框架 成为一名专业程序员的道路上,需要坚持练习、学习与积累,技术方面既要有一定的广度,更要有自己的深度。 Java...

    zgbgx 评论0 收藏0
  • js模拟简单的栈和队列

    摘要:移除数组第一项并返回该项同时将数组的长度减一。简单实现栈使用和结合实现简单栈简单实现队列使用与结合实现简单队列额外补充与用途相反,在数组前端添加任意个项,并返回新数组的长度。 栈和队列 栈:LIFO(先进后出)一种数据结构队列:LILO(先进先出)一种数据结构 使用的js方法 1.push();可以接收任意数量的参数,把它们逐个推进队尾(数组末尾),并返回修改后的数组长度。2.po...

    张金宝 评论0 收藏0

发表评论

0条评论

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