栈
首先明确的一点,数据结构的作用是处理数据。栈的特点是先进后出。
常用的栈方法:
方法 原理
push() 从头部插入数据
pop( ) 从头部取出数据,并删除头部数据
peek() 查看当前栈元素
clear() 清除栈
length 获得栈的长度
一.用底层算法将栈的常用基本方法写出来
首先我们先创建一个数组来存储我们栈内的数据;
function Stack() {
//定义一个数组来存储栈内数据
this.dataStore = [];
this.push = push;
this.pop = pop;
this.peek = peek;
}
1.push()方法的实现
this.push=function (data) {
// 获得当前的下标
var index=this.dataStore.length;
// 添加数据
this.dataStore[index]=data;
}
2.pop方法的实现
this.pop=function () {
//数组里面本身有pop方法,直接调用数组的pop方法也可以
return this.dataStore.pop();
}
3.clear的实现方法
this.clear=function () {
//直接删除数组内容
delete this.dataStore;
// 并将数组置空
this.dataStore=[];
}
4.peek的实现方法
this.peek=function () {
// 获得数组的长度
var length=this.dataStore.length;
// 如果当前数组为空,则返回null
if(length<=0)
return null;
return this.dataStore[length-1];
}
二.栈的应用案例
1.数制转换
//数制转换,传入需转换的数:data,转换的进制数base
function recursion(data,base) {
//创建一个栈来存储二进制数
var stack=new Stack();
//定义余数
var Remainder;
//进行进制转换
while(data>0){
//1,取出余数
remainder=Math.floor(data%base);
data=Math.floor(data/base);
//将进制数存入栈stack中
stack.push(remainder);
}
//定义一个字符串来存放数据
var buffer="";
stack.forEach(function (item) {
buffer=buffer+item;
})
return buffer;
}
2.回文 回文是正向读出的数据与反向读出的数据相同如“aabaa”,则是回文
function palindrome (data) {
var stack=new Stack();
data.forEach(function (item) {
stack.push(item);
})
var buffer="";
//因为栈是先进后出,所以遍历栈的话是反过来的,这样就可以判断字符串是否是回文
stack.forEach(function (item) {
buffer=buffer+item;
})
if(buffer==data){
return true;
}else {
return false;
}
}
以上内容,均为本人学习时的总结,因为初学,所以有不对的地方望指正与谅解!
推荐一个图形演示的网站:https://visualgo.net/en/list