zoukankan      html  css  js  c++  java
  • (转)JAVA堆栈操作

    java.util.Queue用法(是util中的一个接口)

    队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。

    在队列这种数据结构中,最先插入的元素将是最先被删除的元素;反之最后插入的元素将是最后被删除的元素,因此队列又称为“先进先出”(FIFO—first in first out)的线性表。

    在java5中新增加了java.util.Queue接口,用以支持队列的常见操作。该接口扩展了java.util.Collection接口。

    Queue使用时要尽量避免Collection的add()和remove()方法,而是要使用offer()来加入元素,使用poll()来获取并移出元素。它们的优点是通过返回值可以判断成功与否,add()和remove()方法在失败的时候会抛出异常。 如果要使用前端而不移出该元素,使用
    element()或者peek()方法。

    值得注意的是LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用。

    import java.util.LinkedList;
    import java.util.Queue;
    
    public class QTest {
        public static void main(String[] args) {
            //add()和remove()方法在失败的时候会抛出异常(不推荐)
            Queue<String> queue = new LinkedList<String>();
            //添加元素
            queue.offer("a");
            queue.offer("b");
            queue.offer("c");
            queue.offer("d");
            queue.offer("e");
            for(String q : queue){
                System.out.println(q);
            }
            System.out.println("===");
            System.out.println("poll="+queue.poll()); //返回第一个元素,并在队列中删除
            for(String q : queue){
                System.out.println(q);
            }
            System.out.println("===");
            System.out.println("element="+queue.element()); //返回第一个元素 
            for(String q : queue){
                System.out.println(q);
            }
            System.out.println("===");
            System.out.println("peek="+queue.peek()); //返回第一个元素 
            for(String q : queue){
                System.out.println(q);
            }
            
        }
    }
    运行结果
    a
    b
    c
    d
    e
    ===
    poll=a
    b
    c
    d
    e
    ===
    element=b
    b
    c
    d
    e
    ===
    peek=b
    b
    c
    d
    e
    具体情况可以参考api文档

    Java堆栈类使用实例(java中stack的使用方法)


    java中stack的使用方法,堆栈是一种"后进先出"(LIFO) 的数据结构, 只能在一端进行插入(称为"压栈") 或删除 (称为"出栈")数据的操作,下面看示例吧
    复制代码 代码如下:

     

    JAVA 中,使用 java.util.Stack 类的构造方法创建对象。

     public class Stack extends vector

     构造方法 : public Stack() 创建一个空 Stack,一般使用泛型

    方法:  1. public push  (item )  把项 压入栈顶。其作用与 addElement (item ) 相同。

    参数 item 压入栈顶的项 。 返回: item 参数 ;

    2. public pop () 移除栈顶对象,并作为函数的值 返回该对象。

    返回:栈顶对象(Vector 对象的中的最后一项)。

    抛出异常 : EmptyStackException 如果堆栈式空的 。。。

    3. public peek() 查看栈顶对象而不移除它。。

    返回:栈顶对象(Vector 对象的中的最后一项)。

    抛出异常 : EmptyStackException 如果堆栈式空的 。。。

    4. public boolean empty (测试堆栈是否为空。)  当且仅当堆栈中不含任何项时 返回 true,否则 返回 false.

    5. public int search  (object o)  返回对象在堆栈中位置, 以 1 为基数, 如果对象 o是栈中的一项,该方法返回距离 栈顶最近的出现位置到栈顶的距离; 栈中最上端项的距离为 1 。 使用equals 方法比较 o 与 堆栈中的项。。。  

    参数: o 目标对象;(暂定元素的位置为1)

     


    import java.util.*;
    
    
    public class StackTest {
    
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            Stack stack = new Stack(); // 创建堆栈对象 
            System.out.println("11111, absdder, 29999.3 三个元素入栈"); 
            stack.push(new Integer(11111)); //向 栈中 压入整数 11111
            printStack(stack);  //显示栈中的所有元素
    
    
            stack.push("absdder"); //向 栈中 压入
            printStack(stack);  //显示栈中的所有元素
    
    
            stack.push(new Double(29999.3)); //向 栈中 压入
            printStack(stack);  //显示栈中的所有元素
    
    
            String s = new String("absdder");
            System.out.println("元素absdder在堆栈的位置"+stack.search(s));      
            System.out.println("元素11111在堆栈的位置"+stack.search(11111));
    
    
            System.out.println("11111, absdder, 29999.3 三个元素出栈"); //弹出 栈顶元素 
            System.out.println("元素"+stack.pop()+"出栈");
            printStack(stack);  //显示栈中的所有元素
            System.out.println("元素"+stack.pop()+"出栈");
            printStack(stack);  //显示栈中的所有元素
            System.out.println("元素"+stack.pop()+"出栈");
            printStack(stack);  //显示栈中的所有元素
    
    
     
        }
    
    
        private static void printStack(Stack<Integer> stack ){
            if (stack.empty())
                System.out.println("堆栈是空的,没有元素");
                else {
                    System.out.print("堆栈中的元素:");
                    Enumeration items = stack.elements(); // 得到 stack 中的枚举对象 
                    while (items.hasMoreElements()) //显示枚举(stack ) 中的所有元素
                        System.out.print(items.nextElement()+" ");
                }
            System.out.println(); //换行
        }
        
        //使用for循环的方式遍历栈是很方便的(第二种方法)
        private static void printStack2(Stack<Object> stack ){
            if (stack.empty())
                System.out.println("堆栈是空的,没有元素");
                else {
                    System.out.print("堆栈中的元素:");
                    for(Object o: stack){
                    <span style="white-space:pre">	</span> System.out.print(o+" ");
                    }
            System.out.println(); //换行
           }
        }
    }
    

    运行结果

    11111, absdder, 29999.3 三个元素入栈

    堆栈中的元素:11111

    堆栈中的元素:11111 absdder 

    堆栈中的元素:11111 absdder 29999.3 

    元素absdder在堆栈的位置2

    元素11111在堆栈的位置3

    11111, absdder, 29999.3 三个元素出栈

    元素29999.3出栈

    堆栈中的元素:11111 absdder 

    元素absdder出栈

    堆栈中的元素:11111 

    元素11111出栈

    堆栈是空的,没有元素


  • 相关阅读:
    oracle 11g完全彻底的卸载
    Windows添加.NET Framework 3.0 NetFx3 失败
    Crontab中的除号(slash)到底怎么用?
    Codeigniter文件上传类型不匹配错误
    Mac下遇到 'reading initial communication packet’ 问题
    使用PHP的正则抓取页面中的网址
    关于Advertising Campaign
    20个Linux服务器安全强化建议(三)
    20个Linux服务器安全强化建议(二)
    20个Linux服务器安全强化建议(一)
  • 原文地址:https://www.cnblogs.com/lixuwu/p/5676152.html
Copyright © 2011-2022 走看看