91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么分析Java數據結構中的棧與隊列

發布時間:2022-01-25 09:25:59 來源:億速云 閱讀:133 作者:柒染 欄目:開發技術

今天就跟大家聊聊有關怎么分析Java數據結構中的棧與隊列,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

    怎么分析Java數據結構中的棧與隊列

    一,棧

    1,概念

    在我們軟件應用 ,棧這種后進先出數據結構的應用是非常普遍的。比如你用瀏 覽器上網時不管什么瀏覽器都有 個"后退"鍵,你點擊后可以接訪問順序的逆序加載瀏覽過的網頁。

    怎么分析Java數據結構中的棧與隊列

    很多類似的軟件,比如 Word Photoshop 等文檔或圖像編 軟件中 都有撤銷 )的操作,也是用棧這種方式來實現的,當然不同的軟件具體實現會有很大差異,不過原理其實都是一樣的。

    棧( stack )是限定僅在表尾進行插入和刪除的線性表

    棧:一種特殊的線性表,其只允許在固定的一端進行插入和刪除元素操作。進行數據插入和刪除操作的一端稱為棧 頂,另一端稱為棧底。棧中的數據元素遵守后進先出LIFO(Last In First Out)的原則。

    2,棧的操作

    壓棧:棧的插入操作叫做進棧/壓棧/入棧,入數據在棧頂。

    出棧:棧的刪除操作叫做出棧。出數據在棧頂。

    怎么分析Java數據結構中的棧與隊列

    3,棧的實現

    ①入棧

    怎么分析Java數據結構中的棧與隊列

     public static void main(String[] args) {
            Stack<Integer> stack = new Stack<>();
            stack.push(1);
            stack.push(2);
            stack.push(3);
            stack.push(4);
            int ret = stack.push(4);
            System.out.println(ret);
        }

    怎么分析Java數據結構中的棧與隊列

    ②出棧
      public static void main(String[] args) {
            Stack<Integer> stack = new Stack<>();
            stack.push(1);
            stack.push(2);
            stack.push(3);
            int ret1 = stack.pop();
            int ret2 = stack.pop();
            System.out.println(ret1);
            System.out.println(ret2);
        }

    怎么分析Java數據結構中的棧與隊列

    ③獲取棧頂元素
     public static void main(String[] args) {
            Stack<Integer> stack = new Stack<>();
            stack.push(1);
            stack.push(2);
            stack.push(3);
            int ret1 = stack.pop();
            int ret2 = stack.pop();
            int ret3 = stack.peek();
            System.out.println(ret1);
            System.out.println(ret2);
            System.out.println(ret3);
        }

    怎么分析Java數據結構中的棧與隊列

    ④判斷棧是否為空

    怎么分析Java數據結構中的棧與隊列

      public static void main(String[] args) {
            Stack<Integer> stack = new Stack<>();
            stack.push(1);
            stack.push(2);
            stack.push(3);
            int ret1 = stack.pop();
            int ret2 = stack.pop();
            int ret3 = stack.peek();
            System.out.println(ret1);
            System.out.println(ret2);
            System.out.println(ret3);
            stack.pop();
            boolean flag = stack.empty();
            System.out.println(flag);
        }

    怎么分析Java數據結構中的棧與隊列

     4,實現mystack

    public class MyStack<T> {
        private T[] elem;//數組
        private int top;//當前可以存放數據元素的下標-》棧頂指針
     
        public MyStack() {
            this.elem = (T[])new Object[10];
        }
     
        /**
         * 入棧操作
         * @param item 入棧的元素
         */
        public void push(T item) {
            //1、判斷當前棧是否是滿的
            if(isFull()){
                this.elem = Arrays.copyOf(this.elem,2*this.elem.length);
            }
            //2、elem[top] = item  top++;
            this.elem[this.top++] = item;
        }
     
        public boolean isFull(){
            return this.elem.length == this.top;
        }
     
        /**
         * 出棧
         * @return 出棧的元素
         */
        public T pop() {
            if(empty()) {
                throw new UnsupportedOperationException("棧為空!");
            }
            T ret = this.elem[this.top-1];
            this.top--;//真正的改變了top的值
            return ret;
        }
     
        /**
         * 得到棧頂元素,但是不刪除
         * @return
         */
        public T peek() {
            if(empty()) {
                throw new UnsupportedOperationException("棧為空!");
            }
            //this.top--;//真正的改變了top的值
            return this.elem[this.top-1];
        }
        public boolean empty(){
            return this.top == 0;
        }
    }
    public static void main(String[] args) {
            MyStack<Integer> myStack = new MyStack<>();
            myStack.push(1);
            myStack.push(2);
            myStack.push(3);
            System.out.println(myStack.peek());
            System.out.println(myStack.pop());
            System.out.println(myStack.pop());
            System.out.println(myStack.pop());
            System.out.println(myStack.empty());
            System.out.println("============================");
            MyStack<String> myStack2 = new MyStack<>();
            myStack2.push("hello");
            myStack2.push("word");
            myStack2.push("thank");
            System.out.println(myStack2.peek());
            System.out.println(myStack2.pop());
            System.out.println(myStack2.pop());
            System.out.println(myStack2.pop());
            System.out.println(myStack2.empty());
     
        }

    怎么分析Java數據結構中的棧與隊列

    二,隊列

    1,概念

    怎么分析Java數據結構中的棧與隊列

    像移動、聯通、電信等客服電話,客服人員與客戶相比總是少數,在所有的客服人員都占線的情況下,客戶會被要求等待,直到有某個客服人員空下來,才能讓最先等待的客戶接通電話。這里也是將所有當前撥打客服電話的客戶進行了排隊處理。

    操作系統和客服系統中,都是應用了種數據結構來實現剛才提到的先進先出的排隊功能,這就是隊列。

    隊列(queue) 是只允許在一端進行插入操作,而在另一端進行刪除操作的線性表

    隊列:只允許在一端進行插入數據操作,在另一端進行刪除數據操作的特殊線性表,隊列具有先進先出FIFO(First In First Out) 入隊列:進行插入操作的一端稱為隊尾(Tail/Rear) 出隊列:進行刪除操作的一端稱為隊頭 (Head/Front)

    怎么分析Java數據結構中的棧與隊列

    2,隊列的實現

    ①入隊
     public static void main(String[] args) {
            Deque<Integer> queue = new LinkedList<>();
            queue.offer(1);
            queue.offer(2);
            queue.offer(3);
            queue.offer(4);
            
        }
    ②出隊
      public static void main(String[] args) {
            Deque<Integer> queue = new LinkedList<>();
            queue.offer(1);
            queue.offer(2);
            queue.offer(3);
            queue.offer(4);
            System.out.println(queue.poll());
            System.out.println(queue.poll());
     
        }

    怎么分析Java數據結構中的棧與隊列

    ③獲取隊首元素
    public static void main(String[] args) {
            Deque<Integer> queue = new LinkedList<>();
            queue.offer(1);
            queue.offer(2);
            queue.offer(3);
            queue.offer(4);
            System.out.println(queue.poll());
            System.out.println(queue.poll());
            System.out.println("-----------------");
            System.out.println(queue.peek());
        }

    怎么分析Java數據結構中的棧與隊列

    3,實現myqueue

    class Node {
        private int val;
        private Node next;
        public int getVal() {
            return val;
        }
        public void setVal(int val) {
            this.val = val;
        }
        public Node getNext() {
            return next;
        }
        public void setNext(Node next) {
            this.next = next;
        }
        public Node(int val) {
            this.val = val;
        }
    }
    public class MyQueue {
        private Node first;
        private Node last;
        //入隊
        public void offer(int val) {
            //尾插法  需要判斷是不是第一次插入
            Node node = new Node(val);
            if(this.first == null) {
                this.first = node;
                this.last = node;
            }else {
                this.last.setNext(node);//last.next = node;
                this.last = node;
            }
        }
        //出隊
        public int poll() {
            //1判斷是否為空的
            if(isEmpty()) {
                throw new UnsupportedOperationException("隊列為空!");
            }
            //this.first = this.first.next;
            int ret = this.first.getVal();
            this.first = this.first.getNext();
            return ret;
        }
        //得到隊頭元素但是不刪除
        public int peek() {
            //不要移動first
            if(isEmpty()) {
                throw new UnsupportedOperationException("隊列為空!");
            }
            return this.first.getVal();
        }
        //隊列是否為空
        public boolean isEmpty() {
            return this.first == null;
        }
    }
     public static void main(String[] args) {
            MyQueue myQueue = new MyQueue();
            myQueue.offer(1);
            myQueue.offer(2);
            myQueue.offer(3);
            System.out.println(myQueue.peek());
            System.out.println(myQueue.poll());
            System.out.println(myQueue.poll());
            System.out.println(myQueue.poll());
            System.out.println(myQueue.isEmpty());
           
        }

    怎么分析Java數據結構中的棧與隊列

    看完上述內容,你們對怎么分析Java數據結構中的棧與隊列有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    绩溪县| 临高县| 灌阳县| 波密县| 垣曲县| 锡林浩特市| 苍梧县| 秀山| 祁东县| 全州县| 海口市| 锡林浩特市| 鄂托克旗| 东海县| 罗定市| 江口县| 印江| 景泰县| 博兴县| 蕉岭县| 南投市| 库伦旗| 呼伦贝尔市| 铜梁县| 南漳县| 瑞昌市| 凤城市| 乌鲁木齐县| 澎湖县| 永州市| 泗阳县| 固原市| 江油市| 湘西| 莆田市| 马公市| 大余县| 法库县| 紫阳县| 东山县| 乐业县|