一、认识栈结构
- 栈也是一种非常常见的数组结构,并且在程序中的应用非常广泛
二、数组
- 数组是一种线性结构,并且可以在数组的任意位置插入和删除数据,但是有时候,为了实现某些功能,必须对这种任意性进行限制,而栈和队列就是比较常见的受限的线性结构
三、栈结构示意图
只有一个口进出 所以要对最下面的数据删除 首先要把上面的删除
栈,是一种受限的线性表,后进先出
-
其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。
-
LIFO(last in first out)表示就是后进入的元素,第一个弹出栈空间.类似于自动餐托盘,最后放上的托盘,往往先把拿出去使用.
-
向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;
-
从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素.
四、实现栈结构有两种比较常见的方式
-
基于数组实现
-
基于链表实现
五、栈常见有哪些操作呢
-
push():添加一个新元素到栈顶位置
-
pop():移除栈顶的元素,同时返回被移除的元素
-
peek() :返回栈顶的元素,不对栈做任何修改(这个方法不会移除栈顶的元素
-
isEmpty():如果栈里没有任何元素就返回true,否则返回false
-
size():返回栈里元素个数,这个方法跟数组的length很类似
-
toString():将栈结构的内容以字符形式返回
六、封装栈结构
function Stack(){
this.items = []
// 1.将元素压入到栈
Stack.prototype.push = function(element){
this.items.push(element)
}
// 2.从栈取出元素
Stack.prototype.pop = function(){
return this.items.pop()
}
// 3.查看栈顶元素
Stack.prototype.peek = function() {
return this.items[this.items.length - 1]
}
// 4.判断栈是否为空
Stack.prototype.isEmpty = function() {
return this.items.length == 0
}
// 5.获取栈中元素的个数
Stack.prototype.size = function() {
return this.items.length
}
// 6.toString方法
Stack.prototype.isString = function() {
let res = ''
for(let i = 0; i < this.items.length; i++){
res += this.items[i] + " "
}
return res
}
}