java版資料結構與演算法—佇列、兩個棧實現一個佇列
阿新 • • 發佈:2018-11-29
/**
* 佇列:先進先出
*/
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();
}
}