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;
            }
        }

  • 相关阅读:
    jmeter之Dummy Sampler
    【转载】Jmeter之Bean shell使用(二)
    jmeter的关联-正则表达式的应用
    启动Jmeter录制代理进行录制,报 jmeter.protocol.http.proxy.ProxyControl
    Jmeter的三个线程组
    python3进行3des的加密解密
    python连接kafka-2.0
    python读取kafka,输出到Vertica数据库
    pip下载保存Python包,pip离线安装
    阿里云kafka使用记录(python版本)
  • 原文地址:https://www.cnblogs.com/diggingdeeply/p/DoubleStackQueue_and_DoubleQueueStack.html
Copyright © 2011-2022 走看看