锁定老帖子 主题:一种对Java对象通用的栈实现
精华帖 (5) :: 良好帖 (0) :: 新手帖 (18) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-05-20
由于代码比较清晰,逻辑简单,所以没有多加说明。 1. 栈元素定义: /** * create on 2010-05-19 TODO: 栈元素 * * @author 毛正吉 * @version 1.0 * */ class Node { protected Object data; protected Node next; protected Node() { data = null; next = null; } protected Node(Object _data) { data = _data; next = null; } } 2. 栈容器定义: /** * create on 2010-05-19 TODO: 栈容器 * * @author 毛正吉 * @version 1.0 * */ public class Stack { private Node top; public Stack() { top = null; } /** * 入栈 * * @param obj */ public void push(Object obj) { Node node = new Node(obj); node.next = top; top = node; } /** * 出栈 * * @return * @throws StackException */ public Object pop() throws StackException { if (top == null) throw new StackException("popping from an empty stack"); else { Object obj = top.data; top = top.next; return obj; } } /** * 返回栈顶元素 * * @return * @throws StackException */ public Object peek() throws StackException { if (top == null) throw new StackException("peeking into empty stack"); else return top.data; } public boolean isEmpty() { return (top == null); } } 3.栈异常定义: /** * create on 2010-05-19 TODO:栈异常定义 * * @author 毛正吉 * @version 1.0 * */ public class StackException extends Exception { public StackException() { super("Stack Exception"); } public StackException(String msg) { super(msg); } } 4. Java对象: public class Student { private String name; private Integer age; public Student(String _name, Integer _age) { name = _name; age = _age; } public String toString() { return "name=" + name + ", " + "age=" + age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } } 5.栈应用测试: /** * create on 2010-05-19 TODO: 栈应用测试 * * @author 毛正吉 * @version 1.0 * */ public class StackApp { /** * @param args * @throws StackException */ public static void main(String[] args) throws StackException { Student s1 = new Student("Alice", 20); Student s2 = new Student("Bob", 22); Student s3 = new Student("Jack", 20); Student s4 = new Student("John", 23); Student s5 = new Student("Robit", 25); Stack s = new Stack(); s.push(s1); s.push(s2); s.push(s3); s.push(s4); s.push(s5); //s.pop(); while(!s.isEmpty()){ Student st = (Student) s.pop(); System.out.println(st); } } } 6.输出结果: name=Robit, age=25 name=John, age=23 name=Jack, age=20 name=Bob, age=22 name=Alice, age=20 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-05-20
lz是用链表结构实现了栈吗?
lz似乎是从c阵营转过来的,搞java的人很少去搞这些基础的东西,jdk已经提供了不错的stack实现。 |
|
返回顶楼 | |
发表时间:2010-05-20
hatedance 写道 lz是用链表结构实现了栈吗? lz似乎是从c阵营转过来的,搞java的人很少去搞这些基础的东西,jdk已经提供了不错的stack实现。 我是一开始就搞java的,jdk提供的栈实现是相当不错的,我只是突然有想写种栈实现的想法,所以就写了一个,兴趣导向,意在分享哈...谢谢 |
|
返回顶楼 | |
发表时间:2010-05-21
真的是新手帖!
|
|
返回顶楼 | |
发表时间:2010-05-21
最后修改:2010-05-21
pujia12345 写道 真的是新手帖!
在javaeye论坛上发帖属新手~~ |
|
返回顶楼 | |
发表时间:2010-05-21
maozj 写道 pujia12345 写道 真的是新手帖!
在javaeye论坛上发帖属新手~~ 主要是你的帖子水平不高,大家都投你新手,小心罚你回答问题哦 |
|
返回顶楼 | |
发表时间:2010-05-21
pujia12345 写道 maozj 写道 pujia12345 写道 真的是新手帖!
在javaeye论坛上发帖属新手~~ 主要是你的帖子水平不高,大家都投你新手,小心罚你回答问题哦 那向您请教了... |
|
返回顶楼 | |
发表时间:2010-05-21
拿这个来练习数据结构吗?
客观的说,这个Stack,拿来实用是不合适的: 1、内存的使用效率并不高,不如采用一个数组做底层的效率高。 2、实际使用的话,要考虑是否是线程安全的,作者方面的处理。 maozj 写道 pujia12345 写道 maozj 写道 pujia12345 写道 真的是新手帖!
在javaeye论坛上发帖属新手~~ 主要是你的帖子水平不高,大家都投你新手,小心罚你回答问题哦 那向您请教了... |
|
返回顶楼 | |
发表时间:2010-05-21
wangzaixiang 写道 拿这个来练习数据结构吗?
客观的说,这个Stack,拿来实用是不合适的: 1、内存的使用效率并不高,不如采用一个数组做底层的效率高。 2、实际使用的话,要考虑是否是线程安全的,作者方面的处理。 maozj 写道 pujia12345 写道 maozj 写道 pujia12345 写道 真的是新手帖!
在javaeye论坛上发帖属新手~~ 主要是你的帖子水平不高,大家都投你新手,小心罚你回答问题哦 那向您请教了... 恩~~ 您的说法果然不错 我很能接受 您是高人。。。这才是分享和交流。。。非常感谢你的回复哈! |
|
返回顶楼 | |
发表时间:2010-05-21
我现在在论坛发不了贴了,你们的论坛能正常显示吗,我的好像是系统做维护一样,很多功能没了。
|
|
返回顶楼 | |