zoukankan      html  css  js  c++  java
  • 自定义栈的实现及使用两个栈模拟队列

    一,使用单链表实现栈

    ①栈需要一个栈顶指针

    ②栈的基本操作有出栈和入栈,以及判断栈是否为空

    ③单链表中每个结点表示一个栈元素,每个结点有指向下一个结点的指针。因此,在栈内部需要实现一个单链表。代码如下:

    public class Stack<T extends Comparable<? super T>>{
        private class Node{
            T ele;
            Node next;
            
            public Node(T ele) {
                this.ele = ele;
            }
        }
        
        Node top;//栈顶指针
        
        public void push(T ele){
            Node n = new Node(ele);
            n.next = top;
            top = n;
        }
        public T pop(){
            if(top != null)
            {
                Node tmp = top.next;
                T ele = top.ele;
                top.next = null;
                top = tmp;
                return ele;
            }
            return null;
        }
        
        public boolean isEmpty(){
            return top == null;
        }
    }

    二,使用两个栈实现队列

    ①栈是先进后出,而队列是先进先出。要实现队列,就需要实现队列的基本操作,并使基本操作满足先进先出的特点。

    这里需要两个栈,一个是enStack,当有元素入队列时,一律Push到这个栈中。另一个栈是deStack,当有元素出队列时:

    先检查deStack是否为空,若不为空,则从deStack中pop元素出去,作为出队列的元素。当deStack为空时,将enStack中的元素出栈,放push进deStack中,然后再从deStack中出栈。

    如果enStack 和 deStack 都为空,则出队列操作返回null,代码实现如下:

    public class MyQueue<T extends Comparable<? super T>> {
        private Stack<T> enStack;
        private Stack<T> deStack;
        
        public MyQueue() {
            enStack = new Stack<T>();
            deStack = new Stack<T>();
        }
        
        public void enqueue(T ele){
            enStack.push(ele);
        }
        
        public T dequeue(){
            if(!deStack.isEmpty())
            {
                return deStack.pop();
            }
            while(!enStack.isEmpty()){
                deStack.push(enStack.pop());
            }
            return deStack.pop();
        }
        
        public boolean isEmpty(){
            return enStack.isEmpty() && deStack.isEmpty();
        }
    }

    总结:不管是用栈模拟队列,还是用队列模拟栈,其本质都是如何一种数据结构的特性去实现另一种数据结构的特性。

  • 相关阅读:
    Windows 8 自带定时关机的4种实现方法
    Windows 7/8 自带定时关机命令
    将博客搬至CSDN
    【贪心】【POJ-3637】Shopaholic
    【贪心】【POJ-2437】Muddy roads
    【贪心】【POJ-1328&AOJ-195】Radar Installation
    【贪心】【POJ-1456】Supermarket
    【贪心】【HDOJ-1789】Doing Homework again
    【贪心】【POJ-1992】Ride to School
    【贪心】【POJ-1018】Communication System
  • 原文地址:https://www.cnblogs.com/hapjin/p/5635918.html
Copyright © 2011-2022 走看看