zoukankan      html  css  js  c++  java
  • Java实现数据结构栈stack和队列Queue

    Java实现数据结构栈stack和队列Queue

    Google后发现大多数文章都是通过LinkedList类实现,当然JDK有自带的Stack

     

    回顾JDK提供的集合类

    容器(集合)框架如下: 

    集合类存放于java.util包中。集合类存放的都是对象的引用,而非对象本身。

    集合类型主要有3种:set(集)、list(列表)和map(映射)

    Collection接口

    List 接口

    │├LinkedList 链表

    │├ArrayList 顺序结构动态数组类

    │└Vector 向量

    Stack

    Map接口

    Hashtable

    HashMap

    Set接口

     Collection<--Set<--HashSet

     Collection<--Set<--HashSet<--LinkedHashSet

     Collection<--Set<--SortedSet(也是接口)<--TreeSet

     

    LinkedList, 查阅JDK

    List接口的链表列表实现。实现所有可选的列表操作,并且允许所有元素(null)

    LinkedList类还为在列表的开头及结尾get,removeinsert元素提供了统一的命名方法。这些操作允许将链接列表用作堆栈,队列或双端队列

    注意此实现不是同步的

     

    JDK本身提供的Stack

    提供了通常的pushpop操作,以及取堆栈顶点的peek方法,测试堆栈是否为空的empty方法,在堆栈中查找项并确定离栈顶的距离,共五个方法。

    JDK中实现这个类本身继承自Vector这个类(since JDK1.0)

     

    数据结构中 栈的定义及基本运算

    栈和队列都属于线性结构,是两种在运算上受到某些限制的特殊线性表,他们比一般线性表更简单。

    (stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,称为栈顶(top),另一端为固定的一端,称为栈底

    栈顶,栈底,空栈,栈的特性,

    退栈,进栈

    栈的运算:

    初始化栈,进栈push,出栈pop,,取栈顶元素(即是查看下一个要出栈的元素,也叫peek),判断空

     

    LinkedList实现stack

    其实主要是实现 进栈push,出栈pop,,取栈顶元素这几个方法

     

    package org.simoncook.examtest;

     

    import java.util.LinkedList;

     

    public class MyStack {

           

            private LinkedList ll = new LinkedList();

           

            public void push(Object obj){

                    //将指定元素插入此列表的开头。

                    ll.addFirst(obj);

            }

           

            public Object pop(){

                    //移除并返回此列表的第一个元素.

                    return ll.removeFirst();

            }

           

            public Object peek(){

                    // 返回此列表的第一个元素。

                    return ll.getFirst();

            }

           

            public boolean empty(){

                    return ll.isEmpty();

            }

    }

     

    数据结构队列

    参考

    http://blogger.org.cn/blog/more.asp?name=eaglebetter&id=17232

    队列(Queue)的定义

    队列的特性队列的实例队 列的基本运算
    1 入队操作:InQueueqx
    2)出队操作:OutQueueqx
    3)读队头元 素:ReadFrontqx
    4)显示队列中元素ShowQueueq
    5)判队空操作:QEmptyq
    6)判 队满操作:QFullq
    7)求队列长度Qlenq

     

    实现代码:
    package com.gc.list;
    import java.util.*;
    public class MyQueue {

     private LinkedList ll=new LinkedList();
    //
    入队操作
     public void put(Object o){
      ll.addLast(o);
     }
     //
    使用removeFirst()方法,返回队列中第一个数据,然后将它从队列 中删除
    //
    出队操作
     public Object get(){
      return ll.removeFirst();
     }
     
     public boolean empty(){
      return ll.isEmpty();
     }

     

    Java???u??stackM?CQueue
    GoogleZ??jh?Oq?LinkedList???A?MJDK?Stack?

    ^?JDKX?
    e]X^[pUG
    X?s_java.util]CX?sO?HAD?HC
    X?Dn3Gset(^Blist(C^Mmap(Mg)C
    Collectionf
    uList f
    xuLinkedList ?
    xuArrayList ???????
    x|Vector Vq
    x |Stack ?
    Mapf
    uHashtable
    uHashMap
    |Setf
     Collection<--Set<--HashSet
     Collection<--Set<--HashSet<--LinkedHashSet
     Collection<--Set<--SortedSet]]Of^<--TreeSet

    LinkedList, d?JDK
    Listf?C??C??i?C@A}B?(]null)
    LinkedList???bC???get,removeMinsertF?@RWkC?@???C@?A?C??C
    `N??OPB

    JDKStack?
    Fq`pushMpop@AH???peekkA???O_?emptykAb?d?}w??ZA@?kC
    JDK??????Vector???(since JDK1.0)

    ?u? ?w??
    ?M?C?_??AO?b?WYS?AL?@???C
    ?(stack)O?JM?ub?P@?@S?C?JM?@A????(top)At@?Tw@A???
    ??A?A?A?SA
    h?A??
    ??:
    l?A??pushAX?popAA??]YOdU@?nX?A]speek^AP?

    LinkedList??stack
    ?DnO?? ??pushAX?popAA???L?k

    package org.simoncook.examtest;

    import java.util.LinkedList;

    public class MyStack {
        
        private LinkedList ll = new LinkedList();
        
        public void push(Object obj){
            //?wJC??C
            ll.addFirst(obj);
        }
        
        public Object pop(){
            //}^C@?.
            return ll.removeFirst();
        }
        
        public Object peek(){
            // ^C@?C
            return ll.getFirst();
        }
        
        public boolean empty(){
            return ll.isEmpty();
        }
    }

    ?u??C
    ?http://blogger.org.cn/blog/more.asp?name=eaglebetter&id=17232
    ?C]Queue^w?
    ?CS?C?? C?
    ]1^ J?@GInQueue]qAx^
    ]2^X?@GOutQueue]qAx^
    ]3^??? GReadFront]qAx^
    ]4^??CShowQueue]q^
    ]5^P?@GQEmpty]q^
    ]6^P ??@GQFull]q^
    ]7^D?C?Qlen]q^

    ??N?G
    package com.gc.list;
    import java.util.*;
    public class MyQueue {
     private LinkedList ll=new LinkedList();
    //J?@
     public void put(Object o){
      ll.addLast(o);
     }
     //removeFirst()kA^?C@??uAMZ???C ?
    //X?@
     public Object get(){
      return ll.removeFirst();
     }
     
     public boolean empty(){
      return ll.isEmpty();
     }

  • 相关阅读:
    2012工作计划!
    造船篇系统实施(新老衔接工作)
    Android学习摘要一之Android历史
    DEVReport控件使用方法
    造船篇 前传
    软件实施(1)
    茫然疑问未来
    造船篇钢材管理
    wcf身份验证问题
    IDL中关于波段计算的问题
  • 原文地址:https://www.cnblogs.com/simoncook/p/1719333.html
Copyright © 2011-2022 走看看