使用泛型实现栈结构

泛型类就是含有一个或者多个类型参数的类。定义泛型类很简单,只需要在类的名称后面加上“<”和“>”,并在其中指明类型参数,比如本例中的T。

也可以在其中指明多个参数,如K、V。多个参数之间使用逗号隔开。定义完类后,就可以在类中的域和方法中使用泛型参数。

注意: 泛型类型的参数只能使用类类型,而不能使用基本类型。

设计过程:

1)编写泛型类Stack,在该类中定义了3个方法,分别用来入栈的push()方法、用来出栈的pop()方法和用来判断栈是否为空的empty()方法。在底层上,本类使用LinkedList作为容器,它是Java集合类的一员,可以用来简化开发。代码如下:

public class Stack<T> {

    private LinkedList<T> container = new LinkedList<T>();

    public void push(T t) {
        container.addFirst(t);
    }

    public T pop() {
        return container.removeFirst();
    }

    public boolean empty() {
        return container.isEmpty();
    }
}

2)编写测试代类StackTest,在该类的main()方法中向栈中增加3个字符串,又从栈中删去3个字符串并进行输出。代码如下:

public class StackTest {
    public static void main(String[] args) {
        Stack<String> stack = new Stack<String>();
        System.out.println("向栈中增加字符串:");
        System.out.println("视频学Java");
        System.out.println("细说Java");
        System.out.println("Java从入门到精通(第2版)");
        stack.push("视频学Java");  //向栈中增加字符串
        stack.push("细说Java");   //向栈中增加字符串
        stack.push("Java从入门到精通(第2版)"); //向栈中增加字符串
        System.out.println("从栈中取出字符串:");
        while (!stack.empty()) {
            System.out.println((String) stack.pop());//删除栈中全部元素并进行输出
        }
    }
}

结果如下:

使用泛型实现栈结构,布布扣,bubuko.com

时间: 2024-10-04 04:51:44

使用泛型实现栈结构的相关文章

闭关修炼中 *** Java常用算法之 -- 栈结构

什么是栈结构: 栈结构从数据的运算来分类,栈结构具有特殊的运算规则. 从数据的逻辑结构来看,栈结构其实就是一种线性结构. but!!! 从数据的存储结构来划分,栈结构分为两类: 顺序表结构:即用一组地址连续的内存单元依次保存栈中的数据.在程序中,可以定义一个 指定大小的结构数组来作为栈,序号为0的元素就是栈底,在定义一个top保 存栈顶的序号. 链式栈结构:即使用链式形式保存栈中各元素的值.链表首部(head引用所指向元素)为栈顶, 链表尾部(指向地址为null)为栈底. 栈结构遵循:后进先出(

javascript中的栈结构

1.栈的定义 栈是一种和列表类似的数据结构,可以用它来解决很多的编程问题,栈是一种高效的数据结构,因为数据只能在栈的顶端添加或者删除,所以这样的操作很快而且容易实现. 栈是一种特殊的列表,站内的元素只能拖过列表的一端进行访问,这一端陈伟栈顶.一叠盘子是最常见的栈结构,只能从顶部取盘子,洗好的盘子也只能放在顶端.栈被称为后入先出的数据结构. 由于栈具有后入先出的特点,所以任何不在栈顶的元素都无法访问.为了得到栈底的元素,必须拿掉上面的元素. 对栈的操作有将一个元素压入栈和将一个元素弹出栈.压入栈使

帧栈结构

帧栈结构是一种机器实现切换上下文的机制.具体介绍看 http://blog.csdn.net/yxysdcl/article/details/5569351 IA32体系涉及寄存器保存问题,%eax,%ecx,%edx由调用者保存,%ebx,%esi,%edi由被调用者保存,%esp,%ebp分别是栈指针和帧指针,%esp指向返回地址,%ebp由被调用者恢复. leave指令可以用于释放帧栈,等同于一个或两个pop指令. 帧栈结构存储于内存中,指令也存储于内存中,两者基本没关系,指令按照顺序执行

帧栈结构的弊端

过程采用帧栈结构保存局部信息和状态信息,可以实现上下文的转换,局部变量保存等好处,随之带来的是数组越界引用和缓冲区溢出会造成严重的后果.后果可参考 http://www.cnblogs.com/fanzhidongyzby/archive/2013/08/10/3250405.html 解决办法1.栈随机化 http://blog.csdn.net/swordmanwk/article/details/42044775 2.金丝雀检测(栈破坏检测) http://www.ithao123.cn/

浮点栈结构(转帖)

在介绍X86浮点栈结构之前,先说明一下X87,X87是IA_32体系结构中为提高浮点数据处理能力而增加的X87芯片系列数学协处理器,使用 X87指令,X86指令集和X87指令集统称为X86指令集.可以简单的理解X87是一个浮点协处理器,是X86的浮点处理单元. X86的浮点单元(X87 FPU)用作浮点数据处理,必然要使用寄存器,而且这个寄存器必然要同整点的不同.那么,在FPU中是怎么设计这些浮点寄存器呢? 实际上,X86的FPU中包含一个浮点寄存器栈,它包含了8个80位的可以直接进行浮点运算的

栈结构的经典算法题

栈结构 颠倒一个栈的元素顺序 问题:假设有一个栈{1,2,3,4,5,6},6是栈顶,1是栈底,现在要把这个栈中的元素颠倒一下. 思路:最简单的办法当然是把栈中的元素依次pop到一个数组中,然后把这个数组再push回栈里面即可,但这样需要O(n)的辅助空间. 下面介绍一种仅使用O(1)辅助空间的算法,我们知道,可以使用递归来模拟栈的操作.我们借助函数递归pop元素,这样在递归的函数栈上依次有 {6,5,4,3,2,1},1是栈顶,6是栈底,然后在递归返回的时候,如何把当前元素塞到原栈的底部呢?这

C++ Primer 学习笔记_45_STL实践与分析(19)--泛型算法的结构

STL实践与分析 --泛型算法的结构 引言: 正如全部的容器都建立在一致的设计模式上一样,算法也具有共同的设计基础. 算法最主要的性质是须要使用的迭代器种类.全部算法都指定了它的每一个迭代器形參可使用的迭代器类型.比方,假设形參必须为随机訪问迭代器则可提供vector或 deque类型的迭代器,或者提供指向数组的指针.而其它容器的迭代器不能用在这类算法上. C++还提供了另外两种算法模式:一种模式由算法所带的形參定义;还有一种模式则通过两种函数命名和重载的规范定义. 一.算法的形參模式 大多数的

C语言实现使用静态数组来构造栈结构

在数据结构中,栈是一种很重要的存在.这是一种先进后出的结构,就像一个"死胡同"一样.今天我们先用最简单的方式静态数组来模拟栈.代码上传至 https://github.com/chenyufeng1991/Stack_StaticArray . (1)声明栈的大小,数组,和一个栈顶指针.栈顶指针可以取出栈顶的数据. #define STACK_SIZE 50 static int stack[STACK_SIZE]; static int top_element = -1; (2)压入

用栈结构实现多项式计算器

学校数据结构课程实验之一. 用到的数据结构:栈 基本功能: 输入中缀的运算表达式(即运算符在操作数中间,符合日常的书写习惯),将其转为逆波兰表达式(后缀表达式,适于机器运算): 对输入的表达式进行括号匹配检查,若不符合规则,报错:对于符合规则的表达式,计算结果并输出: 过滤输入的非法字符(字母). 概要设计: 主函数代码(main.cpp): 1 #include <iostream> 2 #include "MyStack.cpp" 3 #include "Ca