zoukankan      html  css  js  c++  java
  • Java栈之链式栈存储结构实现

    一、链栈

    采用单链表来保存栈中所有元素,这种链式结构的栈称为链栈。

    二、栈的链式存储结构实现

      1 package com.ietree.basic.datastructure.stack;
      2 
      3 /**
      4  * 链栈
      5  *
      6  * Created by ietree
      7  * 2017/4/29
      8  */
      9 public class LinkStack<T> {
     10 
     11     // 定义一个内部类Node,Node实例代表链栈的节点
     12     private class Node {
     13 
     14         // 保存节点的数据
     15         private T data;
     16         // 指向下个节点的引用
     17         private Node next;
     18         // 无参构造器
     19         public Node() {
     20         }
     21         // 初始化全部属性的构造器
     22         public Node(T data, Node next) {
     23 
     24             this.data = data;
     25             this.next = next;
     26 
     27         }
     28 
     29     }
     30     // 保存该链栈的栈顶元素
     31     private Node top;
     32     // 保存该链栈中已包含的节点数
     33     private int size;
     34     // 创建空链栈
     35     public LinkStack() {
     36         // 空链栈,top的值为null
     37         top = null;
     38 
     39     }
     40 
     41     // 以指定数据元素来创建链栈,该链栈只有一个元素
     42     public LinkStack(T element) {
     43 
     44         top = new Node(element, null);
     45         size++;
     46 
     47     }
     48 
     49     // 返回链栈的长度
     50     public int length() {
     51 
     52         return size;
     53 
     54     }
     55 
     56     // 进栈
     57     public void push(T element) {
     58 
     59         // 让top指向新创建的元素,新元素的next引用指向原来的栈顶元素
     60         top = new Node(element, top);
     61         size++;
     62 
     63     }
     64 
     65     // 出栈
     66     public T pop() {
     67 
     68         Node oldTop = top;
     69         // 让top引用指向原栈顶元素的下一个元素
     70         top = top.next;
     71         // 释放原栈顶元素的next引用
     72         oldTop.next = null;
     73         size--;
     74         return oldTop.data;
     75 
     76     }
     77 
     78     // 访问栈顶元素,但不删除栈顶元素
     79     public T peek(){
     80 
     81         return top.data;
     82 
     83     }
     84 
     85     // 判断链栈是否为空栈
     86     public boolean empty() {
     87 
     88         return size == 0;
     89 
     90     }
     91 
     92     // 请空链栈
     93     public void clear() {
     94 
     95         top = null;
     96         size = 0;
     97 
     98     }
     99 
    100     public String toString() {
    101 
    102         // 链栈为空栈时
    103         if (empty()) {
    104 
    105             return "[]";
    106 
    107         } else {
    108 
    109             StringBuilder sb = new StringBuilder("[");
    110             for (Node current = top; current != null; current = current.next) {
    111 
    112                 sb.append(current.data.toString() + ", ");
    113 
    114             }
    115 
    116             int len = sb.length();
    117             return sb.delete(len - 2, len).append("]").toString();
    118         }
    119 
    120     }
    121 
    122 }

    测试类:

     1 package com.ietree.basic.datastructure.stack;
     2 
     3 /**
     4  * Created by ietree
     5  * 2017/4/29
     6  */
     7 public class LinkStackTest {
     8 
     9     public static void main(String[] args) {
    10 
    11         LinkStack<String> stack = new LinkStack<String>();
    12 
    13         stack.push("aaaa");
    14         stack.push("bbbb");
    15         stack.push("cccc");
    16         stack.push("dddd");
    17         System.out.println(stack);
    18 
    19         System.out.println("访问栈顶元素:" + stack.peek());
    20 
    21         System.out.println("第一次弹出栈顶元素:" + stack.pop());
    22 
    23         System.out.println("第二次弹出栈顶元素:" + stack.pop());
    24 
    25         System.out.println("两次pop之后的栈:" + stack);
    26 
    27     }
    28 
    29 }

    程序输出:

    [dddd, cccc, bbbb, aaaa]
    访问栈顶元素:dddd
    第一次弹出栈顶元素:dddd
    第二次弹出栈顶元素:cccc
    两次pop之后的栈:[bbbb, aaaa]
  • 相关阅读:
    IGS_学习笔记09_IREP生成服务后台工具Soagenerate.sh
    PLSQL_PLSQL调优健康检查脚本SQLHC(案例)
    IGS_学习笔记08_IREP通过soapUI测试客户化Web Service调用(案例)
    IGS_学习笔记07_IREP通过页面测试客户化Web Service调用(案例)
    PLSQL_Oracle簇表和簇表管理Index clustered tables(案例)
    IGS_学习笔记06_IREP发布客户化集成接口为Web Service(案例)
    PLSQL_Oracle外部表的概念和使用(案例)
    DBA_Oracle Erp加密和解密账户密码(案例)
    IGS_学习笔记05_IREP开发Concurrent Program为客户化集合接口(案例)
    PLSQL_Oracle物化视图Material View的基本概念和用法 (概念)
  • 原文地址:https://www.cnblogs.com/Dylansuns/p/6788961.html
Copyright © 2011-2022 走看看