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 ...
随机推荐
- [LeetCode] 10. Regular Expression Matching
Implement regular expression matching with support for '.' and '*'. DP: public class Solution { publ ...
- Building GCC 4.1.2 in CentOS 7 for Maya API development
Following the official guid: http://help.autodesk.com/cloudhelp/2015/ENU/Maya-SDK/files/Setting_up_y ...
- C#开发分享:如何改变系统鼠标样式
开发过程中发现需要用到改变鼠标样式(就是光标的样子),但是在网上找了很多资料,都是介绍在程序中使用,我需要的效果时在系统级使用.现在找到了,分享给大家. [DllImport("user32 ...
- javascript slice
定义和用法 slice() 方法可提取字符串的某个部分,并以新的字符串返回被提取的部分. 语法 stringObject.slice(start,end) 参数 描述 start 要抽取的片断的起始下 ...
- EventBus--介绍
注意: 1,post()方法里面的类型和onEvent()中的类型要一致., 2,订阅者对象中 必须有 onEvent 的 public 方法 ---public void onEvent(O ...
- 【转】EXCEL不显示科学计数法
源地址:http://jingyan.baidu.com/article/e4d08ffdcc304e0fd3f60d69.html 2法无效,不知道为何
- 利用外部表查询alert日志中的ora错误
SQL> show parameter dump NAME TYPE VALUE------------------ ...
- 开源免费的天气预报接口API以及全国所有地区代码(国家气象局提供)
天气预报一直是各大网站的一个基本功能,最近小编也想在网站上弄一个,得瑟一下,在网络搜索了很久,终于找到了开源免费的天气预报接口API以及全国所有地区代码(国家气象局提供),具体如下: 国家气象局提供的 ...
- EA中的模板管理
EA在导出文档的时候可以选择各种模板. 使用系统提供的模板导出的文档会稍显繁杂.这时候就需要我们自定义模板. 1. 在导出文档的dialog, 在Template一项中选择 New Template. ...
- C# 打开指定目录并定位到文件
private void OpenFolderAndSelectFile(String fileFullName) { System.Diagnostics.ProcessStartInfo psi ...