摘要:原文地址學習數據結構一棧和隊列博主博客地址的個人博客幾乎所有的編程語言都原生支持數組類型,因為數組是最簡單的內存數據結構。他們就是棧和隊列。我們稱作棧頂,而另一端我們稱作棧底。移除棧頂的元素,同時返回被移除元素。
前言
只要你不計較得失,人生還有什么不能想法子克服的。
原文地址:學習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實現了棧和隊列這兩種數據結構。關于具體的應用的有機會補上。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/87996.html
摘要:就那么回事后記說到現在一直都是線性表,就是順序數據結構,他們都是有順序的,數據都是一條繩子上的螞蚱。那么,如果數據是沒有順序的呢那又該使用哪種數據結構呢這個放到學習數據結構三集合中學習。 前言 人生總是直向前行走,從不留下什么。 原文地址:學習javascript數據結構(二)——鏈表 博主博客地址:Damonare的個人博客 正文 鏈表簡介 ????上一篇博客-學習javascrip...
摘要:用兩個棧實現隊列用兩個棧來實現一個隊列,完成隊列的和操作。隊列中的元素為類型。 用兩個棧實現隊列 用兩個棧來實現一個隊列,完成隊列的Push和Pop操作。 隊列中的元素為int類型。 var stack1 = []; var stack2 = []; function push(node){ stack1.push(node); } function pop(){ if(sta...
摘要:移除數組第一項并返回該項同時將數組的長度減一。簡單實現棧使用和結合實現簡單棧簡單實現隊列使用與結合實現簡單隊列額外補充與用途相反,在數組前端添加任意個項,并返回新數組的長度。 棧和隊列 棧:LIFO(先進后出)一種數據結構隊列:LILO(先進先出)一種數據結構 使用的js方法 1.push();可以接收任意數量的參數,把它們逐個推進隊尾(數組末尾),并返回修改后的數組長度。2.po...
閱讀 1322·2021-11-16 11:45
閱讀 2242·2021-11-02 14:40
閱讀 3886·2021-09-24 10:25
閱讀 3032·2019-08-30 12:45
閱讀 1262·2019-08-29 18:39
閱讀 2477·2019-08-29 12:32
閱讀 1611·2019-08-26 10:45
閱讀 1925·2019-08-23 17:01