如何用数组实现队列和栈

发布网友 发布时间:2022-04-20 04:51

我来回答

1个回答

热心网友 时间:2022-04-22 20:01

1.实现栈结构:栈结构是先进后出的,只需要一个数组和一个记录位置的变量size,当进来一个元素,size就++,出去一个元素size就–。
2.实现队列结构:相对栈结构要难搞一些,队列的先进先出的,需要一个数组和三个变量,size记录已经进来了多少个元素,in记录刚进来的元素应该放在哪个位置,out表示用户要求弹出的元素所在的位置。size的作用不止于此,它还是in与out 的操作的关键信息,使得in与out解耦,避免的很多的麻烦,好像书本讲的是没有size这个变量的。当in或者out达到底部的时候就跳回0处。

/**
     * 固定数组实现一个队列
     * 队列先进先出,方法有push,pull,peek
     */
    public class CArrayToQueue {
       public static class MyQueue{
           private int out;//新进来的数 放这
           private int in;//用户要求弹出的数
           private int size;//已经进队列的个数
           
            private int arr[];
            public MyQueue(int iniSize){
                arr = new int[iniSize];
             size = 0;
              in = 0;
                out = 0;
           }
           public void push(int num){
                if(size==arr.length){
                 throw new RuntimeException(“the queue is full!”);
              }
               size++;//大小扩展一个
               arr[in] = num;//赋值
                in = in==arr.length-1 ? 0 : in+1;//如果已经到达数组末尾就重新等于0
            }
           public int pull(){
              if(size==0){
                 throw new RuntimeException(“the queue is empty!”);
             }
               size–;
             int t = out;//记录
            out = out==arr.length-1 ? 0 : out+1;//如果已经到达数组末尾就重新等于0
             return arr[t];
            }
           public int peek(){
              if(size==0){
                 throw new RuntimeException(“the queue is empty!”);
             }
               return arr[out];
          }
       }
       public static void main(String[] args) {
          int iniSize = 3;
         MyQueue myQueue = new MyQueue(iniSize);
           myQueue.push(;
          myQueue.push(;
          myQueue.push(;
          System.out.println(myQueue.pull());
         System.out.println(myQueue.pull());
         System.out.println(myQueue.pull());
         myQueue.push(;
          myQueue.push(;
          System.out.println(myQueue.pull());
         System.out.println(myQueue.peek());
     }
    }


•    1


 /**
     * 固定数组实现栈结构
     * 实现方法push,pop,peek
     * 当越界的时候抛出一个运行时异常
     * 简单面试题
     */
    public class CArrayToStack {
       public static class MyStack{
           private int size;//指针位置,也表示栈已经压了多少
            private int[]arr;
           MyStack(int iniSize){//构造方法初始化数组
                arr = new int[iniSize];
             size = 0;
          }
           public void push(int num){
                if(size == arr.length){
                   throw new RuntimeException("栈下标越界!");
              }
               arr[size++] = num;
          }
           public int pop(){
               if(size == 0){
                   throw new RuntimeException("栈中已经没有元素可以弹出!");
               }
               return arr[--size];
           }
           public int peek(){
              if(size == 0){
                   throw new RuntimeException("栈中已经没有元素可以弹出!");
               }
               return arr[size];
         }
       }
       public static void main(String[] args) {
          int len = 
            MyStack myStack = new MyStack(len);
           for (int i = 0; i < len; i++) {
             myStack.push(i);
            }
           for (int i = 0; i < len; i++) {
             System.out.println(myStack.pop());
          }
       }
    }

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com