Case 3.2: matching brackets test (c ++ implemented / data structure / stack basic operation)

Disclaimer: This article is a blogger original article, follow the CC 4.0 BY-SA copyright agreement, reproduced, please attach the original source link and this statement.
This link: https://blog.csdn.net/qq_41359651/article/details/82828337

#include<iostream>
#define MaxSize 100
#define OK 1
#define ERROR 0

using namespace std;

typedef char ElemType;
typedef int Status;
typedef struct StackNode
{
	ElemType data;
	struct StackNode *next;
}StackNode, *LinkStack;

Status InitStack(LinkStack &S)
{
	S = NULL;
	return OK;
}
/*入栈*/
Status Push(LinkStack &S,ElemType e)
{
	LinkStack p;
	p = new StackNode;
	p->data = e;
	p->next = S;
	S = p;
	return OK;
}
/*弹出栈顶元素*/
Status Pop(LinkStack &S, ElemType &e)
{
	LinkStack p;
	e = S->data;
	p = S;
	S = S->next;
	delete p;
	return OK;
}
/*判断是否栈空,是返回1,否返回0*/
Status StackEmpty(LinkStack S)
{
	if (S == NULL)return OK;
	else
		return ERROR;
}
/*获取栈顶元素的值,不修改指针*/
Status GetTop(LinkStack S)
{
	if (S != NULL)return S->data;
}
Status Matching(LinkStack &S)
{
	ElemType ch, e;
	int flag;
	InitStack(S);
	flag = 1;
	cin >> ch;
	while (ch != '#'&&flag)
	{
		switch (ch)
		{
		case '[':
		case '(':Push(S, ch); break;
		case ')':
			if (!StackEmpty(S) && GetTop(S) != '[')
				Pop(S, e);
			else
				flag = 0;
			break;
		case ']':
			if (!StackEmpty(S) && GetTop(S) == '[')
				Pop(S, e);
			else
				flag = 0;
			break;
		}
		cin >> ch;
	}
	if (StackEmpty(S) && flag)return OK;
	else 
		return ERROR;
}
int main()
{
	LinkStack S, p;
	if (Matching(S))
		cout << "匹配成功!\n";
	else
	{
		cout << "匹配失败!\n";
	}
	p = S;
	while (p)
	{
		cout << p->data;
		p = p->next;
	}
	system("pause");
	return 0;
}

 


 

Guess you like

Origin blog.csdn.net/qq_41359651/article/details/82828337