双端队列

 

双端队列(deque,全名double-ended queue)是一种具有队列和栈性质的数据结构。双端队列中的元素可以从两端弹出,插入和删除操作限定在队列的两边进行。

http://baike.baidu.com/view/1627726.htm
http://www.cnblogs.com/silence250627170/archive/2011/07/24/2115692.html

 

扩展阅读:
1.http://docs.oracle.com/javase/6/docs/api/java/util/Deque.html
http://man.lupaworld.com/content/develop/JDK_6.0_API_html_zh_CN/html/zh_CN/api/java/util/class-use/Deque.html(中文版)

2.Collection之双端队列与优先级队列(Priority queue):http://chensl.iteye.com/blog/756377

习题:
 题目:
   ⑴ 求1,2,3,4的一个排列,它能够通过一个输入受限的双端队列得到,但不能通过
   输出受限的双端队列得到;⑵求通过输出受限的双端队列可以得到但通过输入受限的双
   端队列不可能得到的1,2,3,4的一个排列;⑶求通过输入受限的双端队列不可能得到,
   通过输出受限的双端队列也不可能得到的1,2,3,4的一个排列。
 说明:
   •摘自第1卷P231T7。
   •题的难易程度:[25]。
   •相关习题如下:
   1.是否有使用既非输入受限也非输出受限的双端队列不可能得到的12…n的排列?
    •摘自原书P231T8。
    •题的难易程度:[22]。
   2.设bn是通过使用输入受限的双端队列可以得到的n个元素的排列个数。
    证明bn 也是通过使用输出受限的双端队列可以得到的n个元素的排列个数。

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
/* * 基于双向链表实现双端队列结构 */ package dsa; public class Deque_DLNode implements Deque { protected DLNode header;//指向头节点(哨兵) protected DLNode trailer;//指向尾节点(哨兵) protected int size;//队列中元素的数目 //构造函数 public Deque_DLNode() { header = new DLNode(); trailer = new DLNode(); header.setNext(trailer); trailer.setPrev(header); size = 0; } //返回队列中元素数目 public int getSize() { return size; } //判断队列是否为空 public boolean isEmpty() { return (0 == size) ? true : false; } //取首元素(但不删除) public Object first() throws ExceptionQueueEmpty { if (isEmpty()) throw new ExceptionQueueEmpty("意外:双端队列为空"); return header.getNext().getElem(); } //取末元素(但不删除) public Object last() throws ExceptionQueueEmpty { if (isEmpty()) throw new ExceptionQueueEmpty("意外:双端队列为空"); return trailer.getPrev().getElem(); } //在队列插入新节点 public void insertFirst(Object obj) { DLNode second = header.getNext(); DLNode first = new DLNode(obj, header, second); second.setPrev(first); header.setNext(first); size++; } //在队列插入新节点 public void insertLast(Object obj) { DLNode second = trailer.getPrev(); DLNode first = new DLNode(obj, second, trailer); second.setNext(first); trailer.setPrev(first); size++; } //删除首节点 public Object removeFirst() throws ExceptionQueueEmpty { if (isEmpty()) throw new ExceptionQueueEmpty("意外:双端队列为空"); DLNode first = header.getNext(); DLNode second = first.getNext(); Object obj = first.getElem(); header.setNext(second); second.setPrev(header); size--; return(obj); } //删除末节点 public Object removeLast() throws ExceptionQueueEmpty { if (isEmpty()) throw new ExceptionQueueEmpty("意外:双端队列为空"); DLNode first = trailer.getPrev(); DLNode second = first.getPrev(); Object obj = first.getElem(); trailer.setPrev(second); second.setNext(trailer); size--; return(obj); } //遍历 public void Traversal() { DLNode p = header.getNext(); while (p != trailer) { System.out.print(p.getElem()+" "); p = p.getNex
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值