双端栈
定义:指的是一个线性表的两端当作栈低,分别进行入栈出栈操作,栈底位置不变。而栈顶位置动态变化
双端站是一种线性表,也是栈的一个特殊分类,因此可以用动态数组和栈的思想来实现双端站
双端栈的扩容与缩容
扩容:
就是把两端的元素再分配到新栈的两端
缩容:
条件是在只占四分之一的情况下进行,且缩小后的length要大于默认值
队列
定义:只允许在一端进行插入操作,在另一端进行删除操作的线性表,且删除的一段称为队首,插入的一端称为队尾
空队列:不含任何元素的队列
入队:offer
出队:poll
判断两队列是否相等
只有当两个队列中的所有元素相等,两个队列才相等
栈实现队列
需要两个栈
stackA 存放元素
stackB存放临时元素
要实现第一个元素出来,先要后面的元素先出栈到临时B栈,让第一个元素出栈,然后再回到A栈,就实现了队列的操作
队列实现栈
同理,就是先建立两个队列,一个存数据,
一个临时存数字,
队列A元素先出队,存到队列B,剩下一个元素,就可以出队
然后队列B中的元素就可以回到队列A中
循环队列:
为实现队列队首的动态移动,而不浪费空间,
提出了一种名为循环队列的存储方法
设队首元素为front,队尾元素为rear,
为了区分队列是否满或空,因此需要
将rear指向空地址,来区分队满队空
队满:(rear + 1)%data.length
队空:rear=front
扩容操作:将原来的data重新排列,从芙蓉厅=0开始到size=rear-1结束
队首的删除操作
队尾的插入操作
迭代器Iterator:定义cur
令cur = front,且cur不能等于rear
移动循环就是cur=(cur+1)%data.length
双端队列
是限定插入和删除操作在两端进行的线性表
是一种具有队列和栈的性质的数据结构
大致同循环队列一样:
区别是:队首的插入操作
front先移动到front-1处,然后让元素再进去
代码实现:
队尾的删除操作:rear处先进一个元素,然后再把rear向后移动一位
代码实现:
其次还要实现的是栈的功能,因此需要写关于栈的函数push和pop等