zoukankan      html  css  js  c++  java
  • 双链表实现Queue

    算法导论第10章的东西,感觉用双链表真心简单,就是有点浪费空间,但是时间复杂度O(1):

    #include <stdio.h>
    
    struct LinkNode
    {
        LinkNode(): m_Value(-1)
            , m_pPreNode(NULL)
            , m_pNextNode(NULL)
        {
    
        }
        int m_Value;
        LinkNode* m_pPreNode;
        LinkNode* m_pNextNode;
    };
    class Queue
    {
    public:
        void Init()
        {
            m_pHeadNode = new LinkNode();
            m_pHeadNode->m_pNextNode = m_pHeadNode;
            m_pHeadNode->m_pPreNode = m_pHeadNode;
        }
        void DeEqueue()
        {
            if (m_pHeadNode->m_pPreNode == m_pHeadNode)
            {
                return ;
            }
    
            LinkNode* lpNode = m_pHeadNode->m_pNextNode;
            m_pHeadNode->m_pNextNode = lpNode->m_pNextNode;
            lpNode->m_pNextNode->m_pPreNode = m_pHeadNode;
    
            delete lpNode;
            lpNode = NULL;
        }
        int Tail()
        {
            LinkNode* lpTail = m_pHeadNode->m_pPreNode;
            if (lpTail != m_pHeadNode)
            {
                int lTop = lpTail->m_Value;
                printf("tail:%d
    ",lTop);
                return lTop;
            }
            return -1;
        }
        
        int Head()
        {
            LinkNode* lpHead = m_pHeadNode->m_pNextNode;
            if (lpHead != m_pHeadNode)
            {
                printf("Head:%d
    ",lpHead->m_Value);
                return lpHead->m_Value;
            }
            return -1;
        }
        void EnQueue(int aValue)
        {
            LinkNode* lpNewNode = new LinkNode();
            lpNewNode->m_Value = aValue;
    
            LinkNode* lpNode = m_pHeadNode->m_pPreNode;
            if (NULL == lpNode)
            {
                m_pHeadNode->m_pPreNode = lpNewNode;
                lpNewNode->m_pNextNode = m_pHeadNode;
                lpNewNode->m_pPreNode = m_pHeadNode;
                m_pHeadNode->m_pNextNode = lpNewNode;
            }
            else
            {
                m_pHeadNode->m_pPreNode = lpNewNode;
                lpNewNode->m_pNextNode = m_pHeadNode;
                lpNewNode->m_pPreNode = lpNode;
                lpNode->m_pNextNode = lpNewNode;
            }
        }
        void Print()
        {
            LinkNode* lpNode = m_pHeadNode->m_pNextNode;
            while(lpNode)
            {
                if (lpNode == m_pHeadNode)
                {
                    break;
                }
    
                printf("%d ",lpNode->m_Value);
                lpNode = lpNode->m_pNextNode;
            }
        }
    private:
        LinkNode* m_pHeadNode;
    };
    int main()
    {
        Queue lQueue;
        lQueue.Init();
        lQueue.EnQueue(1);
        lQueue.Head();
        lQueue.Tail();
        lQueue.EnQueue(2);
        lQueue.Head();
        lQueue.Tail();
        lQueue.EnQueue(4);
        lQueue.Head();
        lQueue.Tail();
        lQueue.DeEqueue();
        lQueue.Head();
        lQueue.Tail();
        lQueue.Print();
    }
  • 相关阅读:
    Grodno 2015 (Urozero May 2015 Day 5) D Triangles
    Flea Circus(Project Euler 213)
    Prime triplets (Project Euler 196)
    ACM 博弈(难)题练习 (第二弹)
    Crosses Puzzles zoj 4018 (zju校赛)
    Petrozavodsk Summer-2015. Ivan Smirnov Contest 1 B Bloom
    ACM 博弈(难)题练习 (第一弹)
    2017 ACM区域赛(南宁站) 参赛流水账
    2017 CCPC 杭州 流水账
    2017 ACM区域赛(西安) 参赛流水账
  • 原文地址:https://www.cnblogs.com/xiangshancuizhu/p/3280850.html
Copyright © 2011-2022 走看看