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

    (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
  • 相关阅读:
    JS实现动态生成表格并提交表格数据向后端 表格中数据转为json
    JS 添加和删除HTML 标签
    操作系统杂碎
    bootstrap3级下拉菜单 及 CSS实现三级下拉菜单分析
    jquery获取复选框被选中的值
    Mac 命令行启动并连接Redis
    抓包工具不抓包的话记得看看还有没有没关的代理
    Mac OS Sierra 安装PHP扩展 Operation not permitted
    导航栏对于UIScrollview以及子类所做的一些事
    探索static的用处
  • 原文地址:https://www.cnblogs.com/xiaobingqianrui/p/8882027.html
Copyright © 2011-2022 走看看