zoukankan      html  css  js  c++  java
  • java实现栈

     
    1.什么是栈
    栈(stack)是仅在表尾部插入和删除的操作的线性表
    1.允许插入和删除的一段称之为栈顶(top),另一端称之为栈尾(bottom)
    2.不包含任何数据元素的栈称之为空栈
    特点:先进后出,后进先出
    注意:1.栈也称之为lifo结构
    2.栈的插入操作称之为进栈,也称之为压栈,入栈
    3.栈的删除操作。称之为出栈,也称之为弹栈
    3.实现细节和注意要点
    栈最重要的是它的特点:先进后出,在生活中有很多场景类似。在一个栈的结构里需要定义栈的大小Maxsize,定义一个游标top,初始化为-1,用来指向栈尾,当入栈一个数据,top+1,弹栈一个数据top-1,第一次入栈top就变为0,当top变为-1,说明栈空了,当top变为Maxsize-1,说明栈满了。
    stack类:
     1 package Stack;
     2 /**
     3 * @类名  stack.java
     4 * @作者       修仙小华
     5 * @版本  V1.0
     6 * @日期  2019年7月23日-下午3:59:27
     7 * @描述  
     8 *
     9 */
    10 public class stack {
    11     private int maxSize;//栈的大小
    12     private int top;//栈顶下标,top是移动的
    13     String[] arr;
    14     char[] arrC;
    15     int[] arrI;
    16     
    17     public stack(){
    18     }
    19 
    20     /**
    21      * 设置传入参数为int的构造方法
    22      */
    23     public stack (int size) {
    24         this.maxSize=size;
    25         top=-1;//初始化为-1
    26         arr=new String[maxSize];
    27         arrC=new char[maxSize];
    28         arrI=new int[maxSize];
    29     }
    30     
    31     /**
    32      *设置传入参数为String的构造方法
    33      */
    34     public stack (String input) {
    35         this.maxSize=input.length();
    36         top=-1;//初始化为-1
    37         arr=new String[maxSize];
    38     }
    39     
    40     /**
    41      * 入栈,整数  字符型  字符串型数据入栈方法重载
    42      */
    43     public void push(String data) {
    44         arr[++top]=data;
    45     }
    46     public void push(char data) {
    47         arrC[++top]=data;
    48     }
    49     public void push(int data) {
    50         arrI[++top]=data;
    51     }
    52     /**
    53      * 入栈,整数  字符型  字符串型数据出栈方法
    54      */
    55     public String pop() {
    56         return arr[top--];
    57     }
    58     public char popC() {
    59         return arrC[top--];
    60     }
    61     public int popI() {
    62         return arrI[top--];
    63     }
    64     /**
    65      * 获取栈顶元素
    66      */
    67     public String peek() {
    68         return arr[top];
    69     }
    70     public char peekC() {
    71         return arrC[top];
    72     }
    73     public int peekI() {
    74         return arrI[top];
    75     }
    76     /**
    77      * 判断栈是否满了
    78      */
    79     public boolean isFull() {
    80         return maxSize-1==top;
    81     }
    82     /**
    83      * 判断栈是否为空
    84      */
    85     public boolean isEmpty() {
    86         return top==-1;
    87     }
    88     /**
    89      * 利用栈将将字符串反序输出
    90      */
    91     
    92 }

    使用栈实现字符串的逐个字符输出:

    public class Reseve {
        String input;
        
        public Reseve(String input) {
            this.input=input;
        }
        public String doReseve() {
            stack sta=new stack(input.length());
            for (int i = 0; i < sta.arr.length; i++) {
                sta.push(input.charAt(i));
            }
            String output="";
            while(sta.isEmpty()!=true) {
                output=output+sta.popC();
            }
            return output;
        }
    }

    测试类:

     1 public class stactTest {
     2 
     3     public static void main(String[] args) {
     4         stack sta=new stack(4);
     5         Reseve re=new Reseve("ABCDE");
     6         sta.push("张三");
     7         sta.push("李四");
     8         sta.push("王二");
     9         sta.push("李四");
    10         System.out.println(sta.isEmpty());
    11         System.out.println(sta.peek());
    12         sta.peek();
    13         sta.pop();
    14         System.out.println(re.doReseve());
    15     }
    16 
    17 }
     
  • 相关阅读:
    苹果的HomeKit协议
    广州出游计划
    Qt学习博客推荐
    Log4Qt使用(三)在DailyRollingFileAppender类中增加属性mMaxBackupIndex
    QT中关于窗口全屏显示与退出全屏的实现
    键盘事件-----按下回车键则触发事件
    窗体显示/编码设置/开机启动/文件选择与复制/对话框等
    设置系统日期时间
    输入内容, 列出可选的项: QComboBox
    如何根据安装时缺失的文件查找对应的包
  • 原文地址:https://www.cnblogs.com/had1314/p/11267966.html
Copyright © 2011-2022 走看看