栈(Stack)
栈是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端称为栈顶
栈是一种后入先出(LIFO, last-in-first-out)的数据结构
栈的实现
采用数组作为实现栈的底层数据结构来存储数据
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;
this.top++;
}
function pop() {
this.top--;
return this.dataStore[this.top];
}
function peek() {
return this.dataStore[this.top-1]
}
function length() {
return this.top;
}
function clear() {
this.top = 0;
}
}
Stack的使用
数制间的相互转换
将数字n转换为以b为奇数的数字(b = 2~9)
function mulBase(num, base) {
let s = new Stack();
while(num > 0) {
s.push(num % base);
num = Math.floor(num / base);
}
let convertRes = "";
while(s.length()) {
convertRes += s.pop();
}
return Number(convertRes);
}
回文
回文:一个单词、短语或数字 ,从前往后写和从后往前写都是一样的
function isPalindrome(word) {
let s = new Stack();
for(let i = 0; i < word.length; i++) {
s.push(word[i]);
}
let rWord = "";
while(s.length() > 0) {
rWord += s.pop();
}
if(word === rWord) {
return true;
} else {
return false;
}
}
递归
// 实现阶乘的递归函数
function factorial(n) {
if(n === 0) {
return 1;
} else {
return n * factorial(n-1);
}
}
//使用栈模拟递归过程
function fact(n) {
let s = new Stack();
while(n > 0) {
s.push(n);
n--;
}
let res = 1;
while(s.length()) {
res *= s.pop();
}
return res;
}
参考:数据结构与算法JavaScript描述