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

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

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

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

//括号匹配的检验程序
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#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;i<strlen(a);i++)
	{
		//遍历每一个元素,判断出栈还是入栈
		if ((a[i]==']'&&st->ch[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);
	}

}


  • 15
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值