栈的应用——括号匹配的检验(C语言)

这个应用来自于严蔚敏的《数据结构(C语言版)》,即这本书上的第49页。大致要实现的功能如下:

假设表达式中允许包括两种括号:圆括号和方括号,其嵌套的顺序随意,即(【】())或【(【】【】)】等为正确的格式,【(】)或(【())等均为不正确格式。

在设计程序的时候,借助于栈,将每个元素遍历一遍,根据一定的条件来确定是出栈还是入栈,如果最后栈为空,则括号是匹配的,否则不会匹配。实现的代码如下:

//括号匹配的检验程序
#include 
#include 
#include 
#define  MAXLEN 50
typedef struct stack 
{
	char ch[50];
	int top;
}ST;
//栈的初始化
ST *ST_Init()
{
	ST *st;
	if (st=(ST *)malloc(sizeof(ST)))
	{
		st->top=0;
		return st;
	}
	return NULL;
}
//出栈操作
int ST_Pop(ST *st)
{
	if (st->top==0)
	{
		printf("栈为空\n");
		return 0;
	}
	st->top--;
	return st->ch[st->top];
}

//入栈操作
void st_Push(ST *st,char c)
{
	if (st->top==MAXLEN)
	{
		printf("栈溢出\n");
		return ;
	}
	st->ch[st->top]=c;
	st->top++;
}
//符号检验函数
void check_symbol(ST *st,char *a)
{
	int i;
	st_Push(st,a[0]);

	for (i=1;ich[st->top-1]=='[')||(a[i]==')'&&st->ch[st->top-1]=='('))//出栈的条件
		{
			ST_Pop(st);
		}
		else
		{
			st_Push(st,a[i]);
		}
	}
	if(st->top==0)
	{
		printf("括号是匹配的\n\n");
	}
	else

	{
		printf("括号不匹配\n\n");
	}
}

void main()
{

	while (1)
	{
		char s[50];
		ST *st;
		st=ST_Init();	
		printf("请输入一串括号:\n");
		scanf("%s",s);
		if(s[0]=='E')
			return;
		check_symbol(st,s);
	}

}


你可能感兴趣的:(数据结构)