1. 程式人生 > >java版資料結構與演算法—佇列、兩個棧實現一個佇列

java版資料結構與演算法—佇列、兩個棧實現一個佇列

/**
 * 佇列:先進先出
 */
class MyQueue {
    int a[];
    int maxSize; //大小
    int front;  //開頭
    int rear;   //結尾
    int nItems; //元素個數
    //初始化
    public MyQueue(int size){
        maxSize = size;
        a = new int[maxSize];
        front = 0;
        rear = -1;
        nItems = 0;
    }
    //插入
    public
void insert(int value){ if(rear == maxSize - 1){ rear = -1; } a[++rear] = value; nItems ++; } //刪除 public int remove(){ int tmp = a[front++]; if(front == maxSize){ front = 0; } nItems --; return
tmp; } //檢視 public int peekFront(){ return a[front]; } //判滿 public boolean isFull(){ return nItems == maxSize; } //判空 public boolean isEmpty(){ return nItems == 0; } //檢視元素個數 public int size(){ return nItems; } public static
void main(String[] args){ MyQueue myQueue = new MyQueue(10); myQueue.insert(10); myQueue.insert(20); myQueue.insert(30); myQueue.insert(40); myQueue.insert(50); System.out.println("刪除一次:" + myQueue.remove()); System.out.println("刪除兩次:" + myQueue.remove()); System.out.println("刪除三次:" + myQueue.remove()); myQueue.insert(60); myQueue.insert(70); myQueue.insert(80); myQueue.insert(90); myQueue.insert(100); myQueue.insert(600); while (!myQueue.isEmpty()){ int value = myQueue.remove(); System.out.print(value + " "); } } }

在這裡插入圖片描述

package com.zoujc.test2;

import java.util.Stack;

/**
 * @author zoujc
 * @date 2018/11/27
 * 用兩個核實現一個佇列。佇列的宣告如下,諸實現它的兩個函式appendTail和deleteHead,
 * 分別完成在佇列尾部插入結點和在佇列頭部刪除結點的功能。
 */
public class MList<T> {
	//插入棧1
	private Stack<T> stack1 = new Stack<>();
	//彈出棧2
	private Stack<T> stack2 = new Stack<>();

	public MList(){

	}
	//在佇列的尾部插入節點
	public void appendTail(T t){
		stack1.add(t);
	}
	//刪除,在佇列的頭部刪除節點
	public T deleteHead(){
		//棧2為空的時候,把棧1的所有資料插入到棧2
		if(stack2.isEmpty()){
			while(!stack1.isEmpty()){
				stack2.add(stack1.pop());
			}
		}
		//如果棧2中還沒有資料,則丟擲異常
		if(stack2.isEmpty()){
			throw new RuntimeException("No more element.");
		}
		//出佇列,返回棧頂元素
		return stack2.pop();
	}
}