JavaScript棧和隊(duì)列相關(guān)操作與實(shí)現(xiàn)方法詳解
本文實(shí)例講述了JavaScript棧和隊(duì)列相關(guān)操作與實(shí)現(xiàn)方法。分享給大家供大家參考,具體如下:
一、棧的介紹
棧就是和列表類似的一種數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)只能在棧頂添加或者刪除。棧是一種特殊的列表,棧內(nèi)的元素只能通過列表的一端訪問,成為棧頂。棧具有后進(jìn)先出的特點(diǎn),所以任何不在棧頂?shù)脑囟紵o(wú)法訪問。
后進(jìn)先出(LIFO,last-in-first-out)的數(shù)據(jù)結(jié)構(gòu)。
對(duì)棧的操作
1.對(duì)棧的兩種主要操作為將一個(gè)元素壓入棧和將一個(gè)元素彈出棧。
入棧:push();出棧:
pop();
2.預(yù)覽棧頂?shù)脑?code>peek();
pop()雖然可以訪問棧頂元素,但調(diào)用后,棧頂元素也從棧中永久性的被刪除。peek()方法只返回棧頂元素,并不刪除它。
對(duì)棧的實(shí)現(xiàn)
定義stack類的構(gòu)造函數(shù):
function Stack(){
this.dataStore=[];//數(shù)組dataStore保存棧內(nèi)元素,初始化為空數(shù)組
this.top=0;
//top為棧頂位置,被構(gòu)造函數(shù)初始化為0,表示棧頂對(duì)應(yīng)數(shù)組的起始位置0
this.push=push;
this.pop=pop;
this.peek=peek;
}
實(shí)現(xiàn)push()方法:
function push(element){
this.dataStore[this.top++]=element;
}
實(shí)現(xiàn)pop()方法:
function pop(element){
return this.dataStore[--this.top];
//pop方法與push方法相反,它返回棧頂元素,同時(shí)將變量top的值減1
}
實(shí)現(xiàn)peek()方法:
function peek(element){
return this.dataStore[this.top-1];
//peek方法返回?cái)?shù)組的第top-1個(gè)位置的元素,即棧頂元素。
}
如果對(duì)一個(gè)空棧調(diào)用peek()方法,結(jié)果為undefined,因?yàn)闂J强盏?,棧頂沒有任何元素。
實(shí)現(xiàn)length():
需要知道棧內(nèi)存儲(chǔ)了多少元素,length()方法通過返回變量top值得方法返回棧內(nèi)的元素個(gè)數(shù)。
function length(){
return this.top();
}
實(shí)現(xiàn)clear():
clear()將變量top的值設(shè)置為0,清空一個(gè)棧:
function clear(){
this.top=0;
}
總結(jié):Stack類
function stack(){
this.dataStore=[];
this.top=0;
this.push=push;
this.pop=pop;
this.peek=peek;
this.clear=clear;
this.length=length;
}
function push(element){
this.dataStore[this.top++]=element;
}
function peek(){
return this.dataStore[this.top-1];
}
function pop(){
return this.dataStore[--this.top];
}
function clear(){
this.top=0;
}
function length(){
return this.top;
}
二、隊(duì)列
隊(duì)列是一種列表,隊(duì)列智能在隊(duì)尾插入元素,在隊(duì)首刪除元素。隊(duì)列用于存儲(chǔ)按順序排列的數(shù)據(jù),先進(jìn)先出。
對(duì)隊(duì)列的操作
隊(duì)列主要兩種操作,入隊(duì)和出隊(duì),入隊(duì)是在隊(duì)尾插入新元素,出隊(duì)是刪除隊(duì)首的元素。另一種是讀取隊(duì)頭的元素,peek();
push()在數(shù)組末尾添加元素
names=[];
names.push("hling");
names.push("aling");
print(names); //顯示hling,aling
shift()刪除數(shù)組中第一個(gè)元素
names.shift(); print(names); //顯示aling
定義Queue
function Queue(){
this.dataStore=[];
this.enqueue=enqueue;
this.dequeue=dequeue;
this.front=front;
this.back=back;
this.toString=toString;
this.empty=empty;
}
enqueue()向隊(duì)尾添加一個(gè)元素
function enqueue(element){
this.dataStore.push(element);
}
dequeue()向隊(duì)尾添加一個(gè)元素
function dequeue(element){
return this.dataStore.shift(element);
}
讀取隊(duì)首和隊(duì)尾的元素
function front(){
return this.dataStore[0];
}
function back(){
return this.dataStore[this.dataStore.length-1];
}
toString()顯示隊(duì)列內(nèi)的所有元素
function toString(){
var retStr="";
for(var i=0;i<this.dataStore.length;i++){
retStr+=this.dataStore[i]+"\n";
}
return retStr;
empty()方法盤對(duì)隊(duì)列是否為空
function empty(){
if(this.dataStore.length==0){
return true;
}else{
return false;
}
}
**Queue隊(duì)列的類
function Queue(){
this.dataStore=[];
this.enqueue=enqueue;
this.dequeue=dequeue;
this.front=front;
this.back=back;
this.toString=toString;
this.empty=empty;
}
function enqueue(element){
this.dataStore.push(element);
}
function dequeue(element){
return this.dataStore.shift(element);
}
function front(){
return this.dataStore[0];
}
function back(){
return this.dataStore[this.dataStore.length-1];
}
function toString(){
var retStr="";
for(var i=0;i<this.dataStore.length;i++){
retStr+=this.dataStore[i]+"\n";
}
return retStr;
function empty(){
if(this.dataStore.length==0){
return true;
}else{
return false;
}
}
更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》、《JavaScript排序算法總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》及《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
- 深入JavaScript高級(jí)程序設(shè)計(jì)之對(duì)象、數(shù)組(棧方法,隊(duì)列方法,重排序方法,迭代方法)
- JavaScript數(shù)據(jù)結(jié)構(gòu)與算法之棧與隊(duì)列
- JS實(shí)現(xiàn)隊(duì)列與堆棧的方法
- JavaScript數(shù)組實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)中的隊(duì)列與堆棧
- JavaScript數(shù)組的棧方法與隊(duì)列方法詳解
- JavaScript數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)之?dāng)?shù)組、棧與隊(duì)列
- JS實(shí)現(xiàn)利用兩個(gè)隊(duì)列表示一個(gè)棧的方法
- JavaScript基于數(shù)組實(shí)現(xiàn)的棧與隊(duì)列操作示例
- 如何使用JavaScript實(shí)現(xiàn)棧與隊(duì)列
- JavaScript中棧和隊(duì)列應(yīng)用詳情
相關(guān)文章
用于CSS代碼壓縮與格式化的javascript函數(shù)代碼
呵呵,發(fā)現(xiàn)只要幾行JS代碼就可實(shí)現(xiàn)css的壓縮與格式化,非常不錯(cuò)。2009-12-12
javascript實(shí)現(xiàn)生成并下載txt文件方式
這篇文章主要介紹了javascript實(shí)現(xiàn)生成并下載txt文件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09
js實(shí)現(xiàn)隨機(jī)點(diǎn)名系統(tǒng)(實(shí)例講解)
下面小編就為大家?guī)硪黄猨s實(shí)現(xiàn)隨機(jī)點(diǎn)名系統(tǒng)(實(shí)例講解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-10-10
JavaScript實(shí)現(xiàn)命名空間的多種方式
隨著項(xiàng)目規(guī)模的不斷擴(kuò)大,如何有效地組織和管理代碼成為一個(gè)重要的課題,命名空間是解決這一問題的有效手段之一,它可以幫助我們避免全局變量污染,減少變量名沖突的問題,從而提高代碼的可維護(hù)性和模塊化程度,本文介紹了JavaScript實(shí)現(xiàn)命名空間的多種方式2024-11-11
javascript中json對(duì)象json數(shù)組json字符串互轉(zhuǎn)及取值方法
這篇文章主要介紹了javascript中json對(duì)象json數(shù)組json字符串互轉(zhuǎn)及取值方法,需要的朋友可以參考下2017-04-04
基于jquery實(shí)現(xiàn)的省市區(qū)級(jí)聯(lián)無(wú)ajax
省市區(qū)級(jí)聯(lián)的實(shí)現(xiàn)方法有很多,在本文為大家介紹下如何使用jquery無(wú)ajax來實(shí)現(xiàn),感興趣的朋友可以參考下,希望對(duì)大家有所幫助2013-09-09

