数据结构——链栈及其应用(括号匹配)

/************************
author's email:[email protected]
date:2018.2.5
链栈及其应用(括号匹配)
************************/
#include <iostream>
using namespace std;
#define maxSize 50
typedef struct LNode
{
	char data;
	struct LNode *next;
}LNode;
void initStack(LNode *&lst)
{
	lst = (LNode *)malloc(sizeof(LNode));
	lst = NULL;
}
int isEmpty(LNode *lst)
{
	if (lst == NULL)
		return 1;
	else
		return 0;
}
void pushStack(LNode *&lst, char x)
{
	LNode *p;
	p = (LNode *)malloc(sizeof(LNode));
	p->next = NULL;
	p->data = x;
	p->next = lst;//将结点p插入链栈
	lst = p;
}
int popStack(LNode *&lst, char &x)
{
	LNode *p;
	if (lst == NULL)
		return 0;
	p = lst;//p指向第一个数据结点
	x = p->data;
	lst = p->next;
	free(p);
	return 1;
}
int match(char exp[]) {//括号匹配
	char x;
	LNode *p;
	initStack(p);
	int i;
	for (i = 0; exp[i] != '\0'; ++i) {//访问字符数组exp[]中每个元素
		if (exp[i] == '(')//遇到(,则入栈
			pushStack(p, '(');
			if (exp[i] == ')') {
			if (isEmpty(p))//如果遇到的是)并且栈已空,则不匹配,返回0
				return 0;
			else
				popStack(p,x);//如果不为空,则出栈。相当于划掉一对括号
		}
	}
	if (isEmpty(p))//栈空,则说明括号匹配
		return 1;
	else
		return 0;//栈不空,则不匹配
}
int main()
{
	char exp[] = { '(','(', '(', '(', '('
		, '4','+','2',')'
		,'/','3',')'
		,'*','5',')'
		,'-','4',')'
		,'/','2',')'
		,'*','7','\0' };//表达式为(((((1+2)/3)*5)-4)/2)*7
	if (match(exp))
		cout << "括号匹配成功!" << endl;
	else
		cout << "括号匹配失败!" << endl;
	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/wardseptember/article/details/79259944
今日推荐