实现思路:
1.建立一个结点,每个结点都有一个保存自身value的属性,以及一个指向下一个结点的ref.
2.当前Stack指向一个结点
3.put方法,每次都新创建这样的一个结点,把值放进去,然后把指向下一个结点的ref,用来指向当前的stack所指向的那个结点
4.pop方法,返回当前stack指向的那个结点的value. 并把当前结点所引用的下一个结点,作为当前结点。
最后测试,pop, put是否能工作,以及内存是否能够回收
这种Stack,比起用List或者数组的Stack的好处在于环保,不会一次性初始化一堆暂时不用的内存。
package general;
public class LinkedStack<T> {
Node<T> stack;
class Node<N>{
public T value;
public Node<T> inside;
//查看是否能够回收对象
@Override
protected void finalize() throws Throwable {
System.out.println("finalize after pop "+value);
}
}
public T pop(){
if(stack!=null){
T value=stack.value;
stack=stack.inside;
//System.gc();
return value;
}else{
return null;
}
}
public void put(T t){
Node<T> topNode=new Node<T>();
topNode.value=t;
topNode.inside=stack;
stack=topNode;
}
public void testMyStack(){
LinkedStack<Integer> stack=new LinkedStack<Integer>();
stack.put(1);
stack.put(2);
stack.put(3);
stack.put(4);
stack.put(5);
stack.put(6);
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
stack.put(5);
stack.put(6);
stack.put(7);
stack.put(8);
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
}
//测试是否能够回收内存
public void testMemoryClean(){
LinkedStack<Integer> stack=new LinkedStack<Integer>();
stack.put(1);
stack.put(2);
stack.put(3);
stack.put(4);
stack.pop();
}
public static void main(String args[]){
new LinkedStack().testMyStack();
}
}
分享到:
相关推荐
试用java.util.Stack泛型栈作为父类,用另一个泛型栈对象作为成员变量,模拟实现一个泛型子类Queue,当存储元素的第1个栈的元素超过dump时,再有元素入队列就倒入第2栈。除提供无参构造函数Queue( )外,其它所有队列...
C语言泛型stack操作算法,使用泛型来完成栈的操作。
自己利用.Net的stack泛型类实现迷宫算法,并给出了演示程序,并写出了里面的重要说明,为便于理解算法,其中源代码每个函数和变量都有详细的注释,望大家学习并指出和改正里面的错误。
本程序利用c语言来实现c++中STL的功能,也就是利用C语言来实现泛型的数据结构,这个文件中只包含四种数据结构,stack,queue,list,vector
泛型语法教学 定义泛型类,定义多个泛型,定义Stack泛型类,结构类泛型, 展示泛型继承 自定义类和接口等相关内容
通用类 使用Java中的泛型类和泛型方法显示了Stack的应用。
定义LinkedList类型数据域(采用组合实现以便简化开发)。 构造方法:创建一个空栈 入栈的push方法:添加一个新的元素到栈顶 出栈的pop方法:返回栈顶元素 判断是否空的empty()方法:如果栈为空,则返回true ...
用堆栈实现中缀表达式转后缀,并计算后缀表达式的结果。
此实例代码大部分从网上整理而来,因为近期感觉泛型、集合等在ASP.NET web项目中开发还是比较重要的,对提高系统情能很有帮助。
我们在编写程序时,经常...为什么要使用泛型 为了了解这个问题,我们先看下面的代码,代码省略了一些内容,但功能是实现一个栈,这个栈只能处理int数据类型: 代码如下:public class Stack { private int[] m_item;
ListWildQueueStack.doc 目的:学会使用 List 的泛型 完成内容 1. 使用泛型定义一个 Queue,加入 5 个商品对象 演示先进先出 2. 使用泛型定义一个 Stack,加入 5 个 Dog 对象 演示先进后出
泛型最常见的用途是泛型集合,命名空间System.Collections.Generic 中包含了一些基于泛型的集合类,使用泛型集合类可以提供更高的类型安全性,还有更高的性能,避免了非泛型集合的重复的装箱和拆箱。 很多非泛型集合...
C++泛型编程,联系代码手稿。容器、模版、STL:string、vector、deque、stack、queue、list、map、set,函数对象:仿函数、谓词、常见库算法:遍历、查找、排序
Java代码加速器 Java代码积累:并发 设计模式 数据结构 ...Stack - 使用泛型实现Stack 生成斐波那契数列 使用容器 利用迭代器实现原材料 实用程序 StringUtil类 - 封装常用的String方法 基本的 正则表达式的使用方式
staticvec:使用const泛型实现由数组支持的固定容量堆栈分配的Vec替代方案
这阵子在重温数据结构的时候,顺便用ILSpy看了一些.NET...为了降低学习成本,这里将根据.NET源码的实现,结合其中的核心设计思想,得出一个简化版本的实现: using System; namespace OriginalCode { /// <summary>
网上实现自定义数据结构时间接使用了其他高级的结构,本次我仅仅使用了数组实现了泛型 stack queue dictionary 三种数据结构,且实现了IEnumerable 接口。
系统总结了 1.Date类 2.Calendar类 3.Math类与Biglnteger类 4.LinkedList泛型类 5.HashSet泛型类 6.HashMap,V>泛型类 7.TreeSet泛型类 8.TreeMap,V>泛型类 9.Stack泛型类 等方面的含义用法和范例。。。
通用堆栈C语言中一个非常简单的泛型堆栈。有关说明,请参阅此。 您需要CMake来构建项目。 编译和运行的步骤: mkdir buildcd buildcmake ..make./stack