成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

學(xué)習(xí)javascript數(shù)據(jù)結(jié)構(gòu)(一)——棧和隊(duì)列

doodlewind / 1891人閱讀

摘要:原文地址學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)一棧和隊(duì)列博主博客地址的個人博客幾乎所有的編程語言都原生支持?jǐn)?shù)組類型,因?yàn)閿?shù)組是最簡單的內(nèi)存數(shù)據(jù)結(jié)構(gòu)。他們就是棧和隊(duì)列。我們稱作棧頂,而另一端我們稱作棧底。移除棧頂?shù)脑兀瑫r返回被移除元素。

前言

只要你不計(jì)較得失,人生還有什么不能想法子克服的。

原文地址:學(xué)習(xí)javascript數(shù)據(jù)結(jié)構(gòu)(一)——棧和隊(duì)列

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

幾乎所有的編程語言都原生支持?jǐn)?shù)組類型,因?yàn)閿?shù)組是最簡單的內(nèi)存數(shù)據(jù)結(jié)構(gòu)。javascript也有數(shù)組類型,而數(shù)組呢,其實(shí)就是一種特殊的?;蚴顷?duì)列,利用javascript?Array所內(nèi)置的API可以很方便的模擬棧和隊(duì)列。

正文

我想對于數(shù)組每一個學(xué)過編程語言的都不會陌生吧,我們知道,我們可以在數(shù)組的任意位置添加或是刪除元素,然而,有時候我們還需要一種在添加或是刪除元素的時候有更多控制的數(shù)據(jù)結(jié)構(gòu)。有兩種數(shù)據(jù)結(jié)構(gòu)類似于數(shù)組。但在添加或是刪除元素的時候更為的可控。他們就是棧和隊(duì)列。

棧是一種遵從后進(jìn)先出(LIFO)原則的有序集合。新添加的或是待刪除的元素都保存在棧的末尾。我們稱作棧頂,而另一端我們稱作棧底。


在現(xiàn)實(shí)生活中就有很多棧的例子,比如下圖的書本,這一摞書如果要取肯定是先去最上面的那一本,但它是最后一個放上去的,也就是棧頂?shù)脑囟际谴砑踊蚴谴齽h除的。這就是后進(jìn)先出的實(shí)際例子。

棧的創(chuàng)建

首先我們先創(chuàng)建一個類:

function Stack(){
    //各種屬性和方法的聲明
}

然后我們需要一種數(shù)據(jù)結(jié)構(gòu)來保存棧里面的數(shù)據(jù):

var items=[];

接下來,我們需要給棧聲明一些方法:

push(element):添加一個或是幾個新元素到棧頂。

pop():移除棧頂?shù)脑?,同時返回被移除元素。

peek():返回棧頂?shù)脑?,但并不對棧頂?shù)脑刈龀鋈魏蔚男薷摹?/p>

isEmpty():檢查棧內(nèi)是否有元素,如果有返回true,沒有返回false。

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

size():返回棧的元素個數(shù)。

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

棧的完整代碼

我們通過javascript提供的API,實(shí)現(xiàn)棧如下:

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();
    };
}
使用棧

創(chuàng)建完了棧,也給他了方法,然后我們來實(shí)例化一個對象:

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
//輸出元素個數(shù)

其余方法調(diào)用讀者可自行嘗試。

隊(duì)列

**我們已經(jīng)接觸了棧,接下來要說的隊(duì)列和棧十分相似,他們都是線性表,元素都是有序的
。隊(duì)列和棧不同的是,隊(duì)列遵循的是FIFO,也就是先進(jìn)先出的原則。隊(duì)列從尾部添加新元素,從頂部移除元素,最新添加的元素必須排列在隊(duì)列的末尾。**


在現(xiàn)實(shí)生活中,最常見的隊(duì)列就是排隊(duì),如下圖,先進(jìn)入隊(duì)列的先接受服務(wù),后進(jìn)入隊(duì)列的必須排在隊(duì)列末尾。

隊(duì)列的創(chuàng)建

首先我們聲明一個類:

function(){
    //這里是隊(duì)列的屬性和方法
}

然后我們同樣創(chuàng)建一個保存元素的數(shù)組:

var items=[];

接下來聲明一些隊(duì)列可用的方法:

enqueue(element):向隊(duì)列尾部添加一個(或是多個)元素。

dequeue():移除隊(duì)列的第一個元素,并返回被移除的元素。

front():返回隊(duì)列的第一個元素——最先被添加的也是最先被移除的元素。隊(duì)列不做任何變動。

isEmpty():檢查隊(duì)列內(nèi)是否有元素,如果有返回true,沒有返回false。

size():返回隊(duì)列的長度。

print():打印隊(duì)列的元素。

隊(duì)列的完整代碼

我們通過javascript提供的API,實(shí)現(xiàn)隊(duì)列如下:

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());
    };
}
使用隊(duì)列

創(chuàng)建完了隊(duì)列,也給他了方法,然后我們來實(shí)例化一個對象:

var queue=new Queue();
console.log(queue.isEmpty());
//true
queue.enqueue(1);
queue.enqueue(3);
//添加元素
console.log(queue.front());
//返回隊(duì)列的第一個元素1
console.log(queue.size());
//2
//輸出元素個數(shù)
后記

這篇博客使用javascript實(shí)現(xiàn)了棧和隊(duì)列這兩種數(shù)據(jù)結(jié)構(gòu)。關(guān)于具體的應(yīng)用的有機(jī)會補(bǔ)上。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/87996.html

相關(guān)文章

  • 學(xué)習(xí)javascript數(shù)據(jù)結(jié)構(gòu)(二)——鏈表

    摘要:就那么回事后記說到現(xiàn)在一直都是線性表,就是順序數(shù)據(jù)結(jié)構(gòu),他們都是有順序的,數(shù)據(jù)都是一條繩子上的螞蚱。那么,如果數(shù)據(jù)是沒有順序的呢那又該使用哪種數(shù)據(jù)結(jié)構(gòu)呢這個放到學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)三集合中學(xué)習(xí)。 前言 人生總是直向前行走,從不留下什么。 原文地址:學(xué)習(xí)javascript數(shù)據(jù)結(jié)構(gòu)(二)——鏈表 博主博客地址:Damonare的個人博客 正文 鏈表簡介 ????上一篇博客-學(xué)習(xí)javascrip...

    Karrdy 評論0 收藏0
  • 數(shù)據(jù)結(jié)構(gòu)與算法(棧和隊(duì)列) --javascript語言描述

    摘要:用兩個棧實(shí)現(xiàn)隊(duì)列用兩個棧來實(shí)現(xiàn)一個隊(duì)列,完成隊(duì)列的和操作。隊(duì)列中的元素為類型。 用兩個棧實(shí)現(xiàn)隊(duì)列 用兩個棧來實(shí)現(xiàn)一個隊(duì)列,完成隊(duì)列的Push和Pop操作。 隊(duì)列中的元素為int類型。 var stack1 = []; var stack2 = []; function push(node){ stack1.push(node); } function pop(){ if(sta...

    劉德剛 評論0 收藏0
  • CSS技巧

    摘要:技巧使你的更加專業(yè)這是上關(guān)于技巧的一篇譯文,另外你也可以在本項(xiàng)目看到原文。列舉了一些很實(shí)用的技巧,比如給空內(nèi)容的標(biāo)簽添加內(nèi)容,逗號分隔列表等等。排序算法看源碼,把它背下來吧排序算法的封裝。主要幫助初學(xué)者更好的掌握排序算法的實(shí)現(xiàn)。 成為專業(yè)程序員路上用到的各種優(yōu)秀資料、神器及框架 成為一名專業(yè)程序員的道路上,需要堅(jiān)持練習(xí)、學(xué)習(xí)與積累,技術(shù)方面既要有一定的廣度,更要有自己的深度。 Java...

    DangoSky 評論0 收藏0
  • CSS技巧

    摘要:技巧使你的更加專業(yè)這是上關(guān)于技巧的一篇譯文,另外你也可以在本項(xiàng)目看到原文。列舉了一些很實(shí)用的技巧,比如給空內(nèi)容的標(biāo)簽添加內(nèi)容,逗號分隔列表等等。排序算法看源碼,把它背下來吧排序算法的封裝。主要幫助初學(xué)者更好的掌握排序算法的實(shí)現(xiàn)。 成為專業(yè)程序員路上用到的各種優(yōu)秀資料、神器及框架 成為一名專業(yè)程序員的道路上,需要堅(jiān)持練習(xí)、學(xué)習(xí)與積累,技術(shù)方面既要有一定的廣度,更要有自己的深度。 Java...

    zgbgx 評論0 收藏0
  • js模擬簡單的棧和隊(duì)列

    摘要:移除數(shù)組第一項(xiàng)并返回該項(xiàng)同時將數(shù)組的長度減一。簡單實(shí)現(xiàn)棧使用和結(jié)合實(shí)現(xiàn)簡單棧簡單實(shí)現(xiàn)隊(duì)列使用與結(jié)合實(shí)現(xiàn)簡單隊(duì)列額外補(bǔ)充與用途相反,在數(shù)組前端添加任意個項(xiàng),并返回新數(shù)組的長度。 棧和隊(duì)列 棧:LIFO(先進(jìn)后出)一種數(shù)據(jù)結(jié)構(gòu)隊(duì)列:LILO(先進(jìn)先出)一種數(shù)據(jù)結(jié)構(gòu) 使用的js方法 1.push();可以接收任意數(shù)量的參數(shù),把它們逐個推進(jìn)隊(duì)尾(數(shù)組末尾),并返回修改后的數(shù)組長度。2.po...

    張金寶 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<