• ArrayStack


      栈是一种线性结构,相比与数组,栈对应的操作时数组的子集,只能从一端添加元素,也只能从一端取出元素,是一种 后进先出(Last In First Ou,LIFO) 的数据结构。

    push

    在这里插入图片描述

    pop

    在这里插入图片描述

    代码 Array.h 点它

    栈应用之括号匹配

    include"ArrayStack.h"
    using namespace std;
    
    int isValid(string s)
    {
        ArrayStack<char>* stack = new ArrayStack<char>();
        for (int i = 0; i < s.size(); ++i) {
            char c = s.at(i);
            if (c == '(' || c == '[' || c == '{') {
                stack->push(c);
            }
            else {
                if (stack->isEmpty()) {
                    return false;
                }
                char topChar = stack->pop();
                if (c == ')' && topChar != '(') {
                    return false;
                }
                if (c == ']' && topChar != '[') {
                    return false;
                }
                if (c == '}' && topChar != '{') {
                    return false;
                }
            }
        }
        return stack->isEmpty();
    }
    
    int main()
    {
    	string str = "(){}[]";
    	cout << isValid(str) << endl;
    	return 0;
    }
    
    

    代码清单之ArrayStack.h

    #pragma once
    #include"Array.h"
    template<typename T>
    
    class ArrayStack
    {
    public:
    	ArrayStack()
    	{
    		arr = new Array<T>();	
    	}
    	ArrayStack(const int capacity)
    	{
    		arr = new Array<T>(capacity);
    	}
    	//返回栈的大小
    	int getSize()const;
    	//判断栈是否为空
    	bool isEmpty()const;
    	//返回栈的容量
    	int getCapacity()const;
    	//入栈
    	void push(T& t)const;
    	//出栈
    	T pop()const;
    	//返回栈顶
    	T peek()const;
    	void print()const;
    	~ArrayStack()
    	{
    		delete arr;
    		arr = nullptr;
    	}
    private:
    	Array<T>* arr;
    };
    
    template<typename T>
    inline int ArrayStack<T>::getSize()const
    {
    	return arr->getSize();	//调用返回数组大小,也就是栈的大小
    }
    
    template<typename T>
    inline bool ArrayStack<T>::isEmpty()const
    {
    	return arr->isEmpty();	//调用判断数组是否为空,也就是栈是否为空
    }
    
    template<typename T>
    inline int ArrayStack<T>::getCapacity() const
    {
    	return arr->getCapacity();	//调用返回数组的容量
    }
    
    template<typename T>
    inline void ArrayStack<T>::push(T& t) const
    {
    	arr->addLast(t);	//调用从数组尾部添加一个元素
    }
    
    template<typename T>
    inline T ArrayStack<T>::pop()const
    {
    	return arr->removeLast();	//调用删除数组的最后一个元素
    }
    
    template<typename T>
    inline T ArrayStack<T>::peek()const
    {
    	return arr->getLast();	//调用返回数组最后一个元素也就是栈顶
    }
    
    template<typename T>
    inline void ArrayStack<T>::print() const
    {
    	std::cout << "ArrayStack: size = " << arr->getSize() << ", capacity = " << arr->getCapacity() << std::endl;
    	std::cout << "bottom ";
    	arr->print();
    	std::cout << " top" << std::endl;
    }
    
    
  • 相关阅读:
    计算机中的进制和编码
    操作系统简史
    电脑结构和CPU、内存、硬盘三者之间的关系
    电脑简史
    使用开源my-deploy工具实现开发环境的代码自动化部署
    使用Let’s Encrypt创建nginx免费SSL证书
    VM ESXI 服务器虚拟化资料积累
    python mysql连接函数
    python日期格式转换小记
    Python模块学习
  • 原文地址:https://www.cnblogs.com/chengmf/p/12668977.html
Copyright © 2020-2023  润新知