天天看點

數組棧(ArrayStack)

  棧是一種線性結構,相比與數組,棧對應的操作時數組的子集,隻能從一端添加元素,也隻能從一端取出元素,是一種 後進先出(Last In First Ou,LIFO) 的資料結構。

push

數組棧(ArrayStack)

pop

數組棧(ArrayStack)
代碼底層是動态數組,先閱讀這篇文章更佳 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;
}

           

繼續閱讀