其他分享
首页 > 其他分享> > 栈的应用-括弧匹配

栈的应用-括弧匹配

作者:互联网

利用顺序栈实现括弧匹配

括弧匹配原则:

1.当出现(){}[]时,表示括弧匹配成功

2.算法实现,利用压栈,出栈的操作实现括弧匹配:

(1)当遇到(、{、[  时,压栈;

(2)在遇到)、}、]时,首先判断栈顶元素是否分别对应(、{、[ ;如果对应,则将栈顶元素出栈,将标志为1;如果不对应,则不出栈,标志为0(!!!重要,首先判断栈顶元素是否匹配,只有匹配才出栈)

(3)最终判断是否全部匹配时,要满足两个要求:栈为空,标志为1.

stack.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *array;
static int count=-1;
//初始化栈
void init_stack(int size)
{
        array=(char *)malloc(size*sizeof(char));
        if(!array)
	{
		printf("创建失败");
		exit(0);
	}
}
//向栈中压入元素
void push(char val)
{
	count=count+1;
        array[count]=val;
}
//获取栈顶元素
char gettop()
{
	if(count==-1)
	{
		printf("此栈为空栈\n");
		exit(0);
	}
	return array[count];
}

//输出栈顶元素并删除栈顶
char pop()
{
        if(count==-1)
	{
		printf("已经到栈底了\n");
		exit(0);
	}
	char val=gettop();
	count--;
        return val;
}
//计算栈的长度
int length()
{
	return count+1;
}
//打印栈的信息
void print_stack()
{
	int i=count;
	while(i!=-1)
	{
		printf("%c",array[i]);

		i=i-1;
	}
	printf("\n");
}

main.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

extern init_stack(int size);
extern void push(char val);
extern char gettop();
extern char pop();
extern int length();
extern void print_stack();
void kuomatch()
{
	char tmp;
	int flage=1;
	char test[100]="(){[)}";
	for(int i=0;i<strlen(test);i++)
	{
		switch(test[i])
		{
			case '{':
			case '[':
			case '(':
				{

				push(test[i]);
				printf("acd\n");
				break;
				}
			case '}':
				{
				if(gettop()=='{')
					pop();
				else
					flage=0;
				printf("}\n");
				break;
				}
			case ']':
				{
				if(gettop()=='[')
					pop();
				else
					flage=0;
				break;
				}
			case ')':
				{
				if(gettop()=='(')
					pop();
				else
					flage=0;
				}


		}

	}
	printf("%d\n",flage);
	if(length()==0&&flage==1)
		printf("匹配正确\n");
	else
		printf("匹配错误\n");
}

int main()
{
	init_stack(100);
        kuomatch();
	return 0;
}

 

标签:count,括弧,匹配,int,void,char,应用,array,include
来源: https://blog.csdn.net/qq_28398393/article/details/81514245