• Java实现顺序栈


    一、分析

      栈是限定仅在表的一端进行插入或删除操作的线性表,对于栈来说,操作端称为栈顶,另一端则称为栈底,栈的修改是按照后进先出的原则进行的,因此又称为后进先出的线性表。

      顺序栈是指利用顺序存储结构实现的栈,即利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素在顺序栈中的位置。

      一个标准的顺序栈具有如下基本操作:

        1、初始化顺序栈

        2、销毁顺序栈

        3、清空顺序栈

        4、检测顺序栈是否为空

        5、返回顺序栈中的元素个数

        6、返回顺序栈的栈顶元素,不修改栈顶指针

        7、向顺序栈顶中压入元素

        8、从顺序栈顶中弹出元素

        9、从栈底到栈顶遍历顺序栈

      在Java中,可以将整个顺序栈定义成一个类,类中定义有一个数组类型的属性表示顺序存储结构来存储元素,再定义一个int类型的属性top来作为指针指示栈顶元素在数组中的位置,顺序栈的基本操作则定义成类的方法。初始化顺序栈即实例化类,销毁顺序栈即销毁实例化出来的对象。

    二、实现

    1、定义类属性和构造函数

     1 class InitStack{
     2     
     3     private int [] stack = null;      //存储元素
     4     
     5     private int top = 0;           //指示栈顶元素在顺序栈中的位置
     6     
     7     public InitStack(int max) {       //初始化自定义大小的顺序栈
     8         this.stack = new int[max];
     9     }
    10 }

    2、清空顺序栈

    1 public void clearStack() {
    2     this.top = 0;          //直接令栈顶指针指向栈底即可
    3 }

    3、检测顺序栈是否为空

    1 public boolean stackEmpty() {
    2     if(this.top == 0) {        //检测栈顶指针是否指向栈底即可
    3         return true;
    4     }else {
    5         return false;
    6     }
    7 }

    4、返回顺序栈中的元素个数

    1 public int stackLength() {
    2     return this.top;        //栈顶指针的值即代表了元素个数
    3 }

    5、返回顺序栈的栈顶元素,不修改栈顶指针

     1 public int [] getTop() {
     2 
     3     if (this.top == 0) {        //如果顺序栈为空,则返回空
     4         return null;
     5     }
     6 
     7     int [] i = new int[1];
     8     i[0] = stack[this.top - 1];    //获取栈顶元素
     9 
    10     return i;
    11 }

    6、向顺序栈顶中压入元素

     1 public boolean push(int value) {
     2 
     3     if(this.top == this.stack.length) {    //判断顺序栈是否已满
     4         return false;
     5     }
     6 
     7     this.stack[this.top] = value;        //压入元素
     8     this.top++;                  //栈顶指针加一
     9     return true;
    10 }

    7、从顺序栈顶中弹出元素

     1 public int [] pop() {
     2 
     3     if (this.top == 0) {      //判断顺序栈是否已空
     4         return null;
     5     }
     6 
     7     int [] i = new int[1];
     8     this.top--;            //栈顶指针减一
     9     i[0] = stack[this.top];    //获取栈顶元素
    10     return i;
    11 }

    8、从栈底到栈顶遍历顺序栈

     1 public String stackTraverse() {            //通过输出顺序栈元素来表示遍历
     2 
     3     String s = "";                    //存储要输出的元素
     4 
     5     for (int i = 0; i < this.top; i++) {      //循环遍历
     6         s += this.stack[i] + "、";
     7     }
     8 
     9     if(s.length() == 0) {               //如果未获取到元素,返回空字符串
    10         return s;
    11     }
    12 
    13     return s.substring(0,s.length() - 1);     //除去最后一个顿号后返回
    14 }

    三、小结

      以上就是顺序栈用Java的实现,由于只定义了整数的数组,因此只能操作整数数据,但顺序栈的基本思想都已实现。

  • 相关阅读:
    flash模拟EEROM
    FATFS_SD卡
    AFIO
    ADC1多通道_DMA_内部温度传感器+内部VREFINT
    QmlBook--Meet Qt 5
    NRF24L01
    MWC飞控V2.3串口通信协议——new Multiwii Serial Protocol
    thread相关http://blog.csdn.net/forwayfarer/article/details/3455130
    comparable与comparator的区别http://blog.csdn.net/mageshuai/article/details/3849143
    ArrayList和LinkedList的区别http://pengcqu.iteye.com/blog/502676
  • 原文地址:https://www.cnblogs.com/ysyasd/p/10776677.html
Copyright © 2020-2023  润新知