栈
栈就是和列表类似的一种数据结构,它可用来解决计算机世界里的很多问题。栈是一种高
效的数据结构,因为数据只能在栈顶添加或删除,所以这样的操作很快,而且容易实现。
栈的使用遍布程序语言实现的方方面面,从表达式求值到处理函数调用。
特点
由于栈具有后入先出的特点,所以任何不在栈顶的元素都无法访问。为了得到栈底的元
素,必须先拿掉上面的元素。
方法
对栈的两种主要操作是将一个元素压入栈和将一个元素弹出栈。
入栈使用 push() 方法;
出栈使用 pop() 方法;
peek() 方法则只返回栈顶元素,而不删除它;
clear() 方法清除栈内所有元素;
属性
top:记录栈顶的位置,方便数据的插入和弹出
length:记录栈内元素的个数
enpty:表示栈内是否含有元素
//实现栈
var Stack = function () {
this.top = 0;
this.stackDate = [];
}
Stack.prototype = {
//弹出栈顶的元素
pop: function () {
var temp = this.stackDate[this.top - 1];
this.stackDate.splice(--this.top);
return temp
},
//增加元素
push: function (element) {
this.stackDate[this.top++] = element;
},
//显示栈顶的元素
peek: function () {
return this.stackDate[this.top - 1];
},
//清空
clear: function () {
this.top = 0;
this.stackDate = [];
},
getLength: function () {
return this.top;
},
};
数制之间的相互转换(此算法只针对基数为 2~9 的情况)
//进制的转换
var mulBase = function (num, base) {
var s = new Stack();
do {
s.push(num % base);
num = Math.floor(num /= base);
} while (num > 0);
var convert = '';
while (s.getLength()) {
convert += s.pop();
}
return convert;
};
判断是否是回文
回文是指这样一种现象:一个单词、短语或数字,从前往后写和从后往前写都是一样的。
比如,单词“dad”、“racecar”就是回文;如果忽略空格和标点符号,下面这个句子也是回
文,“A man, a plan, a canal: Panama”;数字 1001 也是回文
//回文字符串
var huiwen = function (str) {
var s = new Stack();
for (let index = 0; index < str.length; index++) {
s.push(str[index]);
}
var rStr = '';
while (s.getLength()) {
rStr += s.pop();
}
if (rStr == str) {
return true;
} else {
return false;
}
}
判断符号是否匹配
//判断括号是否匹配
var pipei = function (str) {
var s = new Stack();
for (let index = 0; index < str.length; index++) {
if (str[index] == '(') {
s.push('(');
}
if (str[index] == ')') {
s.pop();
}
}
if (s.getLength() == 0) {
return true;
} else {
return false;
}
}
//判断大小括号是否匹配
var pipei = function (str) {
var s = new Stack();
for (let index = 0; index < str.length; index++) {
switch (str[index]) {
case '(':
s.push('(');
break;
case '[':
s.push('[');
break;
case '{':
s.push('{');
break;
case ')':
if (s.peek() == '(') {
s.pop();
} else {
return false;
}
break;
case ']':
if (s.peek() == '[') {
s.pop();
} else {
return false;
}
break;
case '}':
if (s.peek() == '{') {
s.pop();
} else {
return false;
}
break;
default:
break;
}
}
if (s.getLength() == 0) {
return true;
} else {
return false;
}
}