• 7、栈-数组模拟一个栈


    来源:https://www.bilibili.com/video/BV1B4411H76f?p=28

    一、栈

    1、是一个先入后出的有序列表;

    2、插入删除数据时,栈顶的指针会发生变化,栈底是固定的;

    3、先插入的数据放在栈底,后插入的数据更接近栈顶,删除是从栈顶开始删除,最后才到栈底。

    二、数组模拟栈的思路

    1、定义一个指向栈顶的指针top,初始化为-1,定义代表栈的数组stack;

    2、当向栈中压入数据时,【top++】,【stack[top]=data】;

    3、当从栈中弹出数据时,弹出来的数据【value=stack[top]】,同时【top--】。

    三、实现

     1、创建一个数组模拟栈的类ArrayStack,其中包含的属性有:栈的大小maxSize,指向栈顶的指针top,初始值为-1,用来存放数据的数组arr。类中目前包含一个入栈的方法,由于入栈时必须保证栈是不满的,因此额外增加了一个判断栈满的方法;为了检测方法的有效性,加入了一个展示方法,通过遍历展示栈中的内容;想要得到栈中的内容必须保证栈是非空的,所以又添加了一个判断栈为空的方法。

     1 public class ArrayStack {
     2     private int maxSize;//栈的大小
     3     private int top = -1;//栈顶指针
     4     private int[] arr;//模拟栈的数组
     5 
     6     public ArrayStack(int maxSize) {
     7         this.maxSize = maxSize;
     8         arr = new int[maxSize];
     9     }
    10 
    11     //判断当前栈是否已经满了
    12     public boolean isFull(){
    13         return top == maxSize - 1;
    14     }
    15     //判断栈是否为空
    16     public boolean isEmpty(){
    17         return top == -1;
    18     }
    19 
    20     //入栈
    21     public void push(int val){
    22         if(isFull()){
    23             System.out.println("栈满,无法添加数据");
    24             return;
    25         }
    26         top++;
    27         arr[top] = val;
    28     }
    29     //出栈
    30 
    31 
    32     //展示
    33     public void show(){
    34         if(isEmpty()){
    35             System.out.println("栈空,无法展示");
    36             return;
    37         }
    38         for (int i = 0; i <= top; i++) {
    39             System.out.printf("arr[%d]=%d",i,arr[i]);
    40             System.out.println();
    41         }
    42     }
    43 }

    测试

     1     public static void main(String[] args) {
     2         ArrayStack arrayStack = new ArrayStack(5);
     3 
     4         arrayStack.show();
     5         System.out.println();
     6 
     7         arrayStack.push(1);
     8         arrayStack.show();
     9         System.out.println();
    10 
    11         arrayStack.push(2);
    12         arrayStack.show();
    13         System.out.println();
    14 
    15         arrayStack.push(3);
    16         arrayStack.show();
    17         System.out.println();
    18 
    19         arrayStack.push(4);
    20         arrayStack.show();
    21         System.out.println();
    22 
    23         arrayStack.push(5);
    24         arrayStack.show();
    25         System.out.println();
    26 
    27         arrayStack.push(6);
    28         arrayStack.show();
    29         System.out.println();
    30     }

    结果

    栈空,无法展示
    
    arr[0]=1
    
    arr[0]=1
    arr[1]=2
    
    arr[0]=1
    arr[1]=2
    arr[2]=3
    
    arr[0]=1
    arr[1]=2
    arr[2]=3
    arr[3]=4
    
    arr[0]=1
    arr[1]=2
    arr[2]=3
    arr[3]=4
    arr[4]=5
    
    栈满,无法添加数据
    arr[0]=1
    arr[1]=2
    arr[2]=3
    arr[3]=4
    arr[4]=5

    2、在类中补充出栈的操作

     1     //出栈
     2     public int pop(){
     3         if(isEmpty()){
     4             System.out.println("栈空,无法操作");
     5             return -1;
     6         }
     7         int val = arr[top];
     8         top--;
     9         return val;
    10     }

    测试

     1         int pop = arrayStack.pop();
     2         System.out.println("出栈的数据为:"+pop);
     3 
     4         pop = arrayStack.pop();
     5         System.out.println("出栈的数据为:"+pop);
     6 
     7         pop = arrayStack.pop();
     8         System.out.println("出栈的数据为:"+pop);
     9 
    10         pop = arrayStack.pop();
    11         System.out.println("出栈的数据为:"+pop);
    12 
    13         pop = arrayStack.pop();
    14         System.out.println("出栈的数据为:"+pop);
    15 
    16         pop = arrayStack.pop();
    17         System.out.println("出栈的数据为:"+pop);

    结果

    出栈的数据为:5
    出栈的数据为:4
    出栈的数据为:3
    出栈的数据为:2
    出栈的数据为:1
    栈空,无法操作
    出栈的数据为:-1
  • 相关阅读:
    修改FileUpload样式
    ASP.NET 中JSON 的序列化和反序列化
    C# 2.0中泛型编程初级入门
    50条经典爱情观
    (转贴)追MM与Java的23种设计模式
    猴子和香蕉的故事
    35岁前成功的12条黄金法则
    几个小故事
    java与C++的虚函数比较
    flask 源码解析:上下文(一) SUNNEVER
  • 原文地址:https://www.cnblogs.com/zhao-xin/p/13143316.html
Copyright © 2020-2023  润新知