java中Stack栈的使用
Stack 类表示后进先出(LIFO)的对象堆栈。它通过五个操作对类 Vector 进行了扩展 ,允许将向量视为堆栈。它提供了通常的 push 和 pop 操作,以及取堆栈顶点的 peek 方法、测试堆栈是否为空的 empty 方法、在堆栈中查找项并确定到堆栈顶距离的 search 方法。
继承关系如下:
常用方法: boolean empty() 测试堆栈是否为空。
E peek() 查看堆栈顶部的对象,但不从堆栈中移除它。
E pop() 移除堆栈顶部的对象,并作为此函数的值返回该对象。
E push(E item) 把项压入堆栈顶部。
int search(Object o) 返回对象在堆栈中的位置,以 1 为基数。
下面我们来谈论一下如何用两个栈实现一个队列:
首先,栈是先进后出,而队列是先进先出,所以我们可以用两个栈,在插入时,我们可以将数据压入stack1,比如压入1,2,3那么1在底,但是我们可以将stack1压入stack2,那么stack2的顺序就是3,2,1就相当于先进先出,也就是队列的特性,具体实现如下:
public static void main(String[] args) { Stack<Integer> st1=new Stack<>(); Stack<Integer> st2=new Stack<>(); st1.push(3); st1.push(2); st1.push(1); st1=insert(st1,0); st2=detele(st1,st2); while(!st2.empty()){ System.out.println(st2.pop()); } } //插入元素,先将其插入stack1中 public static Stack<Integer> insert(Stack<Integer> st1,int num){ st1.push(num); return st1; } //删除元素时,先将stack1变为stack2,然后再删除stack2的顶,也就是最先进去的元素 public static Stack<Integer> detele(Stack<Integer> st1,Stack<Integer> st2){ if(st2.empty()) { while(!st1.empty()) { st2.push(st1.pop()); } } st2.pop(); return st2; }