括號匹配的檢驗(鏈棧)

問題

在這裏插入圖片描述

#include <stdio.h>
#include <stdlib.h>
#include<iostream>
using namespace std;
typedef char ElemType;
typedef struct StackNode* StackLink;
struct StackNode{
	ElemType data;
	StackLink next;
};
//初始化
void InitStack(StackLink &S){
	S = NULL;
	return;
}
//入棧
void Push(StackLink &S, ElemType e){
	StackLink p = (StackLink)malloc(sizeof(StackNode));
	p->data = e;
	p->next = S;
	S = p;
	return;
}
//出棧
void Pop(StackLink &S, ElemType &e){
	e = S->data;
	S = S->next;
	return;
}
//返回棧頂元素
ElemType GetHead(StackLink S){
	if (S == NULL)return 0;
	return S->data;
}
//堆棧判空
bool StackEmpty(StackLink S){
	if (S == NULL)return true;
	return false;
}
//括號匹配的檢驗
bool Matching(){
	StackLink S;
	InitStack(S);
	ElemType p;
	cin >> p;
	while (p!='#'){
		if (p == '(' || p == '[')//遇左括號直接進棧
			Push(S, p);
		else if (p == ')' || p == ']'){//遇右括號判斷
			ElemType e = GetHead(S);
			//若與當前棧頂的左括號類型相同則二者匹配,將棧頂的左括號出棧(相當於去括號)
			if ((e == '('&&p == ')') || (e == '['&&p == ']'))
				Pop(S, e);
			//否則不匹配,返回錯誤
			//不匹配有兩種情況:1.類型不同;2.缺少左括號,若棧空棧頂元素返回的是0,必不匹配
			else
				return false;
		}
		cin >> p;
	}
	//如果棧非空,說明還有沒匹配的括號,返回錯誤
	if (!StackEmpty(S))return false;
	return true;
}
int main(){
	if (Matching())
		printf("OK\n");
	else
		printf("WRONG\n");
	system("PAUSE");
	return 0;
}

括號匹配的檢驗

步驟:
1.遇左括號直接進棧
2.遇右括號判斷
2.1若與當前棧頂的左括號類型相同則二者匹配,將棧頂的左括號出棧(相當於去括號)
2.2否則不匹配,返回錯誤
2.2注意:不匹配有兩種情況:1.類型不同;2.缺少左括號,若棧空棧頂元素返回的是0,必不匹配
3.遇到結束符’#'循環結束,判斷棧空,如果棧非空,說明還有沒匹配的括號,返回錯誤
主函數:如果返回正確則正確匹配,否則失敗

//括號匹配的檢驗
bool Matching(){
	StackLink S;
	InitStack(S);
	ElemType p;
	cin >> p;
	while (p!='#'){
		if (p == '(' || p == '[')//遇左括號直接進棧
			Push(S, p);
		else if (p == ')' || p == ']'){//遇右括號判斷
			ElemType e = GetHead(S);
			//若與當前棧頂的左括號類型相同則二者匹配,將棧頂的左括號出棧(相當於去括號)
			if ((e == '('&&p == ')') || (e == '['&&p == ']'))
				Pop(S, e);
			//否則不匹配,返回錯誤
			//不匹配有兩種情況:1.類型不同;2.缺少左括號,若棧空棧頂元素返回的是0,必不匹配
			else
				return false;
		}
		cin >> p;
	}
	//如果棧非空,說明還有沒匹配的括號,返回錯誤
	if (!StackEmpty(S))return false;
	return true;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章