栈的介绍
栈Stack是一种“先进后出”的数据结构
API:push pop length
栈VS数组
栈:逻辑结构(理论模型,不管如何实现,不受任何语言的限制)
数组:物理结构(真实的功能实现,受限于编程语言)
数组实现栈
//数组表示栈
const stack=[]
//入栈
stack.push(100)
stack.push(200)
stack.push(300)
//出栈
stack.push(300)
stack.push(200)
stack.push(100)
stack.length
队列的介绍
队列Queue是一种“先进先出”的数据结构
API:add delete length
队列VS数组
队列是逻辑结构,抽象模型
简单的可以用数组、链表实现
复杂的队列服务需要单独设计
数组实现栈
const queue=[]
//入队
queue.push(1)
queue.push(2)
queue.push(3)
//出队
const n=queue.shift()
在了解完栈的概念后,接下来我们通过两个栈实现一个队列,代码如下
class MyQueue{
private stack1:number[]=[]
private stack2:number[]=[]
/**
* 入队
* @param n n
*/
add(n:number){
this.stack1.push(n)
}
/**
* 出队
*/
delete():number | null{
let res
const stack1 = this.stack1
const stack2 = this.stack2
//将stack1所有元素移动到stack2中
while(stack1.length){
const n =stack1.pop()
if(n!=null){
stack2.push(n)
}
}
//stack2 pop
res=stack2.pop()
//将stack2所有元素还给stack1
while(stack2.length){
const n=stack2.pop()
if(n!=null){
stack1.push(n)
}
}
return res || null
}
get length():number{
return this.stack1.length
}
}
两个栈实现一个队列
时间复杂度:add O(1) delete O(n)
空间复杂度:O(n)