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

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

    class StackBase {
    public:
        typedef int Elemtype;
        virtual Elemtype top()=0;
        virtual void push(Elemtype)=0;
        virtual void pop()=0;
        virtual int size()=0;
        virtual bool empty()=0;
    };
    class ArrStack: public StackBase {
    public:
        ArrStack() {
            maxSize = 3;
            increment = 2;
            curnums = 0;
            baseE = new Elemtype[maxSize];
            topE = baseE;
        }
        ~ArrStack() {
            delete[] baseE;
        }
        Elemtype top() {
            if (baseE == topE)
                return -1;
            return *(topE - 1);
        }
        int size() {
            return curnums;
        }
        void push(Elemtype e) {
            if (curnums >= maxSize) {
                Elemtype *temp = new Elemtype[maxSize + increment];
                memcpy(temp, baseE, curnums * sizeof(Elemtype));
                delete[] baseE;
                baseE = temp;
    //            for (int i = 0; i < curnums; i++)
    //                cout << baseE[i] << " ";
    //            cout << endl;
                topE = baseE + curnums;
                maxSize += increment;
            }
            *topE++ = e;
            curnums++;
        }
        void pop() {
            if (baseE == topE)
                return;
            topE--;
            curnums--;
        }
        bool empty() {
            if (curnums == 0)
                return true;
            else if (curnums > 0)
                return false;
            return false;
        }
    private:
        int maxSize;
        int curnums;
        int increment;
        Elemtype *baseE;
        Elemtype *topE;
    
    public:
        static void test() {
            ArrStack a;
            a.push(1);
            a.push(2);
            a.push(3);
            a.push(4);
            cout << "size: " << a.size() << endl;
            while (!a.empty()) {
                cout << a.top() << " ";
                a.pop();
            }
            cout << endl;
            cout << "size: " << a.size() << endl;
        }
    };
    class ListStack: public StackBase {
    public:
        struct ListNode {
            Elemtype val;
            ListNode *next;
            ListNode(Elemtype e) :
                    val(e), next(NULL) {
            }
        };
        ListStack() {
            topE = NULL;
            curnums = 0;
        }
        ~ListStack() {
    
        }
        Elemtype top() {
            if (topE == NULL)
                return -1;
            return topE->val;
        }
        void push(Elemtype e) {
            ListNode *tem = new ListNode(e);
            tem->next = topE;
            topE = tem;
            curnums++;
        }
        void pop() {
            if (curnums == 0)
                return;
            ListNode *tem = topE;
            topE = topE->next;
            delete tem;
            curnums--;
        }
        int size() {
            return curnums;
        }
        bool empty() {
            if (curnums == 0)
                return true;
            else if (curnums > 0)
                return false;
            return false;
        }
    private:
        int curnums;
        ListNode *topE;
    public:
        static void test() {
            ListStack a;
            a.push(1);
            a.push(2);
            a.push(3);
            a.push(4);
            cout << "size: " << a.size() << endl;
            while (!a.empty()) {
                cout << a.top() << " ";
                a.pop();
            }
            cout << endl;
            cout << "size: " << a.size() << endl;
        }
    };
  • 相关阅读:
    PAT 甲级 1120 Friend Numbers (20 分)
    AcWing 894. 拆分-Nim游戏
    AcWing 891. Nim游戏
    AcWing 892. 台阶-Nim游戏
    AcWing 893. 集合-Nim游戏
    洛谷P1433 吃奶酪
    洛谷P1118 [USACO06FEB]数字三角形`Backward Digit Su`…
    AcWing 125. 耍杂技的牛
    AcWing 104. 货仓选址 绝对值不等式
    AcWing 913. 排队打水 排序不等式贪心
  • 原文地址:https://www.cnblogs.com/tla001/p/6702974.html
Copyright © 2011-2022 走看看