1.提供一组栈的接口,其底层关联到一个LinkedList(双端队列)实例。由于只暴露部分基于栈实现的接口,所以可以提供安全的栈实现。

package junit;

import java.util.LinkedList;

/**
* 用LinkedList实现栈
*
* 队列和栈区别:队列先进先出,栈先进后出。
*
* @author 林计钦
* @version 1.0 Sep 5, 2013 11:24:34 PM
*/
public class Stack<T> {
private LinkedList<T> storage = new LinkedList<T>(); /** 入栈 */
public void push(T v) {
storage.addFirst(v);
} /** 出栈,但不删除 */
public T peek() {
return storage.getFirst();
} /** 出栈,删除 */
public T pop() {
return storage.removeFirst();
} /** 栈是否为空 */
public boolean empty() {
return storage.isEmpty();
} /** 打印栈元素 */
public String toString() {
return storage.toString();
} public static void main(String[] args) {
Stack stack=new Stack<String>();
stack.push("a");
stack.push("b");
stack.push("c");
//[c, b, a]
System.out.println(stack.toString());
//c--[c, b, a]
Object obj=stack.peek();
System.out.println(obj+"--"+stack.toString());
obj=stack.pop();
//c--[b, a]
System.out.println(obj+"--"+stack.toString());
//false
System.out.println(stack.empty());
}
}

2.使用java.util.Queue接口,其底层关联到一个LinkedList(双端队列)实例。由于只暴露部分基于队列实现的接口,所以可以提供安全的队列实现。

package junit;

import java.util.LinkedList;
import java.util.Queue; /**
* 用LinkedList实现队列
*
* 队列和栈区别:队列先进先出,栈先进后出。
*
* @author 林计钦
* @version 1.0 Sep 5, 2013 11:26:45 PM
*/
public class MyQueue<T> {
private Queue<T> storage = new LinkedList<T>(); /** 将指定的元素插入队尾 */
public void offer(T v) {
storage.offer(v);
} /** 检索,但是不移除队列的头,如果此队列为空,则返回 null */
public T peek() {
return storage.peek();
} /** 检索,但是不移除此队列的头 */
/** 此方法与 peek 方法的惟一不同是,如果此队列为空,它会抛出一个异常 */
public T element() {
return storage.element();
} /** 检索并移除此队列的头,如果队列为空,则返回 null */
public T poll() {
return storage.poll();
} /** 检索并移除此队列的头 */
/** 此方法与 poll 方法的不同在于,如果此队列为空,它会抛出一个异常 */
public T remove() {
return storage.remove();
} /** 队列是否为空 */
public boolean empty() {
return storage.isEmpty();
} /** 打印队列元素 */
public String toString() {
return storage.toString();
} public static void main(String[] args) {
MyQueue stack=new MyQueue<String>();
stack.offer("a");
stack.offer("b");
stack.offer("c");
//[a, b, c]
System.out.println(stack.toString()); Object obj=stack.peek();
// a--[a, b, c]
System.out.println(obj+"--"+stack.toString());
obj=stack.element();
// a--[a, b, c]
System.out.println(obj+"--"+stack.toString());
obj=stack.poll();
//a--[b, c]
System.out.println(obj+"--"+stack.toString());
obj=stack.remove();
//b--[c]
System.out.println(obj+"--"+stack.toString());
//false
System.out.println(stack.empty());
}
}

Java:基于LinkedList实现栈和队列的更多相关文章

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

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

  2. Java面试题:栈和队列的实现

    面试的时候,栈和队列经常会成对出现来考察.本文包含栈和队列的如下考试内容: (1)栈的创建 (2)队列的创建 (3)两个栈实现一个队列 (4)两个队列实现一个栈 (5)设计含最小函数min()的栈,要 ...

  3. LinkedList作为栈和队列的使用

    最近在LeekCode用java写一些算法时,经常遇到要使用栈和队列结构,使用栈的话,Stack已经不被推荐使用了,所以栈和队列我们通常都是用LinkedList这种双链表结构实现.Linkedlis ...

  4. java通过LinkedList实现堆栈和队列数据结构

    package shb.java.demo3; import java.util.LinkedList; public class TestLinkedList { /** * @author sha ...

  5. 纯数据结构Java实现(2/11)(栈与队列)

    栈和队列的应用非常多,但是起实现嘛,其实很少人关心. 但问题是,虽然苹果一直宣传什么最小年龄的编程者,它试图把编程大众化,弱智化,但真正的复杂问题,需要抽丝剥茧的时候,还是要 PRO 人士出场,所以知 ...

  6. Java 线性表、栈、队列和优先队列

    1.集合 2.迭代器 例子: 3.线性表 List接口继承自Collection接口,有两个具体的类ArrayList或者LinkedList来创建一个线性表 数组线性表ArrayList Linke ...

  7. Java中ArrayDeque,栈与队列

    package ch8; import java.util.*; /** * Created by Jiqing on 2016/11/27. */ public class ArrayDequeSt ...

  8. Java 用链表实现栈和队列

    栈 是一种基于后进先出(LIFO)策略的集合类型.当邮件在桌上放成一叠时,就能用栈来表示.新邮件会放在最上面,当你要看邮件时,会一封一封从上到下阅读.栈的顶部称为栈顶,所有操作都在栈顶完成. 前面提到 ...

  9. Java用链表实现栈和队列

    1.用链表实现栈 package stack; /** * * @author denghb * */ class Link { public long dData; public Link next ...

随机推荐

  1. zend studio导入svn项目后不能代码提示的解决

    把项目下.project的文件内容改成如下: <?xml version="1.0" encoding="UTF-8"?><projectDe ...

  2. C++ CTime COleTime的一些操作技巧

    strCString="2003-10-27 6:24:37"; //CString--->COleDateTime COleVariant vtime(strCString ...

  3. 在Eclipse中使用JUnit4进行单元测试(初级篇)

    首先,我们来一个傻瓜式速成教程,不要问为什么,Follow Me,先来体验一下单元测试的快感! 首先新建一个项目叫JUnit_Test,我们编写一个Calculator类,这是一个能够简单实现加减乘除 ...

  4. (PHP)程序中如何判断当前用户终端是手机等移动终端

    推荐: Mobile-Detect:https://github.com/serbanghita/Mobile-Detect/blob/master/Mobile_Detect.php Detect ...

  5. C# 进程间通信之二传递复杂数据类型(转)

    从C#下使用WM_COPYDATA传输数据说到Marshal的应用 笔者曾在一个项目的实施过程中,需要使用WM_COPYDATA在本地机器的两个进程间传输数据.在C++中实现非常简单,但在C#中实现时 ...

  6. oleDB 导入excel遇到的问题

    本地测试一切ok. 到服务器上测试各种报错,先装了office2010,又装了AccessDatabaseEngine,之后报"Microsoft Excel 不能访问文件 可能的原因有: ...

  7. 【解决】putty使用从AWS下载的private key登录失败

    在AWS启动一个实例时如果创建并下载了一个KeyPair的私钥(*.pem),则可以此私钥作为Credentials通过putty远程登录到这个实例系统.但在实际操作中,用putty登录时会提示如下错 ...

  8. apache配置Allow详解及25个常见问题

    http://www.cnblogs.com/top5/archive/2009/09/22/1571709.html apache常见25个问题:http://blog.csdn.net/keda8 ...

  9. Spark On YARN使用时上传jar包过多导致磁盘空间不够。。。

    今天测试过程中发现YARN Node变成Unhealthy了,后来定位到硬盘空间不够..... 通过查找大于100M的文件时发现有N多个spark-assembly-1.4.0-SNAPSHOT-ha ...

  10. ShellExecute 使用方法

    ShellExecute的功能是运行一个外部程序(或者是打开一个已注册的文件.打开一个目录.打印一个文件等等),并对外部程序有一定的控制. 有几个API函数都可以实现这些功能,但是在大多数情况下She ...