棧的應用 括號匹配檢驗

2021-08-19 05:34:45 字數 1983 閱讀 1106

輸入包含括號的表示式,包含3中括號:圓括號(),方括號,大括號{};其巢狀順序隨意,即()或}等均為正確的輸入格式,檢驗輸入表示式中的括號是否匹配。

源**:

bracketmatch.h

#ifndef __bracketmatch_h__

#define __bracketmatch_h__

#define maxsize 100

typedef char datatype;

typedef struct

seqstack;

void initstack(seqstack* s); //初始化順序棧

int stackempty(seqstack* s); //判斷棧是否為空

int stackpush(seqstack* s, datatype data); //入棧操作

void stackpop(seqstack* s, datatype* data); //出棧操作

int gettop(seqstack* s, datatype* data); //取棧頂元素

int match(char ch, char c); //判斷左右兩個括號是否是相同型別的括號

void checkmatch(datatype* ch, seqstack s); //括號匹配檢測

#endif

bracketmatch.c

#include 

#include

#include "bracketmatch.h"

int top = -1;

//初始化棧

void initstack(seqstack* s)

//判斷棧是否為空

int stackempty(seqstack* s)

return0;}

//入棧操作

int stackpush(seqstack* s, datatype data)

s->top++;

s->stack[s->top] = data;

return1;}

//出棧

void stackpop(seqstack* s, datatype* data)

*data = s->stack[top];

s->top--;

}//取棧頂元素

int gettop(seqstack* s, datatype* data)

*data = s->stack[s->top];

return *data;

}//判斷左右兩個括號是否是同型別的括號

int match(char ch, char c)

if (ch == '['&&c == ']')

if (ch == '')

return0;}

//檢測括號是否匹配

void checkmatch(datatype* p, seqstack s)

': /*棧為空 ,說明沒有左括號入棧*/

if (stackempty(&s))

else

/*棧頂括號與讀入的括號不匹配*/

else

}/*如果讀入的不是括號,指標後移一位*/

default:

p++;}}

/*棧為空,所有的字串行讀入完畢,說明括號序列匹配*/

if (stackempty(&s))

else

}

main.c

#include 

#include

#include "bracketmatch.h"

#include

int main()

棧的應用之括號匹配檢驗

棧結構具有後進先出的固有特性,在程式設計中很有幫助。這裡舉乙個例子,將棧應用與括號匹配的檢驗。假設表示式中允許三種括號 小括號 中括號和大括號,巢狀的順序任意。等均為正確格式。檢驗括號是否匹配可用 期待的急迫程度 來描述。接收乙個正括號後,計算機期待著乙個與之匹配的反括號。如果此時接收到乙個反括號,...

括號匹配的檢驗(棧)

include using namespace std include include define ture 1 define false 0 define ok 1 define error 0 define overflow 2 typedef int status typedef char ...

棧的應用 圓括號的匹配檢驗

本次引入類模板來描述棧,關於類模板的定義請參看另一文章 對於輸入的乙個算術表示式字串,請用一演算法判斷其中圓括號是否匹配,若匹配則返回true,否則返回false。本題可用棧的操作來實現 用一外迴圈來讀入表示式中的字元,如遇左括號 就進棧 遇到右括號 就判斷棧是否為空 若棧為空 說明之前沒有 進棧,...