Uso de pilha e fila em Java
Implementação de pilha
Usando a classe de coleção Java
boolean isEmpty();
// Determina se a pilha atual está vazia, equivalente a empty ();synchronized E peek();
// Pega o elemento top atualSynchronized E pop();
// Obtenha o elemento top atual e excluaE push(E object);
// Adiciona elementos ao topo da pilhaSynchronized int search(Object o);
// Encontre a posição do elemento na pilha, contando de baixo para cima na pilha
import java.util.Stack;
public class Solution{
public static void main(String[] args){
Stack<Integer> sk=new Stack<Integer>();
System.out.println(sk.isEmpty());//判断栈是否为空,true
for(int i=0;i<10;i++){
int e=sk.push(i+20);//将元素加入栈顶,并返回栈顶元素
System.out.println(i+": "+e);
}
System.out.println(sk.empty());//判断栈是否为空,false
System.out.println(sk.pop());//返回栈顶元素,并删除
System.out.println(sk.peek());//返回当前栈顶元素
System.out.println("first:"+sk.search(20));//查找栈中元素的位置
System.out.println("last:"+sk.search(29));
}
}
Use o LinkedList para implementar indiretamente o Stack
LinkedList
É uma AbstractSequentialList
lista duplamente vinculada herdada e também pode ser usada como uma pilha, fila ou fila dupla
- Método da pilha : Método
push(e);
equivalente :addFirst(e);
// Adicione elementos ao topo da pilha - Método da pilha : Método
pop();
equivalente :removeFirst();
// Obtenha o elemento superior atual da pilha e exclua-o - Método da pilha : Método
peek();
equivalente :peekFirst();
// Obtenha o elemento superior da pilha atual
import java.util.LinkedList;
import java.util.Stack;
public class Solution{
public static void main(String[] args){
LinkedList<Integer> sk=new LinkedList<Integer>();
System.out.println(sk.isEmpty());//判断是否为空,true
//System.out.println(sk.empty());错误,没有这个方法
for(int i=0;i<10;i++){
//int e=sk.addFirst(i+20);错误,没有返回值
sk.addFirst(i+20);//向栈顶添加元素
System.out.println(i+": "+(i+20));
}
System.out.println("peekFirst:"+sk.peekFirst());
System.out.println("removeFirst:"+sk.removeFirst());//获得栈顶元素并删除
System.out.println("peekFirst:"+sk.peekFirst());//获得栈顶元素
}
}
Implementação de fila
Embora exista uma Queue
interface em Java, a classe de implementação da fila não é fornecida, mas LinkedList
a Queue
interface é implementada . Por ser LinkedList
uma lista duplamente vinculada, é muito conveniente implementar todas as funções da fila. Ao usar Queue
, tente evitar o uso Collection
do método add()
sum remove()
, porque o método add()
sum remove()
lançará uma exceção quando falhar; use offer()
para adicionar elementos, use poll()
para obter e excluir elementos, você pode julgar se é pelo valor de retorno.
Definição de fila:Queue<E> queue=new LinkedList<E>();
- Método fila :
offer(e);
Equivalente Método :offer(e)
/offerLast(e);
elementos // adicionar à cauda - método fila :
poll(e);
método equivalente :poll(e)
/pollFirst(e);
// Obter a primeira equipe e eliminar elementos - método fila :
peek(e);
método equivalente :peek(e)
/peeFirst(e);
equipa // para obter o primeiro elemento
- código 1
import java.util.LinkedList;
import java.util.Queue;
public class Solution{
public static void main(String[] args){
Queue<Integer> queue=new LinkedList<Integer>();
System.out.println(queue.isEmpty());//判断是否为空,true
//System.out.println(queue.empty());//错误,没有这个方法
for(int i=0;i<10;i++){
//int e=sk.addFirst(i+20);错误,没有返回值
queue.offer(i+20);//向队尾添加元素
System.out.println(i+": "+(i+20));
}
System.out.println("peekFirst:"+queue.peek());
System.out.println("removeFirst:"+queue.poll());//获得队首元素并删除
System.out.println("peekFirst:"+queue.peek());//获得队首元素
}
}
- código 2
import java.util.LinkedList;
import java.util.Queue;
public class Solution{
public static void main(String[] args){
LinkedList<Integer> queue=new LinkedList<Integer>();
System.out.println(queue.isEmpty());//判断是否为空,true
//System.out.println(queue.empty());//错误,没有这个方法
for(int i=0;i<10;i++){
//int e=sk.addFirst(i+20);错误,没有返回值
queue.offer(i+20);//向队尾添加元素
System.out.println(i+": "+(i+20));
}
System.out.println("peekFirst:"+queue.peek());
System.out.println("removeFirst:"+queue.poll());//获得队首元素并删除
System.out.println("peekFirst:"+queue.peek());//获得队首元素
}
}
- código 3
import java.util.LinkedList;
import java.util.Queue;
public class Solution{
public static void main(String[] args){
LinkedList<Integer> queue=new LinkedList<Integer>();
System.out.println(queue.isEmpty());//判断是否为空,true
//System.out.println(queue.empty());//错误,没有这个方法
for(int i=0;i<10;i++){
//int e=sk.addFirst(i+20);错误,没有返回值
queue.offerLast(i+20);//向队尾添加元素
System.out.println(i+": "+(i+20));
}
System.out.println("peekFirst:"+queue.peekFirst());
System.out.println("removeFirst:"+queue.pollFirst());//获得队首元素并删除
System.out.println("peekFirst:"+queue.peekFirst());//获得队首元素
}
}