国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

doodlewind / 1881人閱讀

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

前言

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

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

博主博客地址:Damonare的個(gè)人博客

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

正文

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

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


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

棧的創(chuàng)建

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

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

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

var items=[];

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

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

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

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

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

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

size():返回棧的元素個(gè)數(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í)例化一個(gè)對(duì)象:

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
//輸出元素個(gè)數(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)建

首先我們聲明一個(gè)類:

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

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

var items=[];

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

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

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

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

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

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

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í)例化一個(gè)對(duì)象:

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

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/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)呢這個(gè)放到學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)三集合中學(xué)習(xí)。 前言 人生總是直向前行走,從不留下什么。 原文地址:學(xué)習(xí)javascript數(shù)據(jù)結(jié)構(gòu)(二)——鏈表 博主博客地址:Damonare的個(gè)人博客 正文 鏈表簡(jiǎn)介 ????上一篇博客-學(xué)習(xí)javascrip...

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

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

    劉德剛 評(píng)論0 收藏0
  • CSS技巧

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

    DangoSky 評(píng)論0 收藏0
  • CSS技巧

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

    zgbgx 評(píng)論0 收藏0
  • js模擬簡(jiǎn)單的棧和隊(duì)列

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

    張金寶 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<