数据结构之链栈(二)

一:链栈结点
package linkedstack;

/**
 * @packagname:linkedstack
 * @classname:LinkedStackNode
 * @date:2017/1/24
 * @author:cullinans
 * @des:链栈结点
 */

public class LinkedStackNode<T> {
    T data;
    LinkedStackNode<T> next;
}
二:创建链栈结点的工厂类
package linkedstack;

/**
 * @packagname:linkedstack
 * @classname:LinkedStackNodeFactory
 * @date:2017/1/25
 * @author:cullinans
 * @des:创建链式存储的栈结点的工厂
 */

public class LinkedStackNodeFactory {
    public static LinkedStackNode createLinkedStackNode(){
        return new LinkedStackNode();
    }
}
三:链栈的入栈,出栈操作
package linkedstack;

/**
 * @packagname:linkedstack
 * @classname:LinkedStackList
 * @date:2017/1/24
 * @author:cullinans
 * @des:链式存储结构的栈
 */

public class LinkedStackList<T> {
    int count;
    LinkedStackNode<T> top;//栈顶指针

    //入栈
    public int push(LinkedStackList<T> l,T ele){
        LinkedStackNode<T> tempnode=l.top;//定义一个临时引用指向栈顶元素
        LinkedStackNode linkedStackNode = LinkedStackNodeFactory.createLinkedStackNode();//创建一个新结点
        linkedStackNode.data=ele;//给新结点赋值
        linkedStackNode.next=tempnode;//原结点赋值给新结点的后继
        l.top=linkedStackNode;//新结点赋值给栈顶元素引用
        count++;//栈长度加1
        return 0;
    }
    //出栈
    public T pop(LinkedStackList<T> l,T ele){
        LinkedStackNode<T> tempNode=l.top;//定义一个结点,指向头结点
        if(l.top==null){//如果头结点为空
            return null;//弹出空
        }
        ele=tempNode.data;//如果头结点不为空
        l.top=tempNode.next;//头结点的后继赋值为栈顶结点
        l.count--;//元素减一
        return ele;//返回弹出的元素
    }
    //main方法用来测试
    public static void main(String[] args){
        LinkedStackList<Integer> ls=new LinkedStackList<Integer>();
        LinkedStackNode<Integer> topnode=LinkedStackNodeFactory.createLinkedStackNode();
        topnode.data=1;
        ls.top=topnode;
        Integer[] elems=new Integer[]{2,3,4,5};
        for(int i=0;i<elems.length;i++){
            ls.push(ls,elems[i]);
        }
        ls.printEle(ls);

    }
    //打印出栈元素
    public void printEle(LinkedStackList<T> t){
        LinkedStackNode<T> tempnode=t.top;
        T tempdata = null;
        while(tempnode!=null){
            System.out.println(t.pop(t,tempdata));
            tempnode=tempnode.next;
        }
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值