1. 程式人生 > >java資料結構與演算法 第4章 棧和佇列

java資料結構與演算法 第4章 棧和佇列

1.棧
棧只允許訪問一個數據項, 即最後插入的資料項,移除這個資料項才能訪問倒數第二個插入的資料項,依此類推。以下是java實現的棧:

package exam;

public class StackTest {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        StackX stackArray =new StackX(10);
        stackArray.push(10);
        stackArray.push(20);
        stackArray.push(30
); stackArray.push(40); stackArray.push(50); while (!stackArray.isEmpty()) { long value=stackArray.pop(); System.out.println(value); //結果 // 50 // 40 // 30 // 20 // 10 } } } class StackX{ private int
maxSize; //棧陣列大小; private long[] stackArray; private int top; public StackX(int s){ maxSize=s; //陣列大小 stackArray=new long[maxSize]; //建立陣列 top=-1; } //插入元素 public void push(long i){ stackArray[++top]=i; } public long pop(){ return
stackArray[top--]; } public long peek(){ return stackArray[top]; } public boolean isEmpty(){ return (top==-1); } public boolean isFull(){ return (top==maxSize-1); } }

2.佇列

和棧類似,但是先插進入的先出。

package exam;

public class QueueTest {
    public static void main(String[] args) {
        Queue testQueue= new Queue(5);
        testQueue.insert(10);
        testQueue.insert(30);
        testQueue.insert(40);
        testQueue.insert(20);

        testQueue.remove();
        testQueue.remove();
        testQueue.remove();

        testQueue.insert(60);
        testQueue.insert(70);
        testQueue.insert(80);
        testQueue.insert(90);

        while (!testQueue.isEmpty()) {
            long n=testQueue.remove();
            System.out.println(n);
        }
    }
}

class Queue{
    private int maxsiza;
    private long[] queArray;
    private int front; //對頭
    private int rear; //隊尾
    private int nItems; //當前資料項的個數

    public Queue(int s){
    maxsiza=s;
    queArray=new long[maxsiza];
    front = 0;
    rear =-1;
    nItems = 0;
    }
    //插入的前提應該是佇列不滿  ISFull()為true
    public void insert(long j){
        if(rear==maxsiza-1)
            rear =-1;
        queArray[++rear] = j;
        nItems++;
    }
    //remove方法的前提是佇列不為空
    public long remove(){
    long temp =queArray[front++];
    if(front == maxsiza)
    front = 0;
    nItems--;
    return temp;
    }

    public long peekFront(){
        return queArray[front];
    }

    public boolean isEmpty(){
        return (nItems==0);
    }

    public boolean isFull(){
        return (nItems==maxsiza);
    }

    public int size() {
        return nItems;

    }
}