Java链表实现栈

用链表实现栈
一、算法的思想
用链表实现栈的先进后出,实现栈的push,pop,peak方法。主要就是利用链表的头结点作为栈顶的元素。

1.当要push的时候,相当于新new一个头结点,然后让新节点指向单链表的头结点。以新节点作为单链表的头节点即可。
2.当要pop的时候,只要将链表的头指针后移到它的next,将next作为新的头结点即可
3.当要peak的时候,只要返回头结点的值就好了。

二、Java版实例

/** 
/** 
 * 用单链表实现栈 
 *  
 * 表示链表的一个节点 
 * @author ly 
 * 
 */  
public class Node {  
      
    Object element;  
    Node next;  
      
    public Node(Object element){  
        this(element,null);  
    }  
      
    /** 
     * 创建一个新的节点 
     * 让他的next指向,参数中的节点 
     * @param element 
     * @param n 
     */  
    public Node(Object element,Node n){  
        this.element=element;  
        next=n;  
    }  
      
    public Object getElement() {  
        return element;  
    }  
      
}  
/** 
 * 用链表实现的栈,内含push pop peak 方法 
 * @author ly 
 * 
 */  
public class ListStack {  
      
    Node header;//栈顶元素  
    int elementCount;//栈内元素个数  
    int size;//栈的大小  
      
    /** 
     * 构造函数,构造一个空的栈 
     */  
    public ListStack(){  
        header=null;  
        elementCount=0;  
        size=0;  
    }  
      
    /** 
     * 通过构造器自定义栈的大小 
     * @param size 
     */  
    public ListStack(int size) {  
        header=null;  
        elementCount=0;  
        this.size=size;  
    }  
      
    public void setHeader(Node header) {  
        this.header=header;  
    }  
      
    public boolean isFull() {  
        if (elementCount==size) {  
            return true;  
        }  
          
        return false;  
    }  
      
    public boolean isEmpty() {  
        if (elementCount==0) {  
            return true;  
        }  
          
        return false;  
    }  
      
    /** 
     * 入栈 
     * @param value 
     */  
    public void push(Object value) {  
        if (this.isFull()) {  
            throw new RuntimeException("Stack is Full");  
        }  
        //注意这里面试将原来的header作为参数传入,然后以新new出来的Node作为header  
        header=new Node(value, header);  
        elementCount++;  
    }  
      
    /** 
     * 出栈 
     * @return 
     */  
    public Object pop() {  
        if (this.isEmpty()) {  
            throw new RuntimeException("Stack is empty");  
        }  
        Object object=header.getElement();  
          
        header=header.next;  
          
        elementCount--;  
          
        return object;  
    }  
      
    /** 
     * 返回栈顶元素 
     */  
    public Object peak(){  
          
        if (this.isEmpty()) {  
            throw new RuntimeException("Stack is empty");  
        }  
          
        return header.getElement();  
    }  
  
}  
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值