Apprentissage java - Structure de données - deux files d'attente des piles mises en œuvre, la file d'attente de deux piles

piles mises en œuvre deux files d'attente, la file d'attente de deux piles

1, deux piles de la mise en œuvre

S'il vous plaît mis en œuvre dans deux files d'attente: push pile (), pop ().

Étape Référence:

(1) classique de deux files d' attente Q1 et Q2, la pile de q1 sera appliquée à l'élément
(2) lorsque la première interprétation si la pile est vide q1, q1 , car les éléments sont toujours venir après, LIFO, à l' exception le dernier élément de la file d' attente, l'ajout d' autres éléments à q2, q1 le dernier élément dequeue
(3) hors de la pile lorsque q1 si elle est déterminée 2 est vide, sauf pour le dernier élément de q2, q2 ajouter d' autres éléments de q1, q2 alors le dernier élément de l'équipe

/**
 * 两个队列实现栈
 * 
 * @author Linlin Zhao
 * 
 */
public class StackAndQueue02 {
	public Queue<Integer> queue1;
	public Queue<Integer> queue2;

	public StackAndQueue02() {
		queue1 = new LinkedList<Integer>();
		queue2 = new LinkedList<Integer>();
	}

	/**
	 * 压栈(入队queue1)
	 * 
	 * @param num
	 * @return
	 */
	public void push(int num) {
			queue1.offer(num);
	}
	
	/**
	 * 弹栈
	 * @return
	 */
	public Integer pop() {
		 if (queue1.isEmpty() && queue2.isEmpty()) {
	            return null;
	        }
	        // 先判断 q1 是否为空 
	        if (!queue1.isEmpty()) {
	            int size = queue1.size();
	            for (int i = 0; i < size - 1; i++) {//其他元素转移
	                queue2.offer(queue1.poll());
	            }
	            return queue1.poll();//最后一个元素出队
	        } else {
	            int size = queue2.size();
	            for (int i = 0; i < size - 1; i++) {
	                queue1.offer(queue2.poll());
	            }
	            return queue2.poll();
	        }

	}

	public static void main(String[] args) {
		StackAndQueue02 myStack=new StackAndQueue02();
		myStack.push(3);
		myStack.push(6);
		myStack.push(8);
		myStack.push(3);
		myStack.push(2);
		myStack.push(0);
		myStack.push(1);
		
		System.out. println(myStack.pop());
		myStack.pop();
		System.out. println(myStack.pop());
			
	}
}

2, deux piles file d'attente

Utilisez deux piles mises en œuvre: la file d'attente add (), poll (), coup d'oeil ().

Étape Référence:

(1) Il y a deux piles de la stack2 et
(2) lorsque la file d' attente à des éléments additifs seulement stack1 sur la ligne
(3) lorsque la première file d' attente est vide est déterminée stack2, stack2 des éléments sont avancés à, FIFO . Si stack2 n'est pas vide, puis diriger l'élément pop-top stack2. Si vous ajoutez à stack2 est vide, éléments stack1, pop alors l'élément supérieur stack2

/**
 * 两个栈实现队列
 * 
 */
public class StackAndQueue {
	public Stack<Integer> stack1;
	public Stack<Integer> stack2;

	public StackAndQueue() {
		stack1 = new Stack<Integer>();
		stack2 = new Stack<Integer>();
	}

	// 入队列
	public boolean add(int num) {
		stack1.push(num);
		return true;
	}

	// 获取队首元素
	public int peek() {
		while (!stack2.isEmpty()) {
			return stack2.pop();
		}
		while (!stack1.isEmpty()) {
			stack2.push(stack1.pop());
		}
		return stack2.peek();
	}

	// 获取队首元素,并移除
	public int poll() {
		while (!stack2.isEmpty()) {
			return stack2.pop();
		}
		while (!stack1.isEmpty()) {
			stack2.push(stack1.pop());
		}
		return stack2.pop();

	}

	public static void main(String[] args) {
		StackAndQueue myQueue =new StackAndQueue();
		myQueue.add(9);
		myQueue.add(5);
		myQueue.add(8);
		myQueue.add(1);
		myQueue.add(3);
		myQueue.add(2);
		
		System.out.println(myQueue.peek());
		System.out.println(myQueue.poll());
		System.out.println(myQueue.poll());
	
	}

}

3, la mise en œuvre analogique Dueue Stack

/**
 * 使用队列实现自定义栈
 * 1、弹栈
 * 2、压栈
 * 3、获取头
 * @author Linlin Zhao
 *
 */
public class MyStack01<E> {

	//容器
	private Deque<E> container =new ArrayDeque<E>();
	//容量
	private int cap;
	
	public MyStack01(int cap) {
		super();
		this.cap = cap;
	}
	
	//压栈
	public boolean push(E e){
		if(container.size()+1>cap){
			return false;
		}
		return container.offerLast(e);//加到队尾
	}
	
	//弹栈
	public E pop(){
		return container.pollLast();//移除队尾
	}
	
	//获取
	public E peek(){
		return container.peekLast();//获取队尾
	}

	public int size(){
		return this.container.size();//队列长度
	}

	public static void main(String[] args) {
		
	}
}
Publié 57 articles originaux · louange gagné 13 · vues 1089

Je suppose que tu aimes

Origine blog.csdn.net/weixin_42924812/article/details/105316558
conseillé
Classement