輸入包含括號的表示式,包含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。本題可用棧的操作來實現 用一外迴圈來讀入表示式中的字元,如遇左括號 就進棧 遇到右括號 就判斷棧是否為空 若棧為空 說明之前沒有 進棧,...