必威体育Betway必威体育官网
当前位置:首页 > IT技术

括号匹配的检验

时间:2019-09-26 08:42:12来源:IT技术作者:seo实验室小编阅读:77次「手机版」
 

括号匹配

使用栈的结构检验一串输入的括号和中括号是否匹配,只有()和[]一一对应的时候,该串才算正确的串,如:([]())和[([][])]是正确的串,[(])和([())是不正确的。

首先读取输入的串,检查每个当前元素,如果是(或者[则压入栈中,是)或]则检查栈顶元素,如果栈顶元素与当前元素刚好闭合,则将栈顶元素弹出。换而言之,栈中存储的内容只有(和[,当栈为空,当前元素为)或]即可判断出当前串不正确。栈为空时串即为正确的串。

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

#define Stack_Init_Size 100
#define Stack_Increment 10
//栈的定义 
typedef struct {
	char* base=NULL;
	char* top;
	int stacksize;
}SqStack;

//初始化栈 
int Init(SqStack &stack){
	if(!stack.base){ 
		stack.base=(char*)malloc(Stack_Init_Size*sizeof(char));
		stack.top=stack.base;
		stack.stacksize = Stack_Init_Size;
		printf("初始化成功\n");
		return 0; //初始化成功 
	}
	else return -1;//表示无法初始化已出始化栈
}

//获取栈顶数据
char GetTop(SqStack stack){
	if(stack.base==stack.top){
		printf("栈中没有数据\n");
		return '#';
	}
	printf("获取栈顶数据成功\n");
	return *(stack.top-1);
} 

//往栈中插入元素
int Push(SqStack &stack,char element){
	if(stack.top-stack.base==stack.stacksize){
		stack.base=(char*)realloc(stack.base,Stack_Increment*sizeof(char));
		stack.top=stack.base+stack.stacksize;
		stack.stacksize+=Stack_Increment;
	}
	*stack.top=element;
	stack.top+=1;
	printf("插入数据成功\n");
	return 0;//表示成功 
} 

//删除栈顶元素
char Pop(SqStack &stack){
	if(stack.top==stack.base){
		printf("栈为空\n");
		return '#';
	}
	printf("删除数据成功");
	return *--stack.top;
} 

//释放栈空间 
int Destroy(SqStack &stack){
	free(stack.base);
	stack.stacksize=0;
	printf("销毁栈成功\n");
	return 0;
}

//处理数据,借助栈判断 
int ExecuteData(SqStack &stack,char* data){
	Push(stack,data[0]);
	for(int i=1;i<strlen(data);i++){
		char top = GetTop(stack);
		switch(top){
			case '(':
				if(data[i]==')')Pop(stack);
				else Push(stack,data[i]);
				break;
			case '[':
				if(data[i]==']')Pop(stack);
				else Push(stack,data[i]);
				break;
			case '#':
				if(data[i]=='('||data[i]=='['){
					Push(stack,data[i]);
					break;
				}
				else  
			default:return -1;break;
		}
	}
	if(stack.top==stack.base){
		Destroy(stack);
		return 0;
	}
	else{
		Destroy(stack);
		return -1;
	}
} 


int main(){
	SqStack stack;
	Init(stack);
	char data[180];
	scanf("%s",data);
	int result = ExecuteData(stack,data);
	if(result==0)printf("括号是正确匹配的\n");
	else printf("括号匹配不正确\n");
	return 0;
} 

相关阅读

资产端才是检验理财平台的重要标准!人人贷、铜板街、银

在互联网金融的热潮重新来临之际,我国各大互金平台也纷纷从资产端入手,加强了优质项目的选择,通过2019年上半年的观察,广大出借人应该

中文正则表达式匹配-正则中文匹配

原文链接:http://caibaojian.com/zhongwen-regexp.html这篇文章主要讲如何使用正则匹配中文字符,中文正则表达式的匹配规则不像其他

搜索引擎广告的检索和匹配算法

1.搜索引擎广告的检索 广告检索的过程: 广告检索就是通过对给定的网民的信息需求,在广告库(Ad Set)中找到相关的广告,简单的

陌陌回应用户数据在暗网出售:网传数据跟陌陌用户的匹配

A5创业网(公众号:iadmin5)12月4日报道,近日有消息称,陌陌3000万数据在暗网上以50美金的价格出售。这些数据包括用户的手机号、密码,写入

一小时学懂阻抗匹配

转载自 https://blog.csdn.net/jamestaosh/article/details/4436203基本概念 信号传输过程中负载阻抗和信源内阻抗之间的特定配合

分享到:

栏目导航

推荐阅读

热门阅读