算法学习之基础(背包 列队 栈) 习题1.3.33泛型双向队列

前几天写的。。

  1 package gh;
  2
  3 import java.util.Iterator;
  4
  5 /**
  6  * 泛型双向队列(双向链表实现)
  7  * @author ganhang
  8  *
  9  */
 10 public class Deque<T> implements Iterable<T> {
 11     private Node first;
 12     private Node last;
 13     private int n=0;
 14     public Deque(){
 15
 16     }
 17     //从左边加入
 18     public void pushLeft(T item) {
 19         if (first == null) {
 20             first=new Node(item);
 21             last=first;
 22         }else{
 23             Node oldfirst = first;
 24             first=new Node(item);
 25             first.next=oldfirst;
 26             oldfirst.pre=first;
 27         }
 28         n++;
 29     }
 30     //从右边加入
 31     public void pushRight(T item){
 32         if(last==null){
 33             last=new Node(item);
 34             first=last;
 35         }else{
 36             Node oldlast=last;
 37             last=new Node(item);
 38             oldlast.next=last;
 39             last.pre=oldlast;
 40         }
 41         n++;
 42     }
 43     //从左边弹出一个元素
 44     public T popLeft() {
 45         if (first != null) {
 46             T item = first.item;
 47             first = first.next;
 48             n--;
 49             return item;
 50         }
 51         return null;
 52     }
 53     //从右边弹出一个元素
 54     public T popRight(){
 55         if(last!=null){
 56             T item=last.item;
 57             last=last.pre;
 58             n--;
 59             return item;
 60         }
 61         return null;
 62     }
 63     public int size(){
 64         return n;
 65     }
 66     public boolean isEmpty(){
 67         return n==0;
 68     }
 69     private class Node{
 70         private T item;
 71         private Node pre;
 72         private Node next;
 73         public Node(T item){
 74             this.item=item;
 75         }
 76     }
 77     @Override
 78     public Iterator<T> iterator() {
 79         // TODO Auto-generated method stub
 80         return new DequeIterator();
 81     }
 82     private class DequeIterator implements Iterator<T>{
 83         private Node current=first;
 84         @Override
 85         public boolean hasNext() {
 86             // TODO Auto-generated method stub
 87             return current!=null;
 88         }
 89
 90         @Override
 91         public T next() {
 92             // TODO Auto-generated method stub
 93             T item=current.item;
 94             current=current.next;
 95             return item;
 96         }
 97
 98         @Override
 99         public void remove() {
100             // TODO Auto-generated method stub
101
102         }
103
104     }
105
106 }

测试

Deque<String> d=new Deque<String>();
        d.pushLeft("a");
        d.pushLeft("b");
        d.pushLeft("c");
        d.pushLeft("d");
        d.pushRight("1");
        d.pushRight("2");
        d.pushRight("3");
        d.pushRight("4");
        while(!d.isEmpty()){
            System.out.println(d.popRight());
        }
        System.out.println("-----------");
        for(String s:d)
        System.out.println(s);

输出

4
3
2
1
a
b
c
d
-----------
d
c
b
a
1
2
3
4

时间: 2024-08-03 07:54:01

算法学习之基础(背包 列队 栈) 习题1.3.33泛型双向队列的相关文章

算法学习之基础(背包 列队 栈) 习题1.3.34随机背包的实现

背包的API void add() int size() boolean isEmpty() 背包的遍历用Iterator 代码. 1 package gh; 2 3 import java.util.Iterator; 4 /** 5 * 随机背包 6 * @author ganhang 7 * 8 * @param <T> 9 */ 10 public class RandomBag<T>implements Iterable<T> { 11 private int

算法学习 - 后缀表达式 (C++ 栈实现)

后缀表达式就是把一个式子进行树的后序遍历.然后根据这个顺序来求值. 栈来实现的时候很简单. 例如中缀表达式:6 * [ 5 + ( 2 + 3 )  * 8 + 3 ] 则 后缀表达式为:6 5 2 3 + 8 * + 3 + * 下面上代码: // // main.cpp // postfixExpression // // Created by Alps on 14-7-28. // Copyright (c) 2014年 chen. All rights reserved. // #inc

数据结构与算法学习 第1季03 栈 队列 树 图

2015年学习计划安排: http://www.cnblogs.com/cyrus-ho/p/4182275.html 栈:LIFO的线性表 队列:FIFO的线性表 树:(递归定义)n个结点的有穷集合,对非空树,有且仅有一个称为根的结点,n>1时,其余结点分为m个互不相交的有限集,而每一个集合本身也是一棵树,并称为根的子树 图:任意两个数据元素之间都可以存在关系的组织结构 二叉树的存储:可以选择用多重链表的数据结构 二叉树的遍历:先序,中序,后序 图的存储:邻接矩阵(不适于存储稀疏图)与邻接表

数据结构和算法学习总结04 线性表---栈

栈 栈(Stack)是特殊的线性表,是只允许在一端进行插入和删除的线性表. 允许插入和删除的叫栈顶,反之则是栈底. 栈的插入称为进栈,删除称为出栈. 特性是:后进先出,所以栈也叫后进先出表,简称LIFO表(Last In First Out). 因为栈是线性表,所以也有顺序表和链表两种形式,一般我们常用顺序表. 从代码中可以看出:与顺序表相比实际上就是插入和删除操作发生了改变. #include <iostream> using namespace std; const int Stack_S

算法学习记录-栈的应用--表达式运算

前面做了栈的基本操作 总感觉需要做一个实际的例子来检验一下. 这里我将用栈来做一个简单的四则运算. 目标比较简单: 做一个带小括号(“()”)的四则运算,如果要加入到中括号(“[]”)或者大括号(“{}”),依次类推. 求一个表达式: 用下面这个算是做例子,程序最后应该可以算出任何带小括号的运算. 3+(32-6)*9+5*3-(3*(65-15)/5)+12; 方法一:后缀法. 1.了解中缀和后缀表示法 中缀表示法:刚才的那个算是就是中缀表示法,我们通常看到的数学符号就是中缀表示法,即数字在计

算法学习 - 括号匹配(栈实现)C++

括号匹配是栈最典型的应用了. 其实思路很简单,就是遇到一个左括号就压栈,遇到一个右括号就弹栈,看是否匹配就好了.最后检查下栈里是不是有剩余的括号就行了. 上代码~: // // main.cpp // bracketMatch // // Created by Alps on 14-7-28. // Copyright (c) 2014年 chen. All rights reserved. // #include <iostream> #define ElementType char usi

算法学习_栈

以蓝书为学习参考,进行的栈的学习 例题1: 实现一个栈,支持Push,Pop和GetMin(查询栈中最小的值)在O(1)完成 算法实现思路:建立两个栈,A存原本的数据,B存以栈底开头的每段数据的最小值 Push(X),在A中插入X,在B中插入min(B的栈顶数据,X).执行GetMin只需要输出B.top()即可 例题2: Input 8 I 2 I -1 I 1 Q 3 L D R Q 2 Output 2 3 //对顶栈算法 #include <bits/stdc++.h> using n

大数据系统学习零基础入门到精通加项目实战2017最新全套视频教程

38套大数据,云计算,架构,数据分析师,Hadoop,Spark,Storm,Kafka,人工智能,机器学习,深度学习,项目实战视频教程 视频课程包含: 38套大数据和人工智能精品高级课包含:大数据,云计算,架构,数据挖掘实战,实时推荐系统实战,电视收视率项目实战,实时流统计项目实战,离线电商分析项目实战,Spark大型项目实战用户分析,智能客户系统项目实战,Linux基础,Hadoop,Spark,Storm,Docker,Mapreduce,Kafka,Flume,OpenStack,Hiv

算法学习 - 表达树的建立(后缀表达式法),树的先序遍历,中序遍历,后序遍历

表达树就是根据后缀表达式来建立一个二叉树. 这个二叉树的每个叶子节点就是数,真祖先都是操作符. 通过栈来建立的,所以这里也会有很多栈的操作. 树的先序遍历,中序遍历,后序遍历的概念我就不讲了,不会的自行百度,不然也看不懂我的代码. 下面是代码: // // main.cpp // expressionTree // // Created by Alps on 14-7-29. // Copyright (c) 2014年 chen. All rights reserved. // #includ