javascript編程實現(xiàn)棧的方法詳解【經(jīng)典數(shù)據(jù)結(jié)構(gòu)】
本文實例講述了javascript編程實現(xiàn)棧的方法。分享給大家供大家參考,具體如下:
棧是限定僅在表尾進(jìn)行插入或刪除操作的線性表,棧是先進(jìn)后出的。棧的表尾稱為棧頂(top),而表頭端稱為棧底(bottom)。
和線性表類似,棧也有兩種存儲表示方法,順序棧和鏈棧。
這里講一下順序棧,設(shè)置指針top指示棧頂元素在順序棧中的位置。通常的做法就是以top=0表示空棧。base為棧底指針,top為棧頂指針。
如果base為null,則表示棧結(jié)構(gòu)不存在,如果top=base則表示空棧。每當(dāng)插入一個新的元素,top+1,刪除元素,top-1。因此,非空棧中top始終在棧頂元素的下一位置上。
如下圖所示

JavaScript中自帶了數(shù)組的push和pop方法,其原理無非就是數(shù)組最后繼續(xù)添加和刪除數(shù)組最后一個元素。這里我們自己實現(xiàn)一遍棧的操作,代碼如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JS棧</title>
</head>
<body>
<script type="text/javascript">
function Stack(count){
var top=-1;//top頭指針
this.myArray=new Array();
if(count!=undefined){
this.count=count;
this.myArray=new Array(this.count);
}else{
this.count=0;
}
//入棧
this.In=function(value){
if(top==this.count){
return false;
}else{
++top;
this.myArray[top]=value;
return true;
}
return false;
}
//出棧
this.Out=function(){
if(top==-1){
return false;
}else{
var removeValue=this.myArray[top];
this.myArray[top]=null;
top--;
return removeValue;
}
}
this.Clear=function(){
this.top=-1;
}
//遍歷棧
this.tostring=function(){
for(var i=0;i<this.myArray.length;i++){
document.write(this.myArray[i]+'<br>');
}
}
}
Stack(3);
In(1);
In(2);
In(3);
tostring();//1 2 3
Out();
Out();
tostring();//1 null null
In(4);
tostring();//1 4 null
</script>
</body>
</html>
首先需要定義頭指針
function Stack(count){
var top=-1;//top頭指針
this.myArray=new Array();
if(count!=undefined){
this.count=count;
this.myArray=new Array(this.count);
}else{
this.count=0;
}
然后是入棧操作
//入棧
this.In=function(value){
if(top==this.count){
return false;
}else{
++top;
this.myArray[top]=value;
return true;
}
return false;
}
和出棧操作
//出棧
this.Out=function(){
if(top==-1){
return false;
}else{
var removeValue=this.myArray[top];
this.myArray[top]=null;
top--;
return removeValue;
}
}
鏈棧的操作和鏈表類似,這里就不做詳細(xì)介紹了。
更多關(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錯誤與調(diào)試技巧總結(jié)》
希望本文所述對大家JavaScript程序設(shè)計有所幫助。
- JavaScript中數(shù)據(jù)結(jié)構(gòu)與算法(一):棧
- JavaScript數(shù)組實現(xiàn)數(shù)據(jù)結(jié)構(gòu)中的隊列與堆棧
- JavaScript數(shù)據(jù)結(jié)構(gòu)與算法之棧詳解
- JavaScript數(shù)據(jù)結(jié)構(gòu)中棧的應(yīng)用之表達(dá)式求值問題詳解
- 利用JavaScript實現(xiàn)棧的數(shù)據(jù)結(jié)構(gòu)示例代碼
- JavaScript數(shù)據(jù)結(jié)構(gòu)與算法之棧與隊列
- JavaScript數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)之?dāng)?shù)組、棧與隊列
- javascript數(shù)據(jù)結(jié)構(gòu)中棧的應(yīng)用之符號平衡問題
- JS中數(shù)據(jù)結(jié)構(gòu)之棧
- JavaScript數(shù)據(jù)結(jié)構(gòu)之棧實例用法
- JS中的算法與數(shù)據(jù)結(jié)構(gòu)之棧(Stack)實例詳解
相關(guān)文章
如何在JavaScript中等分?jǐn)?shù)組的實現(xiàn)
這篇文章主要介紹了如何在JavaScript中等分?jǐn)?shù)組的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
JS字符串統(tǒng)計操作示例【遍歷,截取,輸出,計算】
這篇文章主要介紹了JS字符串統(tǒng)計操作,結(jié)合實例形式分析了javascript字符串的遍歷,截取,輸出,計算等相關(guān)操作技巧與注意事項,需要的朋友可以參考下2017-03-03
JavaScript加強(qiáng)之自定義callback示例
callback回調(diào)函數(shù)在本文以自定義的方式出現(xiàn),感興趣的朋友可以參考下,希望對大家有所幫助2013-09-09

