什么是栈?
栈是一种特殊的列表,栈内的元素只能在列表的一段访问,这一端被称为栈顶。栈是一种后入先出的数据结构。
下面就是JavaScript实现栈:
<!DOCTYPE html>
<html >
<head>
<meta charset="UTF-8">
<title>JavaScript实现stack</title>
</head>
<body>
<script>
/*定义栈构造函数*/
function Stack(){
this.dataStore = [];
this.top = 0;
this.length = length;
this.empty = empty;//判空
this.push = push; //入栈
this.pop = pop; //出栈
this.clear = clear;//清空
this.peak = peak; //返回栈顶元素
}
/*实现相关函数*/
//length:栈中元素总数
function length(){
return this.top;
}
//empty:判空
function empty(){
if(this.top == 0){
return true;
}
return false;
}
//push:入栈
function push(element){
this.dataStore[this.top++] = element;
}
//pop:出栈
function pop(){
var topEle = this.dataStore[--this.top];
this.dataStore.length = this.top;
return topEle;
}
//peek:返回栈顶元素
function peak(){
return this.dataStore[this.top-1];
}
//clear:清空
function clear(){
this.top = 0;
this.dataStore = [];
}
//测试
var stack = new Stack();
stack.push("one");
stack.push("two");
stack.push("three");
stack.push("four");
</script>
</body>
</html>
此外,介绍几个栈的实际应用。
栈的使用之数制转换:可以利用栈将数字从一种进制转换成另外一种进制。下面的方法之适合基数为2~9的情况。
//栈的使用之数制转换
function change(num,base){
var S = new Stack();
while(num>0){
S.push(num%base);
num = Math.floor(num/=base);
}
var result = "";
while(S.length()>0){
result+=S.pop();
}
return result;
}
//测试
console.log(change(100,2));//"1100100"
栈的使用之回文:回文是指这样一种现象,一个单词、短语、数字,可以从前往后和从后往前写都是一样。比如:121,“abcba”。使用栈可以轻松判断字符串是否是回文。
//栈的使用之回文
function huiwen(word){
var S = new Stack();
for(var i=0;i<word.length;i++){
S.push(word[i]);
}
var rword = "";
while(S.length()>0){
rword+=S.pop();
}
if(word == rword){
return true;
}else{
return false;
}
}
//测试
huiwen("abcba");//true