• 数据结构之栈


    (stack)是限定仅在表尾进行插入和删除操作的线性表。其特点是:”后进先出“或”先进后出“。

    一 标准库stack的使用

    (1)stack成员函数

    函数名 功能 复杂度
    size() 返回栈的大小 O(1)
    top() 返回栈顶元素 O(1)
    push(x) 向栈中添加元素 O(1)
    pop() 从栈中取出并删除元素 O(1)
    empty() 在栈为空时返回ture O(1)

    (2)示例

    #include "stdafx.h"
    #include<iostream>
    #include<stack>
    using namespace std;
    
    int main()
    {
        stack<int> S;
        S.push(3);
        S.push(7);
        S.push(1);
        cout << S.size() << " ";
        cout << S.top() << " ";
        S.pop();
        cout << S.top() << " ";
        S.pop();
        cout << S.top() << " ";
        S.push(5);
        cout << S.top() << " ";
        S.pop();
        cout << S.top() << endl;
    
        return 0;
    }

    二 C++实现栈

      数组实现的栈,能存储任意类型的数据

    #ifndef ARRAY_STACK_HXX
    #define ARRAY_STACK_HXX
    
    #include <iostream>
    #include "ArrayStack.h"
    using namespace std;
    
    template<class T> class ArrayStack{
        public:
            ArrayStack();
            ~ArrayStack();
    
            void push(T t);
            T peek();
            T pop();
            int size();
            int isEmpty();
        private:
            T *arr;
            int count;
    };
    
    // 创建“栈”,默认大小是12
    template<class T>
    ArrayStack<T>::ArrayStack() 
    {
        arr = new T[12];
        if (!arr) 
        {
            cout<<"arr malloc error!"<<endl;
        }
    }
    
    // 销毁“栈”
    template<class T>
    ArrayStack<T>::~ArrayStack() 
    {
        if (arr) 
        {
            delete[] arr;
            arr = NULL;
        }
    }
    
    // 将val添加到栈中
    template<class T>
    void ArrayStack<T>::push(T t) 
    {
        //arr[count++] = val;
        arr[count++] = t;
    }
    
    // 返回“栈顶元素值”
    template<class T>
    T ArrayStack<T>::peek() 
    {
        return arr[count-1];
    }
    
    // 返回“栈顶元素值”,并删除“栈顶元素”
    template<class T>
    T ArrayStack<T>::pop() 
    {
        int ret = arr[count-1];
        count--;
        return ret;
    }
    
    // 返回“栈”的大小
    template<class T>
    int ArrayStack<T>::size() 
    {
        return count;
    }
    
    // 返回“栈”是否为空
    template<class T>
    int ArrayStack<T>::isEmpty()
    {
        return size()==0;
    }
    
    #endif
  • 相关阅读:
    ios 分享腾讯微博
    ios 分享微信
    elinput 价格校验 大于0保留2位小数,不包含01,01.1这种
    从范闲到许乐,从宁缺再到陈长生
    二进制流 ajax 实现图片上传
    php 操作redis 部分命令
    matlab 与vs2008联合编程的设置备忘
    新型机器人闯入职场:到底是工作缔造者还是工作终结者?
    c++ vs2008 多线程编程的样例
    虚拟试衣创业公司Fitiquette被印度电商Myntra收购
  • 原文地址:https://www.cnblogs.com/xiaobingqianrui/p/8882027.html
Copyright © 2020-2023  润新知