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

    1.什么是链栈
    1.链栈的结构和链表相似
    2.插入与删除等操作都是在链表的头部
    3.即:链栈是一个以top为头结点、从栈顶指向栈底的单链表
    2.链栈的优缺点
    解决了栈空间大小固定的弊端。
    3.实现思路和注意要点
    因为链栈本质上还是一个单链表,是由一个个结点组成的链表,所以还是采用内部类的方式实现。创建一个Node类,定义了Node next用来存放上一个入栈的结点的首地址和String data用来存放当前入栈的数据;在外部Stack类定义对Node的操作方法,入栈,弹栈等。外部类不能实例化内部类。
    1.在Stack类里面要定义一个count,用来计数栈中结点的个数,定义一个 Node top,是对象的引用,用于指向栈顶结点。
    2.入栈操作,调用入栈方法,就需要申请一个结点,调用Node的有参构造方法,将数据data传入进去,然后将top存储的头结点地址赋值给node.next,这样新增加的节点就指向了它前一个入栈的结点,最后再将新入栈的结点的首地址赋值给top,这样top就更新了,指向了新的头结点。
    3.弹栈操作,需要将top指向弹栈结点的下一个结点,这里需要注意的是,一定要定义一个中间变量用来暂存当前top的值,返回弹栈数据冲突。
    Stack类:
     1 package chainStack;
     2 /**
     3 * @类名  stack.java
     4 * @作者       修仙小华
     5 * @版本  V1.0
     6 * @日期  2019年7月24日-上午9:13:10
     7 * @描述  
     8 *
     9 */
    10 public class Stack {
    11     int count=0;
    12     Node top;
    13 
    14     public void push(String data) {
    15         Node node=new Node(data);
    16         node.next=top;
    17         count++;
    18         top=node;
    19     }
    20     public String peek() {
    21         return top.data;
    22     }
    23     public String pop() {
    24         Node temp=top;
    25         if (top.next==null) {
    26             top=null;
    27         }else {
    28             top=top.next;
    29         }
    30         this.count--;
    31         return temp.data;
    32     }
    33     public int size() {
    34         return this.count;
    35     }
    36     public boolean isEmpaty() {
    37         if (top==null) {
    38             return true;
    39         }else {
    40             return false;
    41         }
    42     }
    43     class Node{
    44         String data;
    45         Node next;
    46         public Node() {}
    47         public Node(String data) {
    48             this.data=data;
    49         }
    50     }
    51 }

    测试类:

     1 public class StackTest {
     2     public static void main(String[] args) {
     3         Stack sta=new Stack();
     4         sta.push("张三");
     5         sta.push("李四");
     6         sta.push("王二");
     7         sta.push("麻子");
     8         System.out.println(sta.pop());
     9         System.out.println(sta.peek());
    10         System.out.println(sta.isEmpaty());
    11         System.out.println(sta.size());
    12 
    13     }
    14 
    15 }
     
  • 相关阅读:
    31天重构学习笔记23. 引入参数对象
    31天重构学习笔记31. 使用多态代替条件判断
    31天重构学习笔记25. 引入契约式设计
    新加坡面试经历
    Release a AutoUpdater tool
    31天重构学习笔记24. 分解复杂判断
    31天重构学习笔记29. 去除中间人对象
    自动更新组件分享
    WPF基础到企业应用系列7——深入剖析依赖属性(WPF/Silverlight核心)
    (收藏)2010年度十大杰出IT博客
  • 原文地址:https://www.cnblogs.com/had1314/p/11267982.html
Copyright © 2011-2022 走看看