栈(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. 2833 奇怪的梦境 未AC

    2833 奇怪的梦境 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold         题目描述 Description Aiden陷入了一个奇怪的梦境:他被困在一个小 ...

  2. SublimeText相关配置

    安转插件:案例格式化HTML代码,需要安装插件,具体安装步骤如下: 1.打开菜单->首选项->插件控制,输入 install package 2.等待程序进入插件管理功能,再输入插件名称: ...

  3. Ajax 使用 FormData做为data的参数时 出现Illegal invocation

    今天在用ajax向后台传递数据时出现此错误,在ajax的参数中加上 contentType: false, processData: false, 这两句即可.

  4. 【来龙去脉系列】RSA算法原理

    如果你问我,哪一种算法最重要? 我可能会回答"公钥加密算法". 因为它是计算机通信安全的基石,保证了加密数据不会被破解.你可以想象一下,信用卡交易被破解的后果. 进入正题之前,我先 ...

  5. vue系列(一)子组件和父组件

    父组件传递数据到子组件props 父组件 <template> <div class="main"> <div class="top&quo ...

  6. HDU3973 线段树 + 字符哈希

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3973 , 线段树 + 字符哈希,好题. 又学了一种新的哈希方法,hhhh~ 解法: 想法是用P进制的数 ...

  7. World Wind Java开发之十一——加载热点信息(仿Google Earth)(转)

    在GE的图层中有一个照片图层,在浏览时可以看到各地的一些图片,我们称之为热点信息,如下图所示: 再来看下本文的实现效果: 效果是不是很像呢,其实实现这个很简单,参照examples中的Balloons ...

  8. UVA 215 Spreadsheet Calculator (模拟)

    模拟题.每个单元格有表达式就dfs,如果有环那么就不能解析,可能会重复访问到不能解析的单元格,丢set里或者数组判下重复. 这种题首先框架要对,变量名不要取的太乱,细节比较多,知道的库函数越多越容易写 ...

  9. python 基础之列表切片内置方法

    列表操作 c=['cx','zrd','ajt','dne'] #定义一个列表,有4个元素 #增删改查 print(c[3]) #从0计数 测试 D:\python\python.exe D:/unt ...

  10. 2018.5.25 Oracle相关的函数命令

    第03章 函数 1 Oracle的函数 Oracle的函数和java中的方法一样, 能完成一定的功能 2 字符处理类函数 --需求1:把ename字段转换成小写 select lower(ename) ...