两个栈实现一个队列

两个栈实现一个队列

功能add、delete、length

逻辑机构和物理结构的对比:

  • 队列是逻辑结构,抽象模型
  • 简单的,可以用数组、链表实现
  • 复杂的队列服务,需要单独设计

假设一个队列A、B、C        ,A为对首C为队尾

入队列从队尾进入,出队列从队尾出去。

// 通过两个栈来实现一个队列
// pop() 方法用于删除数组的最后一个元素并返回删除的元素。
export class MyQueue{
	// private当前方法在自己的函数里可以调用,外面无法调用
	private stack1: number[]=[]
	private stack2: number[]=[]
	// add方法,n为number类型
	
	// 入队
	add(n:number){
		this.stack1.push(n)
	}
	
	// 出队
	// detele返回一个number或者null
	delete():number|null{
		let res
		const stack1=this.stack1
		const stack2=this.stack2
		
		// 1.将stack1所有的元素移动到Stack2中
		while(stack1.length){
			const n=stack1.pop()
			if(n!=null){
				stack2.push(n)
			}
		}
		
		// 2.stack2 pop
		res=stack2.pop()
		
		// 3.将Stack2所有元素还给stack1
		while(stack2.length){
			const n=stack2.pop()
			if(n!=null){
				stack1.push(n)
			}
		}
		
		return res || null
	}
	// length前面添加一个get属性可以通过属性的方式调用
	get length():number{
		// length里面的值,因为stack2是用完之后再返回到stack1,所以返回stack1的长度
		return this.stack1.length
	}
}

//功能测试
const q=new MyQueue()
q.add(100)
q.add(200)
q.add(300)
console.log(q.length);
console.log(q.delete());
console.log(q.length);

时间复杂度:add O(1);delete O(n)

空间复杂度,整体是O(n),整体储存的就是队列的长度,没有变,所以就是O(n)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值