zoukankan      html  css  js  c++  java
  • 两个由栈组成的队列和两个由队列组成的栈

    今天看《算法导论》看到两个如题的两个习题,遂做之。没有做参数检查以及异常处理,线程安全等。

    class DoubleStackQueue
        {
            private System.Collections.Stack stackA, stackB;

            public DoubleStackQueue()
            {
                stackA = new System.Collections.Stack();
                stackB = new System.Collections.Stack();
            }

            public void Enqueue(object obj)
            {
                stackA.Push(obj);
            }

            public object Dequeue()
            {
                while (stackA.Count != 0)
                    stackB.Push(stackA.Pop());

                return stackB.Pop();
                }
        }
     
    class DoubleQueueStack
        {
            private System.Collections.Queue queueA, queueB;

            public DoubleQueueStack()
            {
                queueA = new System.Collections.Queue();
                queueB = new System.Collections.Queue();
            }

            public void Push(object obj)
            {
                while (queueA.Count != 0)
                    queueB.Enqueue(queueA.Dequeue());
                queueA.Enqueue(obj);
                while (queueB.Count != 0)
                    queueA.Enqueue(queueB.Dequeue()); 
            }

            public object Pop()
            {
                return queueA.Dequeue();
            }
        }

    改进的:DoubleQueueStack

    class DoubleQueueStack
        {
            private System.Collections.Queue queueA, queueB;

            public DoubleQueueStack()
            {
                queueA = new System.Collections.Queue();
                queueB = new System.Collections.Queue();
            }

            public void Push(object obj)
            {
                if (queueA.Count == 0 && queueB.Count == 0)
                    queueA.Enqueue(obj);
                else
                {
                    if (queueA.Count == 0) queueB.Enqueue(obj);
                    else queueA.Enqueue(obj);
                }
            }

            public object Pop()
            {
                if (queueA.Count == 0)
                {
                    while (queueB.Count != 1)
                        queueA.Enqueue(queueB.Dequeue());
                    return queueB.Dequeue();
                }
                else if (queueB.Count == 0)
                {
                    while (queueA.Count != 1)
                        queueB.Enqueue(queueA.Dequeue());
                    return queueA.Dequeue();
                }
                return null;
            }
        }

  • 相关阅读:
    UNIX网络编程总结三
    UNIX网络编程总结二
    UNIX网络编程总结一
    KVM
    nginx+flask+gevent+uwsgi实现websocket
    Hypervisor
    JBPM4入门——4.封装流程管理的工具类(JbpmUtil)
    JBPM4入门——3.JBPM4开发环境的搭建
    JBPM4入门——2.在eclipse中安装绘制jbpm流程图的插件
    JBPM4入门——1.jbpm简要介绍
  • 原文地址:https://www.cnblogs.com/diggingdeeply/p/DoubleStackQueue_and_DoubleQueueStack.html
Copyright © 2011-2022 走看看