数据结构就是计算机中存储和组织数据的方式
图书摆放问题 新书如何插入 怎么找到某本特定的书
普通语言的数组封装 比如Java的ArrayList
常见语言的数组不能存放不同的数据类型,需要放相同的数据类型,通常封装一个基本类型的数组,数组里面的数据是Object类型。
常见语言的数组容量不会自动改变吧,如果当前数组容量不够用,需要申请更大的数组,将当前数组复制到更大的数组内,填充数据
常见语言的数组进行中间插入和删除操作性能比较低
数组是一种线性结构,可以在数组的任意位置添加或者删除数据,有时为了功能,需要限制这种任意性
栈和队列就是比较常见的受限的数据结构
栈,是一种受限的线性表,先进后出(last in first out)就是LIFO
限制是仅允许在表的一端进行插入和删除运算,这一端被称为栈顶,相对另一端为栈底
LIFO事如其名,后入先出
向一个栈插入新元素称为入栈,进栈,压栈,就是将新元素放到栈顶元素的上方,成为新的栈顶元素
从一个栈删除元素又被称为出栈或退栈,它是把栈顶元素删除掉,使其相邻(也就是它下方)的元素成为新的栈顶元素

正确答案为C,顺序进栈,若如C所说,3出栈后,下方有4,5,6,三个数据,4出栈后,还剩5,6,若要6出栈,则不可存在5,而现在从上到下是5,6两个数据,故C答案的出栈序列不合法。
6543入栈,3出栈,4出栈,若想6出栈,则5必须提前出栈,不可能6比5先出栈,两者矛盾。

1.将元素压入栈
2.从栈中取出
3.查看栈顶元素
4.判断栈内是否有元素
5.查看栈的长度
6.将栈内的元素转换为字符串
// method是与一个实例对象有联系
// 封装栈类
function Stack() {
this.item = []
// 1.将元素压入栈
Stack.prototype.push = function (element) {
this.item.push(element)
}
// 2.从栈中取出元素
Stack.prototype.pop = function () {
return this.item.pop()
}
// 3.查看栈顶元素
Stack.prototype.peek = function () {
return this.item[this.item.length -1]
}
// 4.判断栈内是否有元素
Stack.prototype.isEmpty = function () {
return this.item.length == 0
}
// 5.查看栈的长度
Stack.prototype.size = function () {
return this.item.length
}
// 6.将栈内的元素转换为字符串
Stack.prototype.toString = function () {
var result = ''
for(var i = 0; i < this.item.length; i++){
result += this.item[i] + ' '
}
return result
}
}
var s = new Stack()
s.push(100)
s.push(22)
s.push(33)
s.push(44)
s.push(55)
alert(s)
s.pop()
s.pop()
s.pop()
alert(s)
alert(s.peek())
alert(s.isEmpty())
alert(s.size())
alert(s.toString())
代码实现十进制转二进制函数
// 十进制转换为二进制
function dec2bin(decNumber) {
// 定义栈对象
var stack = new Stack()
// 循环操作
while(decNumber > 0){
// 1.1获取余数并且放入到栈中
stack.push(decNumber % 2)
// 1.2获取整除后的结果,作为下一次运行的数字
// Math.floor向下取整
decNumber = Math.floor(decNumber / 2)
}
// 从栈中取出我们的0和1
stack.toString()
var binaryString = ''
while (!stack.isEmpty()) {
binaryString += stack.pop()
}
return binaryString
}
alert(dec2bin(100))
