栈(stack)可以看做是特殊类型的线性表,访问、插入和删除其中的元素只能在栈尾(栈顶)进行。

队列(queue)表示一个等待的线性表,它也可以看做是一种特殊类型的线性表,元素只能从队列的末端(队列尾)插入,从开始(队列头)访问和删除。

————Java语言程序设计 进阶篇(原书第8版)

栈是先进后出(LIFO),而队列是先进先出(FIFO)。

实现栈这个数据结构的代码

package struct;

//late in first out,LIFO
//泛型
public class MyStack<E>
{
private Node<E> head = null; public MyStack(){} public MyStack(E element)
{
Node<E> newNode = new Node<E>(element);
head = newNode;
} private class Node<E>
{
E element;
Node<E> next; public Node(E element)
{
this.element = element;
}
} //弹出一个元素
public E pop()
{
Node<E> popOut = head;
head=head.next;
return popOut.element;
} //压入一个元素
public void push(E element)
{
Node<E> newNode = new Node<E>(element);
if(head!=null)
{
newNode.next=head;
head=newNode;
}
else
{
head=newNode;
}
} //展示第一个元素
public E peek()
{
return head.element;
} //是否为空
public boolean empty()
{
if(head!=null)
return false;
else
return true;
} public static void main(String[] args)
{
//String类型
MyStack<String> stack1 = new MyStack<String>();
stack1.push("sss");
stack1.push("dddd");
stack1.push("dsds");
System.out.println("begin");
while(stack1.empty()==false)
{
System.out.print(stack1.pop()+" ");
}
System.out.println();
System.out.println("end"); //Integer类型
MyStack<Integer> stack2 = new MyStack<Integer>();
stack2.push(212);
stack2.push(545);
stack2.push(54643);
stack2.push(000);
System.out.println("begin");
while(stack2.empty()==false)
{
System.out.print(stack2.pop()+" ");
}
System.out.println();
System.out.println("end"); //多种类型
MyStack stack3 = new MyStack();
stack3.push(212);
stack3.push("sdad");
stack3.push(54643.787f);
stack3.push(0.98989);
System.out.println("begin");
while(stack3.empty()==false)
{
System.out.print(stack3.pop()+" ");
}
System.out.println();
System.out.println("end"); //展示后进先出
MyStack<String> stack4 = new MyStack<String>("first");
stack4.push("second");
stack4.push("third");
stack4.push("forth");
System.out.println("begin");
while(stack4.empty()==false)
{
System.out.print(stack4.pop()+" ");
}
System.out.println();
System.out.println("end");
} }

在写这个数据结构的过程中,也稍微复习了一下泛型。然后注意到,其实泛型类型是不能用基本类型的,至少要用基本类型的相应包装类。

泛型类型必须是引用类型。不能用像int、double或char这样的基本类型来替换泛型类型。而应该使用对应的Integer、Double或Character来代替。

————Java语言程序设计 进阶篇(原书第8版)

Java-数据结构之栈练习的更多相关文章

  1. JAVA数据结构系列 栈

    java数据结构系列之栈 手写栈 1.利用链表做出栈,因为栈的特殊,插入删除操作都是在栈顶进行,链表不用担心栈的长度,所以链表再合适不过了,非常好用,不过它在插入和删除元素的时候,速度比数组栈慢,因为 ...

  2. Java数据结构之栈(Stack)

    1.栈(Stack)的介绍 栈是一个先入后出(FILO:First In Last Out)的有序列表. 栈(Stack)是限制线性表中元素的插入和删除只能在同一端进行的一种特殊线性表. 允许插入和删 ...

  3. java数据结构-07栈

    一.什么是栈 栈是一种线性结构,栈的特点就是先进后出(FILO):就像弹夹装子弹一样,最先压进去的在最底下,最后才被射出.  二.相关接口设计  三.栈的实现 栈可以用之前的数组.链表等设计,这里我使 ...

  4. java 数据结构 栈的实现

    java数据结构之栈的实现,可是入栈,出栈操作: /** * java数据结构之栈的实现 * 2016/4/26 **/ package cn.Link; public class Stack{ No ...

  5. 《Java数据结构与算法》笔记-CH4-2用栈实现字符串反转

    import java.io.BufferedReader; import java.io.InputStreamReader; //用栈来实现一个字符串逆序算法 /** * 数据结构:栈 */ cl ...

  6. 【Java数据结构学习笔记之二】Java数据结构与算法之栈(Stack)实现

      本篇是java数据结构与算法的第2篇,从本篇开始我们将来了解栈的设计与实现,以下是本篇的相关知识点: 栈的抽象数据类型 顺序栈的设计与实现 链式栈的设计与实现 栈的应用 栈的抽象数据类型   栈是 ...

  7. java数据结构与算法之栈(Stack)设计与实现

    本篇是java数据结构与算法的第4篇,从本篇开始我们将来了解栈的设计与实现,以下是本篇的相关知识点: 栈的抽象数据类型 顺序栈的设计与实现 链式栈的设计与实现 栈的应用 栈的抽象数据类型 栈是一种用于 ...

  8. Java数据结构和算法 - 栈和队列

    Q: 栈.队列与数组的区别? A: 本篇主要涉及三种数据存储类型:栈.队列和优先级队列,它与数组主要有如下三个区别: A: (一)程序员工具 数组和其他的结构(栈.队列.链表.树等等)都适用于数据库应 ...

  9. 【Java】 大话数据结构(6) 栈的顺序与链式存储

    本文根据<大话数据结构>一书,实现了Java版的栈的顺序存储结构.两栈共享空间.栈的链式存储机构. 栈:限定仅在表尾进行插入和删除操作的线性表. 栈的插入(进栈)和删除(出栈)操作如下图所 ...

  10. java数据结构 栈stack

    栈(Stack) 栈(Stack)实现了一个后进先出(LIFO)的数据结构. 你可以把栈理解为对象的垂直分布的栈,当你添加一个新元素时,就将新元素放在其他元素的顶部. 当你从栈中取元素的时候,就从栈顶 ...

随机推荐

  1. 使用visio创建数据库模型

    使用软件:visio 2007 下载地址:https://pan.baidu.com/s/1i4LG1Id 主要参考:http://blog.csdn.net/zhang_xinxiu/article ...

  2. 基于spark Mllib(ML)聚类实战

        写在前面的话:由于spark2.0.0之后ML中才包括LDA,GaussianMixture 模型,这里k-means用的是ML模块做测试,LDA,GaussianMixture 则用的是ML ...

  3. hihocoder第三十六周 二分查找

    题目链接:http://hihocoder.com/contest/hiho36/problem/1 , 一个比较简单的二分. 算法: 由于数据量比较大,O(nlogn)无法通过,所以不能先排序再查找 ...

  4. HDU4302 线段树

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4302 , 可以用线段树,也可以STL中的map,multiset,优先队列中的任何一个解决(可我只会线 ...

  5. shell脚本常识

    --------------------------------------------------------------- --------------            概要      -- ...

  6. 一个SAP顾问在美国的这些年

    今天的文章来自我的老乡宋浩,之前作为SAP顾问在美国工作多年.如今即将加入SAP成都研究院S4CRM开发团队.我们都是大邑人. 大邑县隶属于四川省成都市,位于成都平原西部,与邛崃山脉接壤.东与崇州市交 ...

  7. JoinQuant策略代码示例

    总体回测前 ''' ================================================================================ 总体回测前 === ...

  8. 两级宏&&字符串化宏

    如果你想字符串化宏参数扩展的结果,你必须使用两个级别的宏. #define xstr(s) str(s) #define str(s) #s #define foo 4 str (foo) ==> ...

  9. 01_14_Struts2_结果类型_result_type

    01_14_Struts2_结果类型_result_type 1. result类型 result类型 说明 dispatcher 默认服务端转发jsp chain 服务端action转发 redir ...

  10. c++question 004 c++基本数据类型有哪些?

    (1)signed int类型 整数型 占内存4个字节 一个字节byte 占8个二进制位 一个整型就占32位 (2)short int  短整型 占内存2个字节 一个短整型占16位 (3)long i ...