美文网首页【打基础】算法集
[DT课堂原名颜群] 数据结构与算法笔记03 -- 栈与队列

[DT课堂原名颜群] 数据结构与算法笔记03 -- 栈与队列

作者: 拜仁的月饼 | 来源:发表于2020-09-08 16:24 被阅读0次

    1. 栈 (stack)

    栈满足“先进后出”,换句话说就是“后进先出”。

    图片来自网络,侵删

    用数组模拟一个栈实现如下:

    package com.stackAndQueue;
    
    public class myStack {
        private int[] elem;
    
        public myStack(){
            int[] elem = new int[0];
        }
    
        /**
         * 向栈顶压入元素。和可变数组中添加元素的方法完全一样
         * @param n 被压入的元素
         * */
        public void push(int n){
            int[] newArr = new int[elem.length + 1];
            newArr[elem.length] = n;
            for (int i = 0; i < elem.length; i++){
                newArr[i] = elem[i];
            }
            elem = newArr;
        }
    
        /**
         * 取出栈顶元素
         * @return 被取出栈顶元素
         * */
        public int pop(){
            if (this.isEmpty()){
                throw new RuntimeException("The stack is empty.");
            }
            int ele = elem[elem.length - 1];
            int[] newArr = new int[elem.length - 1];
            for (int i = 0; i < newArr.length; i++){
                newArr[i] = elem[i];
            }
            elem = newArr;
            return ele;
        }
    
        /**
         * 查看栈顶元素
         * @return 栈顶元素
         * */
        public int peek(){
            if(this.isEmpty()){
                throw new RuntimeException("The stack is empty!");
            }
            return elem[elem.length - 1];
        }
    
        /**
         * 检查列表是否为空?
         * */
        public boolean isEmpty(){
            return (elem.length == 0);
        }
    }
    

    2. 队列 (Queue)

    队列则是“先进先出”。

    图片来自网络,侵删

    用数组模拟一个队列如下:

    package com.stackAndQueue;
    
    public class MyQueue {
        private int[] queue;
    
        public MyQueue(){
            int[] queue = new int[0];
        }
    
        /**
         * 入队
         * @param n 入队的元素
         * */
        public void offer(int n){
            int[] tmp = new int[queue.length + 1];
            tmp[queue.length] = n;
            for(int i = 0; i < queue.length; ++i){
                tmp[i] = queue[i];
            }
            queue = tmp;
        }
    
        /**
         * 出队
         * @return 要出队的元素
         * */
        public int poll(){
            if (this.isEmpty())
                throw new RuntimeException("The queue is empty!");
            int res = queue[0];
            int[] tmp = new int[queue.length - 1];
            for (int i = 0; i < tmp.length; ++i){
                tmp[i] = queue[i + 1];
            }
            queue = tmp;
            return res;
        }
    
        /**
         * 判断队列是否为空
         * @return true or false
         * */
        public boolean isEmpty(){
            return queue.length == 0;
        }
    }
    

    相关文章

      网友评论

        本文标题:[DT课堂原名颜群] 数据结构与算法笔记03 -- 栈与队列

        本文链接:https://www.haomeiwen.com/subject/fxndektx.html