zoukankan      html  css  js  c++  java
  • 数据结构与算法(二)(栈、队列)

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

    一、栈

      

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

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

      

    //栈的底层我们使用数组来存储数据
            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接口并列

  • 相关阅读:
    android 多线程
    Uva 10881 Piotr’s Ants 蚂蚁
    LA 3708 Graveyard 墓地雕塑 NEERC 2006
    UVa 11300 Spreading the Wealth 分金币
    UVa 11729 Commando War 突击战
    UVa 11292 The Dragon of Loowater 勇者斗恶龙
    HDU 4162 Shape Number
    HDU 1869 六度分离
    HDU 1041 Computer Transformation
    利用可变参数函数清空多个数组
  • 原文地址:https://www.cnblogs.com/StudyZhh/p/10439554.html
Copyright © 2011-2022 走看看