Java:基于LinkedList实现栈和队列
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实现栈和队列的更多相关文章
- Java数据结构和算法 - 栈和队列
Q: 栈.队列与数组的区别? A: 本篇主要涉及三种数据存储类型:栈.队列和优先级队列,它与数组主要有如下三个区别: A: (一)程序员工具 数组和其他的结构(栈.队列.链表.树等等)都适用于数据库应 ...
- Java面试题:栈和队列的实现
面试的时候,栈和队列经常会成对出现来考察.本文包含栈和队列的如下考试内容: (1)栈的创建 (2)队列的创建 (3)两个栈实现一个队列 (4)两个队列实现一个栈 (5)设计含最小函数min()的栈,要 ...
- LinkedList作为栈和队列的使用
最近在LeekCode用java写一些算法时,经常遇到要使用栈和队列结构,使用栈的话,Stack已经不被推荐使用了,所以栈和队列我们通常都是用LinkedList这种双链表结构实现.Linkedlis ...
- java通过LinkedList实现堆栈和队列数据结构
package shb.java.demo3; import java.util.LinkedList; public class TestLinkedList { /** * @author sha ...
- 纯数据结构Java实现(2/11)(栈与队列)
栈和队列的应用非常多,但是起实现嘛,其实很少人关心. 但问题是,虽然苹果一直宣传什么最小年龄的编程者,它试图把编程大众化,弱智化,但真正的复杂问题,需要抽丝剥茧的时候,还是要 PRO 人士出场,所以知 ...
- Java 线性表、栈、队列和优先队列
1.集合 2.迭代器 例子: 3.线性表 List接口继承自Collection接口,有两个具体的类ArrayList或者LinkedList来创建一个线性表 数组线性表ArrayList Linke ...
- Java中ArrayDeque,栈与队列
package ch8; import java.util.*; /** * Created by Jiqing on 2016/11/27. */ public class ArrayDequeSt ...
- Java 用链表实现栈和队列
栈 是一种基于后进先出(LIFO)策略的集合类型.当邮件在桌上放成一叠时,就能用栈来表示.新邮件会放在最上面,当你要看邮件时,会一封一封从上到下阅读.栈的顶部称为栈顶,所有操作都在栈顶完成. 前面提到 ...
- Java用链表实现栈和队列
1.用链表实现栈 package stack; /** * * @author denghb * */ class Link { public long dData; public Link next ...
随机推荐
- bzoj3316: JC loves Mkk
Description Input 第1行,包含三个整数.n,L,R.第2行n个数,代表a[1..n]. Output 仅1行,表示询问答案.如果答案是整数,就输出整数:否则,输出既约分数“P/Q”来 ...
- Asp.Net调试方法备忘
由于种种原因导致vs不能启用Web服务器调试.可用如下方法来执行调试. 1.在vs中选择 调试>启动不调试(ctr+f5), 2.设置你需调试的相关断点,然后选择 调试>进程.选择Aspn ...
- js api 实现钉钉免登
js api 实现钉钉免登,用于从钉钉微应用跳转到企业内部的oa,erp等,我刚刚实施完了我公司的这个功能,钉钉用起来还不错. 1 js api 实现钉钉免登,页面配置. <title>利 ...
- C++坑点集合 - 1 隐式调用和默认实现的构造函数的坑
C++是一个编译器会替你在背后做很多事情的语言,包括模板实例化,按需要创造隐式的构造函数,默认构造你没有显式构造的成员,按需进行隐式转换和饮食构造等等,如果没有彻底了解清楚,就容易被这些编译器背后做好 ...
- ADXL3xx: 读取 ADXL3xx 加速度传感器
原文链接:https://www.arduino.cc/en/Tutorial/ADXL3xx ADXL3xx加速度传感器 本教程将为你展示如何读取Analog Devices的ADXL3xx系列加速 ...
- DIJ产品系列
- pyqt5安装
花了一天时间,终于是装好了. 这东西硬是把我从Python2掰弯成了Python3 本来用pip安装了一个pyqt,但是后来才发现,这是个x64版本的. 我不知道啊! 我以为是还要装qt5 所以我把q ...
- MySQL中tinytext、text、mediumtext和longtext详解
一.数字类型 类型 范围 说明 Char(N) [binary] N=1~255 个字元binary :分辨大小写 固定长度 std_name cahr(32) not null VarChar( ...
- win32+ apache2.2 + tomcat7配置
首先已安装了apache2.2.22与tomcat7,并下载了相应的连接器文件mod_jk.so,存放于apache目录的modules下.我的电脑的安装路径如下:1.D:\server\Apache ...
- Android自动化学习笔记之MonkeyRunner:MonkeyRunner的录制和回放
---------------------------------------------------------------------------------------------------- ...