zoukankan      html  css  js  c++  java
  • 常用数据结构之队列

    使用数组和链表实现两种队列结构

    class BaseQueue {
    public:
        typedef int Elemtype;
        virtual Elemtype front()=0;
        virtual void push(Elemtype)=0;
        virtual void pop()=0;
        virtual int size()=0;
        virtual bool empty()=0;
    };
    class ArrQueue: public BaseQueue {
    public:
        ArrQueue() {
            maxSize = 5;
            curnums = 0;
            elems = new Elemtype[maxSize];
            frontIndex = tailIndex = 0;
        }
        ~ArrQueue() {
            delete[] elems;
        }
        Elemtype front() {
            if (empty())
                return -1;
            return elems[frontIndex % maxSize];
        }
        void push(Elemtype e) {
            if (frontIndex == (tailIndex + 1) % maxSize)
                return;
            elems[tailIndex] = e;
            tailIndex = (tailIndex + 1) % maxSize;
            curnums++;
        }
        void pop() {
            if (empty())
                return;
            frontIndex = (frontIndex + 1) % maxSize;
            curnums--;
        }
        int size() {
            return curnums;
        }
        bool empty() {
            if (frontIndex == tailIndex)
                return true;
            else
                return false;
        }
    private:
        Elemtype *elems;
        int maxSize;
        int curnums;
        int frontIndex;
        int tailIndex;
    public:
        static void test() {
            ArrQueue a;
            a.push(1);
            a.push(2);
            a.push(3);
            a.push(4);
            cout << "size: " << a.size() << endl;
            while (!a.empty()) {
                cout << a.front() << " ";
                a.pop();
            }
            cout << endl;
            cout << "size: " << a.size() << endl;
        }
    };
    class ListQueue: public BaseQueue {
    public:
        struct ListNode {
            Elemtype val;
            ListNode *next;
            ListNode(Elemtype e) :
                    val(e), next(NULL) {
            }
        };
        ListQueue() {
            head = NULL;
            tail = NULL;
            curnums = 0;
        }
        ~ListQueue() {
            while (head) {
                ListNode *node = head;
                head = head->next;
                delete node;
            }
        }
        Elemtype front() {
            if (head == NULL)
                return -1;
            return head->val;
        }
        void push(Elemtype e) {
            ListNode *node = new ListNode(e);
            if (head == NULL) {
                head = node;
                tail = head;
            } else {
                tail->next = node;
                tail = tail->next;
            }
            curnums++;
        }
        void pop() {
            if (head == NULL)
                return;
            ListNode *node = head;
            head = head->next;
            delete node;
            curnums--;
        }
        int size() {
            return curnums;
        }
        bool empty() {
            if (head == NULL)
                return true;
            else
                return false;
        }
    private:
        ListNode *head;
        ListNode *tail;
        int curnums;
    
    public:
        static void test() {
            ListQueue a;
            a.push(1);
            a.push(2);
            a.push(3);
            a.push(4);
            cout << "size: " << a.size() << endl;
            while (!a.empty()) {
                cout << a.front() << " ";
                a.pop();
            }
            cout << endl;
            a.push(4);
            cout << "size: " << a.size() << endl;
        }
    };
  • 相关阅读:
    pycharm路径
    git常用命令
    分页
    router
    视图集
    Leanring TypeScript 中文版
    RXJS 系列 04
    RXJS 系列 03
    RXJS 系列 02
    RXJS 系列 01
  • 原文地址:https://www.cnblogs.com/tla001/p/6702951.html
Copyright © 2011-2022 走看看