数据结构中的栈

128 阅读3分钟

数据结构就是计算机中存储和组织数据的方式

图书摆放问题 新书如何插入 怎么找到某本特定的书

普通语言的数组封装 比如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))