數據結構與算法學習2-----數組實現隊列

首先說一下隊列的特性,和棧正好相反
是先進先出,也就是說誰先進來先出去的就是誰
這次要實現的是一個簡單的隊列,有add和 delete 以及打印數據的方法
其中add()方法採用尾插法,其中會考慮到空間重複利用的問題

package array;


//用數組模擬實現隊列  和棧相反  棧是頭插法、尾刪除  隊列是尾插法、頭刪除
public class Queue {

    private int[] value = new int[20];

    int head = -1;  //頭指針 一直跟着頭部元素
    int end = -1;   //尾指針 一直跟着尾部元素
    int max = 20;   //最大元素數量

    //添加元素  尾插法 當end到底 需要將底部值回推到頂部 重置head 如果此時還是滿的 那就滿了
    public void add(int param) {
        if (end >= 19) {
            head = -1;
            int [] temp = new int[max];
            int index = 0;
            for (int i : value) {
                if (i != 0) {
                    temp[index] = i;
                    index++;
                }
            }
            end = index - 1;
            value = temp;
            if(index >= 20) {
                System.out.println("滿了");
            }
        }else {
            value[end + 1] = param;
            end++;
        }
    }
    //刪除元素
    public void delete() {
        head++;
        value[head] = 0;
    }
    //打印
    public void print() {
        for (int i : value) {
            System.out.print(i + ",");
        }
    }

    static class Demo {
        public static void main(String[] args) {
            Queue q = new Queue();
            for (int i = 0; i < 40 ;i++) {
                q.add(i);
            }
            for (int i = 0; i < 5 ;i++) {
                q.delete();
            }
            for (int i = 41; i < 50 ;i++) {
                q.add(i);
            }
            q.print();
        }
    }

}

我這裏實現是有一些問題得,頭尾指針可能可以加一 更好理解一些,還有最大元素數量,這裏可以通過一個構造方法去動態控制,不過我只是爲了理解思想,這些不重要了。
歡迎討論~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章