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

      1 package struct;
      2  
      3 //接口
      4 interface ILinkStack{
      5     //栈中元素个数(栈大小)
      6     int size();
      7     //取栈顶元素
      8     Object top();
      9     //判断栈是否为空
     10     boolean isEmpty();
     11     //入栈
     12     Object pop();
     13     //出栈
     14     Object push(Object value);
     15     //清空栈
     16     void clear();
     17 }
     18  
     19 //工厂类
     20 class Factory2{
     21     private Factory2(){}
     22     public static ILinkStack getILinkStackInstance(){
     23         return new LinkStackImpl();
     24     }
     25 }
     26  
     27 class LinkStackImpl implements ILinkStack {
     28     //栈顶元素
     29     Node top;
     30     //链表长度记录入栈元素
     31     private int count;
     32     class Node{
     33         Node prev;
     34         Node next;
     35         Object data;
     36         public Node(Object data) {
     37             this.data = data;
     38         }
     39     }
     40     
     41     public int size() {
     42         return count;
     43     }
     44  
     45     public Object top() {
     46         return top.data;
     47     }
     48     //判栈空
     49     public boolean isEmpty() {
     50         return (size()==0);
     51     }
     52     //入栈
     53     public Object push(Object value) {
     54         Node node = new Node(value);
     55         if(top == null){
     56             top = node;
     57         }else{
     58             top.next = node;
     59             node.prev = top;
     60             top = top.next;
     61         }
     62         count++;
     63         return top;
     64     }
     65     public void print(){
     66         System.out.println("从栈顶到栈底打印栈中元素:");
     67         myPrint(top);
     68         return;
     69     }
     70     //栈顶->栈底打印链表
     71     private void myPrint(Node top){
     72         for(Node node = top;node!=null;node=node.prev){
     73             System.out.print(node.data+" ");
     74         }
     75     }
     76     //出栈
     77     public Object pop() {
     78         Node node = top;
     79         if(top == null){
     80             System.out.println("空栈无要出栈元素");
     81             return -1;
     82         }else{
     83             top = top.prev;
     84             node.prev = null;
     85             node.data = null;
     86         }
     87         count--;
     88         return top();
     89     }
     90     //清空栈
     91     public void clear(){
     92         Node node1 = top;
     93         for(Node node = top;node!=null;){
     94             node = node.prev;
     95             node1.data = null;
     96             node1.prev = null;
     97             count--;
     98         } 
     99     }
    100 }
    101 public class LinkStack {
    102     public static void main(String[] args) {
    103         ILinkStack linkStack = Factory2.getILinkStackInstance();
    104         //向下转型
    105         LinkStackImpl linkStack1 = (LinkStackImpl)linkStack;
    106         System.out.println("============测试isEmpty函数(空栈)=================");
    107         System.out.println(linkStack.isEmpty());
    108         System.out.println("============测试push和print函数=================");
    109         linkStack.push(5);
    110         linkStack.push(9);
    111         linkStack.push(10);
    112         linkStack.push(1);
    113         linkStack.push(8);
    114         linkStack.push(12);
    115         linkStack.push(6);
    116         linkStack.push(3);
    117         linkStack1.print();
    118         System.out.println();
    119         System.out.println("============入栈后测试top函数=================");
    120         System.out.println(linkStack.top());
    121         System.out.println("============入栈后测试size函数=================");
    122         System.out.println(linkStack.size());
    123         System.out.println("============测试pop和print函数=================");
    124         linkStack.pop();
    125         linkStack.pop();
    126         linkStack.pop();
    127         linkStack1.print();
    128         System.out.println();
    129         System.out.println("============出站后测试top函数=================");
    130         System.out.println(linkStack.top());
    131         System.out.println("============出栈后测试size函数=================");
    132         System.out.println(linkStack.size());
    133         System.out.println("============测试clear后size函数=================");
    134         linkStack.clear();
    135         System.out.println(linkStack.size());
    136     }
    137 }
    View Code

  • 相关阅读:
    HTML学习记录之HTML组成原理 PHP学习铺垫
    最长上升子序列(Longest increasing subsequence)
    进程保护(二)
    进程保护(一)
    屏幕广播的实现(三)
    vs2010 调试快捷键
    [整理]C#.Net的常见面试试题附答案(ZT)
    C# 中处理字符串常用的函数及方法详细说明
    Linux 系统下 /etc/group 档案结构
    C# Thread 多种写法总结
  • 原文地址:https://www.cnblogs.com/edda/p/12595026.html
Copyright © 2011-2022 走看看