链栈(java实现)

来源:互联网 发布:js typeof() 编辑:程序博客网 时间:2024/05/19 11:49
package com.fcy.dataStruct;public class LinkStack<T> {private class Node{//保存结点数据private T data;//指向下一个结点的引用 private Node next;public Node(T data,Node next){this.data=data;this.next=next;}}//栈顶元素private Node top;//链栈中的结点数private int size;public LinkStack(){top=null;}public LinkStack(T element){top =new Node(element,null);size++;}//返回链栈长度public int length(){return size;}//进栈public void push(T element){top=new Node(element,top);size++;}//出栈public T pop(){Node oldTop=top;top=top.next;//释放栈顶元素的next引用oldTop.next=null;size--;return oldTop.data;}//访问栈顶元素,但不删除栈顶元素public T peek(){return top.data;}//判断链栈是否为空栈public boolean empty(){return size==0;}//清空链栈public void clear(){//将底层数组的所有元素赋为nulltop =null;size=0;}public String toString(){//链栈为空链栈时if(empty()){return "[]";}else{StringBuilder sb=new StringBuilder("[");for(Node current=top;current!=null;                current=current.next){sb.append(current.data.toString()+",");}int len=sb.length();return sb.delete(len-1, len).append("]").toString();}}}


测试类:

package com.fcy.dataStruct;public class LinkStackTest {public static void main(String[] args) {LinkStack<String> stack=new LinkStack<String>();stack.push("aaaa");stack.push("bbbb");stack.push("cccc");stack.push("dddd");System.out.println(stack);System.out.println("访问栈顶元素:"+stack.peek());System.out.println("第一次弹出栈顶元素:"+stack.pop());System.out.println("第二次弹出栈顶元素:"+stack.pop());System.out.println("两次pop后的栈:"+stack);}} 

运行结果:


0 0