栈(stack),它是一种受限的线性表,后进先出(LIFO)
其限制是仅允许在 表的一端 进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。口 LIFO(last in first out)表示就是后进入的元素,第一个弹出栈空间.类似于自动餐托盘,最后放上的托盘,往往先把拿出去使用.
向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素,口 从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
练习题
有六个元素6,5,4,3,2,1 的顺序进栈,问下列哪一个不是合法的出栈序列?
A.543612 B.453216 C.340521 D.234156
栈的简单封装
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
// 栈类
function Stack() {
// 栈中的属性
var items = []
// 栈相关的方法
// 压栈操作
this.push = function (element) {
items.push(element)
}
// 出栈操作
this.pop = function () {
return items.pop()
}
// peek操作
this.peek = function () {
return items[items.length - 1]
}
// 判断栈中的元素是否为空
this.isEmpty = function () {
return items.length == 0
}
// 获取栈中元素的个数
this.size = function () {
return items.length
}
}
// // 模拟面试题
// var stack = new Stack()
//
// // 情况下代码模拟
// stack.push(6)
// stack.push(5)
// stack.pop() // 5
// stack.push(4)
// stack.pop() // 4
// stack.push(3)
// stack.pop() // 3
// stack.pop() // 6
// stack.push(2)
// stack.push(1)
// stack.pop() // 1
// stack.pop() // 2
// 封装十进制转二进制的函数
function dec2bin(decNumer) {
// 定义变量
var stack = new Stack()
var remainder;
// 循环除法
while (decNumer > 0) {
remainder = decNumer % 2
decNumer = Math.floor(decNumer / 2)
stack.push(remainder)
}
// 将数据取出
var binayriStrng = ""
while (!stack.isEmpty()) {
binayriStrng += stack.pop()
}
return binayriStrng
}
// 测试函数
alert(dec2bin(10))
alert(dec2bin(233))
alert(dec2bin(1000))
</script>
</body>
</html>