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 ...
随机推荐
- VR全景项目外包团队— VR/AR相关领域介绍和VR全景案例
VR/AR相关领域这里我要说的一点就是硬件.诚然,硬件的确很难搞,国内在这方面就是荒漠,所以,如果你有信心,完全可以开拓一片蓝海.注意我是说真正的硬件,那些把Google的纸盒子拿来改改就能融资千万的 ...
- easyUI+mvc权限管理后台
通过按钮和菜单,组合成基本的功能,菜单的功能可以编码修改,但浏览功能是菜单基本的入口,只有角色赋予了浏览功能,才能访问. 基本按钮表 菜单模块 菜单分配按钮 角色授权 下面是对一张表的基本操作 模型 ...
- 解析PHP正则提取或替换img标记属性
<?php/*PHP正则提取图片img标记中的任意属性*/$str = '<center><img src="/uploads/images/20100516000. ...
- WPF DataGrid常用属性记录
WPF DataGrid常用属性记录 组件常用方法: BeginEdit:使DataGrid进入编辑状态. CancelEdit:取消DataGrid的编辑状态. CollapseRowGroup:闭 ...
- Retina Display and Eclipse Mac视网膜屏和Eclipse
I have a Retina Display and Eclipse looks blurry. How can I fix it? You need to tell Mac OS that Ecl ...
- 火车采集器 帝国CMS7.2免登录发布模块
帝国cms7.2增加了金刚模式,登录发布有难度.免登录发布模块配合火车采集器,完美解决你遇到的问题. 免登录直接获取栏目列表 通过文件内设置密码免登录发布数据 帝国cms7.2免登陆文章发布接口使用说 ...
- Hibernate之即时更新
昨天工作中遇到了一个简单的问题,弄了好久,都怪自己没有好好的去了解hibernate,导致了这样的问题弄了两三个小时. 问题是这样的:我想即时更改数据,然后再查询 (1)用Spring的getHibe ...
- JavaScript笔记:变量及其作用域
一.变量的定义及声明 在javascript中变量仅仅是用来保存值的一个占位符而已,定义变量时要使用关键字var后跟一个变量名,如下所示: var message; //定义一个变量message,像 ...
- Scorpio-CSharp简介
Scorpio-CSharp是为了解决Unity游戏各个平台热更新的问题,纯c#实现 基于.net2.0 兼容所有c#平台 语法类似 javascript, 设计初衷是为了做一个所有人都能修改的热更新 ...
- Xmodem Bootloader
了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 多年前玩Cisco交换 ...