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;
}

京公网安备 11010502036488号