-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathbracketMatch.cc
139 lines (132 loc) · 2.17 KB
/
bracketMatch.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
///
/// @file Stack.cc
/// @author yll(1711019653@qq.com)
/// @date 2019-01-13 14:24:51
///
#include <iostream>
#include<vector>
using std::cout;
using std::endl;
using std::vector;
class Bracket_Matching
{
public:
// Bracket_Matching(int size)
// :_stack(Stack(size))
// {
//
// }
static bool Bracket_matching(vector<char> bracket, size_t size)
{
_stack = new Stack<char>(size);
size_t idx = 0;
for(idx = 0 ; idx < size; ++idx)
{
if(bracket[idx] == '{' || bracket[idx] == '[' || bracket[idx] == '(')
{
_stack->push(bracket[idx]);
}
else if(_stack->empty())
{
return false;
}
else
{
if(_stack->top() == '(' && bracket[idx] == ')')
{
_stack->pop();
continue;
}
else if(_stack->top() == '[' && bracket[idx] == ']')
{
_stack->pop();
continue;
}
else if(_stack->top() == '{' && bracket[idx] == '}')
{
_stack->pop();
continue;
}
}
}
if(idx == (idx-1))
return true;
else
return false;
}
private:
template<class T>
class Stack
{
public:
Stack(int size , int top = -1)
:_stack(new T[size]())
,_size(size)
,_top(top)
{
cout << "Stack(int , int)" << endl;
}
//元素入栈
void push(T element )
{
if(full())
{
cout << "Stack is full" << endl;
return ;
}
_stack[++_top] = element;
cout << "void push(element)" << endl ;
}
//元素出栈
void pop()
{
if(empty())
{
cout << "Stack is empty " << endl ;
return ;
}
_stack[_top--] = '\0';
}
//读出栈顶元素
T top() const
{
if(!this->empty())
return _stack[_top];
}
//判空
bool empty() const
{
if(_top == -1)
return true;
else
return false;
}
//判满
bool full() const
{
if((_top + 1) == _size)
return true;
else
return false;
}
//析构函数
~Stack()
{
delete [] _stack;
cout << "~Stack()" << endl;
}
private:
T *_stack; //栈区
int _size;
int _top ;//栈指针
};
private:
static Stack<char>* _stack;
};
Bracket_Matching::Stack<char> * Bracket_Matching::_stack = nullptr;
int main(void)
{
vector<char> bracket{'(','{','[','{','}',']',')'};
cout << Bracket_Matching::Bracket_matching(bracket, 7) << endl;
return 0;
}