手机版 欢迎访问it开发者社区(www.mfbz.cn)网站

当前位置: > 开发

栈和队列的简单使用

时间:2021/4/19 2:33:02|来源:|点击: 次

特点

​ 栈结构FIFL,压栈,先进后出

package com.qr.tztz.stacks;

/**
* 栈结构:先进后出
* 栈结构底层是一个数组
*/
public class StackTest {

   public static void main(String[] args) {
       MyStack myStack = new MyStack(5);
       myStack.add(32);
       myStack.add(322);
       myStack.add(3222);
       myStack.add(32222);
       myStack.add(3222222);
       long show = myStack.show();
       //只展示栈顶的一个数据
       System.out.println(show);
       System.out.println(myStack.isEmpty());
       System.out.println(myStack.isFul());

       //删除数据.方法操作的都是同一个变量
       long remove = myStack.remove(32);
       System.out.println(remove);
       System.out.println(myStack.isFul());
   }
}

class MyStack{
   //底层数组
   private long[] arr;
   //栈顶端,最上面的元素
   private int top;

   //初始化栈的大小
   public MyStack(){
       arr = new long[30];
       //数组初始化的,栈顶没有数据
       top = -1;
   }

   public MyStack(int maxSize){
       arr = new long[maxSize];
       //数组初始化的,栈顶没有数据
       top = -1;
   }

   /*
       添加数据
       传入一个数据
    */
   public void add(int data){
       arr[++top] = data;
   }

   /*
       移除数据
       返回被移除的数据
    */
   public long remove(int data){
       return arr[top--];
   }

   /*
       查看栈顶数据
    */
   public long show(){
       return arr[top];
   }

   /*
       判断是否为空
    */
   public boolean isEmpty(){
       return top == -1;
   }

   /*
       判断数组是否满了
    */
   public boolean isFul(){
       return top == arr.length-1;
   }

}

队列

队列的特点

​ FIFO,先进先出的原则

package com.qr.heima.tztz.testtu.queue;

/**
* 队列:
*      先进先出,后进后出FIFO
*      底层使用数组
*/
public class QueueTest {
   public static void main(String[] args) {
       MyQueue myQueue = new MyQueue(5);
       myQueue.insert(12);
       myQueue.insert(123);
       myQueue.insert(1234);
       myQueue.insert(12345);
       myQueue.insert(123456);
       System.out.println(myQueue.isEmpty());
       System.out.println(myQueue.isFull());
       //查看队头的数据
       System.out.println(myQueue.show());

       //删除,先进先出,后进后出
       while(!myQueue.isEmpty()){
           System.out.print(myQueue.remove()+" ");
       }

       //myQueue.insert(222222);
   }
}

class MyQueue{
   //底层数组
   private long[] arr;
   //有效数据的大小
   private int elements;
   //队头
   private int begin;
   //队尾
   private int end;

   public MyQueue(){
       arr = new long[10];
       elements = 0;
       begin = 0;
       end = -1;
   }

   public MyQueue(int maxSize){
       arr = new long[maxSize];
       elements = 0;
       begin = 0;
       end = -1;
   }

   /*
       插入数据
       插入到队列的尾部
    */
   public void insert(long data){
       arr[++end] = data;
       elements++;
   }

   /*
       删除数据
       删除队头
    */
   public long remove(){
       elements--;
       return arr[begin++];
   }

   /*
       查看数据
       查看队头的数据
    */
   public long show(){
       return arr[begin];
   }

   /*
       判断是否为空
    */
   public boolean isEmpty(){
       return elements == 0;
   }

   /*
       判断是否满了
    */
   public boolean isFull(){
       return elements == arr.length;
   }

}

队列的循环使用

package com.qr.heima.tztz.testtu.queue;

/**
* 队列:
*      循环队列的使用
*      如果队列中的元素删除完后,再次添加存在不合理性
*      需要将队列作为循环使用
*/
public class QueueTest2 {
   public static void main(String[] args) {
       MyQueue2 myQueue2 = new MyQueue2(5);
       myQueue2.insert(12);
       myQueue2.insert(123);
       myQueue2.insert(1234);
       myQueue2.insert(12345);
       myQueue2.insert(123456);
       System.out.println(myQueue2.isEmpty());
       System.out.println(myQueue2.isFull());
       //查看队头的数据
       System.out.println(myQueue2.show());

       //删除,先进先出,后进后出
       while(!myQueue2.isEmpty()){
           System.out.print(myQueue2.remove()+" ");
       }

       myQueue2.insert(222222);

   }
}

class MyQueue2{
   //底层数组
   private long[] arr;
   //有效数据的大小
   private int elements;
   //队头
   private int begin;
   //队尾
   private int end;

   public MyQueue2(){
       arr = new long[10];
       elements = 0;
       begin = 0;
       end = -1;
   }

   public MyQueue2(int maxSize){
       arr = new long[maxSize];
       elements = 0;
       begin = 0;
       end = -1;
   }

   /*
       插入数据
       插入到队列的尾部
    */
   public void insert(long data){
       if (end == arr.length-1){
           end = -1;
       }
       arr[++end] = data;
       elements++;
   }

   /*
       删除数据
       删除队头
    */
   public long remove(){
       long data = arr[begin++];
       if (begin == arr.length){
           begin = 0;
       }
       elements--;
       return data;
   }

   /*
       查看数据
       查看队头的数据
    */
   public long show(){
       return arr[begin];
   }

   /*
       判断是否为空
    */
   public boolean isEmpty(){
       return elements == 0;
   }

   /*
       判断是否满了
    */
   public boolean isFull(){
       return elements == arr.length;
   }

}

Copyright © 2002-2019 某某自媒体运营 版权所有