数据结构-栈在括号匹配中的应用
生活随笔
收集整理的這篇文章主要介紹了
数据结构-栈在括号匹配中的应用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
所謂括號校驗匹配其實質是對多種類型括號正確配對的校驗(包括:()、[]、{})即([])或者[()]為正確的表達式,如果出現交叉則匹配失敗,如[(])或([())則為不正確格式。
該程序也運用了棧的思想。若是左括號則入棧,若是右括號則看是否和當前棧頂元素是否匹配。若是則出棧,不是則當前表達式括號不匹配。
程序思想:
1.初始設置一個空棧,順序讀入括號。
2.若是右括號,則使置于棧頂的元素出棧與之匹配,若是括號序列不匹配,則退出程序
3.若是左括號,則將元素壓入棧中,算法結束時,棧為空,否則括號序列不匹配
?
以下為示例代碼:
//棧應用之校驗括號的匹配#include "stdafx.h" #include "string.h"#define ElementType char #define MaxSize 10 //定義結構體 typedef struct {ElementType data[MaxSize];//數據域int top;//棧頂指針int size;//棧當前容量 }SqStack;/* 初始化棧 */ void InitStack(SqStack &s) {s.top = -1;s.size = 0; }/* 判斷棧是否為空 */ bool StackEmpty(SqStack s) {if (s.size == 0) {return true;}return false; } /* 入棧 */ bool PushStack(SqStack &s,ElementType e) {//if(s.top==MaxSize-1)if (s.size == MaxSize) {//棧滿return false;}s.top++;s.data[s.top] == e;s.size++;return true; } /* 出棧 */ ElementType PopStack(SqStack &s) {//if(s.top==-1)if (s.size==0) {//棧空return NULL;}ElementType e = s.data[s.top];s.top--;s.size--;return e; } /* 校驗括號是否匹配 */ bool CheckMatch(char *str) {SqStack stack;InitStack(stack);int len = strlen(str);for (int i = 0; i < len; i++){char x = str[i];ElementType e;switch (x) {case '(':PushStack(stack, x);break;case '[':PushStack(stack, x);break;case '{':PushStack(stack, x);break;case ')':e = PopStack(stack);if (e != '(') {return false;}break;case ']':e = PopStack(stack);if (e != '[') {return false;}break;case '}':e = PopStack(stack);if (e != '{') {return false;}break;}}bool b = StackEmpty(stack);if (b) {return true;}return false; }void main() {char str[] = "[({})]";bool b = CheckMatch(str);if (b) {printf_s("匹配成功");}else{printf_s("匹配失敗");} }?
總結
以上是生活随笔為你收集整理的数据结构-栈在括号匹配中的应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 地下城堡2火枪手转职路线
- 下一篇: 数据结构-栈之二进制转十进制和八进制