zoukankan      html  css  js  c++  java
  • C++学习笔记49:栈

    栈是一种只能从一端访问的线性数据结构,栈是一种后进先出的数据结构

    //stack.h
    #ifndef STACK_H
    #define STACK_H
    #include <cassert>
    template <class T, int SIZE = 50> class Stack
    {
    private:
        T list[SIZE];
        int top;
    public:
        Stack();
        void push(const T &item);
        T pop();
        void clear();
        const T &peek() const;
        bool isEmpty() const;
        bool isFull() const;
    };
    
    //模板的实现
    template <class T, int SIZE>
    Stack<T, SIZE>::Stack():top(-1){}
    
    template <class T, int SIZE> void Stack<T, SIZE>::push(const T &item)
    {
        assert(!isFull());
        list[++top] = item;
    }
    
    template <class T, int SIZE> T Stack<T, SIZE>::pop() const
    {
        assert(!isEmpty());
        return list[top--];
    }
    
    template <class T, int SIZE> const T &Stack<T, SIZE>::peek() const
    {
        assert(!isEmpty());
        return list[top];
    }
    
    template <class T, int SIZE> bool Stack<T, SIZE>::isEmpty() const
    {
        return top == -1;
    }
    
    template <class T, int SIZE> bool Stack<T, SIZE>::isFull() const
    {
        return top == SIZE - 1;
    }
    
    template <class T, int SIZE> void Stack<T, SIZE>::clear()
    {
        top = -1;
    }
    
    #endif // 

     栈的引用:判断是否存在不匹配的()

    #include <iostream>
    #include <string>
    #include <cassert>
    using namespace std;
    
    template <class T, int MAX = 1000> class Stack
    {
    private:
        T list[MAX + 1];
        int top;
    public:
        Stack();
        void push(const T &item);
        T pop();
        const T & peek() const;
        bool isEmpty() const;
    };
    
    
    template <class T, int MAX> Stack<T, MAX>::Stack() :top(-1)
    {
    
    }
    
    template <class T, int MAX> void Stack<T, MAX>::push(const T &item)
    {
        if (top != MAX - 1)
        {
            list[++top] = item;
        }
    }
    
    template <class T, int MAX> bool Stack<T, MAX>::isEmpty() const
    {
        return top == -1;
    }
    
    template <class T, int MAX> T Stack<T, MAX>::pop()
    {
        assert(!isEmpty());
        return list[top--];
    }
    
    template <class T, int MAX> const T &Stack<T, MAX>::peek() const
    {
        assert(!isEmpty());
        return list[top];
    }
    
    void judgeBrackets(string str)
    {
        Stack<char>p;
        int k = 0;
        int count = 0;
        while (str[k] != '')
        {
            if (str[k] == '(')
            {
                p.push(str[k]);
                count++;
            }
            if (str[k] == ')')
            {
                if (count == 0)
                {
                    cout << "NO" << endl;
                    count--;
                    break;
                }
                else
                {
                    p.pop();
                    count--;
                }
            }
            k++;
        }
        if (count == 0)
            cout << "Yes" << endl;
        if (count > 0)
            cout << "NO" << endl;
    }
    
    int main()
    {
        string str;
        while (cin >> str)
        {
            judgeBrackets(str);
        }
    }
    怕什么真理无穷,进一寸有一寸的欢喜。---胡适
  • 相关阅读:
    Hdu 1257 最少拦截系统
    Hdu 1404 Digital Deletions
    Hdu 1079 Calendar Game
    Hdu 1158 Employment Planning(DP)
    Hdu 1116 Play on Words
    Hdu 1258 Sum It Up
    Hdu 1175 连连看(DFS)
    Hdu 3635 Dragon Balls (并查集)
    Hdu 1829 A Bug's Life
    Hdu 1181 变形课
  • 原文地址:https://www.cnblogs.com/hujianglang/p/6556836.html
Copyright © 2011-2022 走看看