Java教程

算法笔记-数组实现栈,队列

本文主要是介绍算法笔记-数组实现栈,队列,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

  上篇写到了堆排,其实最主要的是使用数组实现堆结构,那么如何使用数组实现栈,队列呢?

  首先我们简单了解栈的数据结构:栈是一种先进后出的结构,如下图可以看到按顺序进入的3->2->5,那么取出的顺序则为5->2->3。

 

 如果使用数组实现,那就需要记住我最新插入的数是哪个,然后倒推取出,代码如下:

public class ArrayStack{
        private int[] arr;
        private int size;

        ArrayStack(int initSize){
            if(initSize <= 0) throw new IllegalArgumentException("The init size is less than 0");

            arr = new int[initSize];
        }

        public void push(int a){
            if(size + 1 >arr.length-1 ){
                throw new IllegalArgumentException("The stack is full");
            }
            arr[size++] = a;
        }

        public int pop(){
            if(size -1 < 0){
                throw new IllegalArgumentException("The stack is empty");
            }
            return arr[size--];
        }
    }

代码很简单,就不多说了。

再看看队列,队列和栈不一样,是需要按顺序先进先出的,就像我们食堂排队打饭一样,先到的先打。那么用数组如何实现呢,看代码实现:

public class ArrayQueue{
        private int[] arr;
        private int size;
        private int write;
        private int read;

        ArrayQueue(int initSize){
            if(initSize <= 0) throw new IllegalArgumentException("The init size is less than 0");

            arr = new int[initSize];
        }

        public void push(int a){
            if(size + 1 >arr.length-1 ){
                throw new IllegalArgumentException("The queue is full");
            }
            write  = write+1 >arr.length-1 ? 0 : write+1;
            arr[write] = a;
            size ++;
        }

        public int pop(){
            if(size <= 0){
                throw new IllegalArgumentException("The queue is empty");
            }
            size--;
            int temp = read;
            read = read -1 < 0 ? arr.length-1 : read-1;
            return arr[temp];
        }
    }

这里分别用read来记录取数据的位置,write记录插入数据的位置,数组实现队列有一个复杂的情况就是你取出先进的数据之后,数组前部分就空出来了,所以我们插入到数组最后时,需要回到开头重新插。

  

 

这篇关于算法笔记-数组实现栈,队列的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!