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;
        }
    };
  • 相关阅读:
    DirectX编译环境配置
    [转]unresolved external symbol __imp__PlaySoundA@12的解决方法
    Win7/Win8/Win10显示桌面按钮
    Win8中更改账户信息
    3D游戏图形引擎
    【整理】鼠标位置编码(Mouse Position Code)和鼠标激活返回值(MOUSEACTIVATE Return Codes)
    精简ICO图标可减小EXE程序文件大小
    【整理】SYSCOMMAND的wParam值的宏定义
    迅雷网速测试器 下载速率测试记录
    【整理】窗体消息(Window Messages) 的宏定义
  • 原文地址:https://www.cnblogs.com/tla001/p/6702974.html
Copyright © 2011-2022 走看看