Java链表栈LinkedStack

  链表实现的栈,在想象栈的时候,最好把他竖着想象成一个立着的容器。 

* 然后往里面一个一个的加节点:  

* 1.先加入top节点  

* 2.然后再在top节点上加入node1节点,node1节点指向top节点  

* 3.再在node1节点上加入node2节点,node2节点指向node1节点  

* ..........  

   

 

Java实现链栈之前,我们首先应该创建一个链表节点类:LinkNode<E>,代码如下:

 

ContractedBlock.gif ExpandedBlockStart.gif Code
/**
* 链表节点

*
@author Chris Wang

*
@param <E>
 
*/
public class LinkNode<E> {
   
/**
     * 表示存储在节点中的数据项
    
*/
   
private E data;

   
private LinkNode<E> next;

   
public LinkNode(E data) {
       
this.data = data;
       
this.next = null;
    }

   
public LinkNode(E data, LinkNode next) {
       
this.data = data;
       
this.next = next;

    }

   
public E getData() {
       
return data;
    }

   
public void setData(E data) {
       
this.data = data;
    }

   
public LinkNode<E> getNext() {
       
return next;
    }

   
public void setNext(LinkNode<E> next) {
       
this.next = next;
    }

}

 

然后 是具体的链栈的实现,代码如下:

 

ContractedBlock.gif ExpandedBlockStart.gif Code
/**
* 链表实现的栈,在想象栈的时候,最好把他竖着想象成一个立着的容器。
* 然后往里面一个一个的加节点:
* 1.先加入top节点
* 2.然后再在top节点上加入node1节点,node1节点指向top节点
* 3.再在node1节点上加入node2节点,node2节点指向node1节点
* dot.gifdot.gifdot.gif.

*
@author Chris Wang
*
*
@param <E>
 
*/
public class LinkedStack<E> implements Stack<E> {
   
// 表示链表的头结点
    private LinkNode<E> top;

   
// 表示链表中当前的元素个数
    private int size;

   
public LinkedStack() {
       
this.top = null;
        size
= 0;

    }

   
public boolean isEmpty() {
       
return top == null;
    }

   
public E pop() {
       
if (isEmpty()) {

           
throw new RuntimeException("链表为空!!");
        }
       
// 将栈顶元素的值保存起来
        E tempData = top.getData();
       
// 然后出栈,次栈顶元素成为新的栈顶元素
        top = top.getNext();
       
// 栈中元素个数减少一
        size--;
       
return tempData;
    }

   
public void push(E target) {
       
if(target==null){
           
throw new RuntimeException("不能往栈中加入null元素");
            
        }
        LinkNode
<E> newNode = new LinkNode<E>(target);
       
if (isEmpty()) {
            top
= newNode;
        }
else {
           
//新加入的节点放入栈中,并指向原来的top节点
            newNode.setNext(top);
           
// 新加入的元素成为了新的栈顶
            top = newNode;
        }
        size
++;
    }

   
public int size() {
      
return size;
    }

   
public E top() {
       
if (isEmpty()) {

           
throw new RuntimeException("链表为空!!");
        }
       
return top.getData();
    }

}

转载于:https://www.cnblogs.com/ChrisWang/archive/2008/10/16/1565934.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值