zoukankan      html  css  js  c++  java
  • 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;
    }
    
    
  • 相关阅读:
    三级连动的下拉框(数据库版)吐血推荐
    行排菜单
    用AJAX制作天气预
    XmlHttp实战学习中....
    ASP+JS三级连动下拉框
    ASP连接11种数据库语法总结
    oa数据库设计
    RSS PUBData 把正常时间函数转成rss2.0的标准
    浮点数的表示和基本运算
    C#4.0新特性:可选参数,命名参数,Dynamic
  • 原文地址:https://www.cnblogs.com/chengmf/p/12668977.html
Copyright © 2011-2022 走看看