STL-栈stack(例题:括号匹配)

[一]栈概念:

    1.总概:

        先进后出的线性表,就像一端不开口的羽毛球筒,先放进去的羽毛球只能最后拿出来

    2.栈顶:

        插入,删除元素的一端。

    3.栈底:

        栈的尾端,见我的博客-数据结构篇之栈,自己写的数组栈才需要讨论栈底。

    4.入栈,出栈:

        入栈:在栈顶插入元素(意淫放羽毛球的操作);出栈:删除一个元素(拿出一个羽毛球)。

    5.空栈:

        栈中没有元素。

[二]<stack>功能介绍:

1.头文件

#include<stack>

2.定义一个栈

stack<typename> One_Stack;   //定义一个栈,名称为 One_Stack,typename是数据类型,可以是int等

3.出栈入栈

One_Stack.push(a_Elem);   //将a_Elem放入栈
One_Stack.pop();   //出栈

4.取栈顶元素

Stack_top_value = One_Stack.top();   //top返回栈顶元素的值 ,赋值给Stack_top_value

5.获得栈内元素个数

Stack_ElemNum = One_Stack.size();

6.交换两个栈

One_Stack.swap(another_Stack);   //One_Stack,another_Stack两个栈内容交换

7.emplace():

    另一个入栈函数:emplace(),大部分情况和push()一样。

8.empty()

    栈空返回true,否则false,true,false不懂自行百度bool类型。

[三]stack应用:括号匹配

/*by 不缩进对齐的渣男  2018/4/12*/
#include<iostream>	
#include<stack>
#define Max_Size 100
using namespace std;
stack<char> Bracket;
void Clear_Stack()    //stack没有清空的成员函数,所以用pop清
{
	while (!Bracket.empty())
		Bracket.pop();
}
bool Matching_Bracket(const char* Signal)   //进行括号匹配
{
	for (int i = 0; Signal[i] != '\0'; i++)
	{
		switch (Signal[i])
		{
		case '[':            
		case '{':
		case '(':
			Bracket.push(Signal[i]);      //左括号先进栈
			break;                 
		case ')':                       //line 22 to 39  就像消消乐,如果匹配,那么最靠近该类型右括号的肯定是相应类型的左括号,此时左右抵消
			if (Bracket.top() == '(')      
				Bracket.pop();           //抵消的操作,出栈这个匹配的左括号
			else
				return false;
			break;
		case ']':
			if (Bracket.top() == '[')
				Bracket.pop();
			else
				return false;
			break;
		case '}':
			if (Bracket.top() == '}')
				Bracket.pop();
			else
				return false;
			break;
		default:          //忽略其他字符
			break;
		}
	}
	if (Bracket.empty())
		return true;
	else
		return false;
}
int main()
{
	int t;
	char Signal[Max_Size];
	
	cin >> t;
	while (t--)
	{
		cin >> Signal;
		//cout << Signal << endl;
		if (Matching_Bracket(Signal))       //整个过程只有左括号进栈,如果括号匹配,必定抵消后剩下空栈
			cout << "yes" << endl;
		else
			cout << "no" << endl;
		Clear_Stack();
	}
	return 0;
}

    渣男最近ddl压身,说好的stl-list一拖再拖orz,希望快了,不过考虑先出数据结构的栈和队列嘻嘻。

猜你喜欢

转载自blog.csdn.net/szu_crayon/article/details/79907455