• 数据结构与算法(二)(栈、队列)


    这篇笔记主要写栈和队列,因为他们的特点是相反的

    一、栈

      

      特点:先进后出,类似于子弹入弹夹,先进去的子弹最后才发射

      这里也使用数组来模拟一下,有四个方法,压栈,取栈,查看栈顶,是否为空

      

    //栈的底层我们使用数组来存储数据
            int[] elements;
            
            public StackTest1() {
                elements = new int[0];
            }
            
            //压栈(压入元素)
            public void push(int element){
                // 创建一个新的数组
                int[] newArr = new int[elements.length + 1];
                // 把原数据复制到新数组中
                for (int i = 0; i < elements.length; i++) {
                    newArr[i] = elements[i];
                }
                // 把添加的元素放入新数组中
                newArr[elements.length] = element;
                // 使用新数组替换久数组
                elements = newArr;
            }
            
            //取出栈顶元素
            public int pop(){
                //栈中没有元素
                if(elements.length==0){
                    throw new RuntimeException("stack is empty");
                }
                //取出数组的最后一个元素
                int element = elements[elements.length-1];
                //创建一个新的数组
                int[] newArr = new int[elements.length-1];
                //把原数组中除了最后一个元素的其他元素都放在新数组中
                for(int i = 0;i<elements.length-1 ;i++){
                    newArr[i] = elements[i];
                }
                //替换数组
                elements = newArr;
                //返回栈顶元素
                return element;
            }
            
            //查看栈顶元素
            public int peek(){
                return elements[elements.length-1];
            }
        
                
            //判断栈是否为空
            public boolean isEmpty(){
                return elements.length==0;
            }

    测试类

      

    //创建一个栈
            StackTest1 ms = new StackTest1();
            //压入数据
            ms.push(9);
            ms.push(8);
            ms.push(7);
            //出栈
            System.out.println(ms.pop());
            //查看栈顶元素
            System.out.println(ms.peek());
            //查看栈是否为空
            System.out.println(ms.isEmpty());

    结果:

      

    在java中集合Vector的子类就是Stack

    二、队列

    特点:先进先出,就跟我们日常生活的排队一样

        代码演示:也用数组演示,这里写了三个方法,入队,出队,是否为空

        

    int[] elements;
        
        public QueueTest(){
            elements = new int[0];
        }
        
        //入队
        public void add(int element){
            // 创建一个新的数组
            int[] newArr = new int[elements.length + 1];
            // 把原数据复制到新数组中
            for (int i = 0; i < elements.length; i++) {
                newArr[i] = elements[i];
            }
            // 把添加的元素放入新数组中
            newArr[elements.length] = element;
            // 使用新数组替换久数组
            elements = newArr;
        }
        
        //出队
        public int poll(){
            //把数组中第0个元素取出来
            int element = elements[0];
            //创建一个新的数组
            int[] newArr = new int[elements.length-1];
            //
            for(int i = 0;i<newArr.length;i++){
                newArr[i] = elements[i+1];
            }
            //替换数组
            elements = newArr;
            return element;
            
        }
        
        //判断队列是否为空
        public boolean isEmpty(){
            return elements.length==0;
        }

    测试类

      

         //创建一个队列
            QueueTest qt = new QueueTest();
            //入队
            qt.add(9);
            qt.add(8);
            qt.add(7);
            //出队
            System.out.println(qt.poll());
            //是否为空
            System.out.println(qt.isEmpty());
            System.out.println(qt.poll());
            System.out.println(qt.poll());
            System.out.println(qt.isEmpty());

    结果

        

    在java中,也有队列就是Queue接口,和List、Set接口并列

  • 相关阅读:
    浏览器输入一个url到整个页面显示出来经历了哪些过程?
    ajax
    为什么JS是单线程?JS中的Event Loop(事件循环)?JS如何实现异步?setimeout?
    jQuery中ready方法的实现
    this+call、apply、bind的区别与使用
    内存泄漏、垃圾回收机制、哪些情况会导致内存泄漏
    浏览器同源策略和跨域方法
    node.js
    JS原型、原型链、构造函数、实例与继承
    JS常用操作节点的方法
  • 原文地址:https://www.cnblogs.com/StudyZhh/p/10439554.html
Copyright © 2020-2023  润新知