資料結構括號匹配問題
資料結構括號匹配問題
要求大、中、小括號兩兩匹配,基本思路可以通過棧來實現。這裡我使用的是簡單的靜態順序棧,大小固定,同時定義了棧頂指標top。程式包含了棧的幾個最基本的操作,初始化、判空、壓入、彈出,此外還有一個匹配函式,該函式接受一個陣列和其長度做引數,判斷是否括號匹配成功。然後是處理括號的問題,思路是掃描陣列中的括號,遇到左括號就進行壓棧操作,遇到右括號先判斷棧中是否還有元素(即左括號),若沒有則右括號“單身”,匹配失敗,若棧中存在元素,就進行出棧操作,將棧頂的元素彈出與右括號進行配對,判斷是否成功,在掃描完所有的括號後,判斷棧中是否還有元素,若有,則左括號“單身”,匹配失敗,若棧空,則最終匹配成功,結束程式。
#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define TRUE 1
#define FALSE 0
#define ERROR 0
#define OVERFLOW -1
#define MAXSIZE 20
typedef struct {
char data[MAXSIZE];
int top;
}SqStack;
typedef int Status;
Status InitStack(SqStack* S) {
//構造一個空棧
S->top = -1;
return OK;
}
Status StackEmpty(SqStack S) {
if (S.top == -1) { printf("\n棧空!\n");return TRUE; }
else { return FALSE; }
}
Status Push(SqStack* S,char str) {
if (S->top==MAXSIZE-1) {
printf("\n棧滿!\n");
exit(OVERFLOW);
}
S->data[++S->top] = str;
printf("\n壓入元素%c\n", str);
return OK;
}
Status Pop(SqStack* S, char* str) {
if (S->top == -1) {
printf("\n棧空!\n");
return ERROR;
}
*str = S->data[S->top--];
printf("\n彈出元素%c\n", *str);
return OK;
}
Status Check(char str[], int length) {
SqStack S;
InitStack(&S);
printf("\n成功!\n");
for (int i = 0;i < length;i++) {
if (str[i] == '(' || str[i] == '[' || str[i] == '{') {
Push(&S, str[i]);//掃描到左括號,入棧
} else {
if (StackEmpty(S)) {
printf("\n匹配失敗\n");
return FALSE;
}
char topelem = '\0';
Pop(&S, &topelem);
if (str[i] == ')' && topelem != '(')
{
printf("\n匹配失敗\n");
return FALSE;
}
if (str[i] == ']' && topelem != '[')
{
printf("\n匹配失敗\n");
return FALSE;
}
if (str[i] == '}' && topelem != '{')
{
printf("\n匹配失敗\n");
return FALSE;
}
}
}
if (StackEmpty(S)) { printf("\n匹配成功\n");return OK; }
else {
printf("\n匹配失敗\n");
return FALSE;
}
return OK;
}
void main() {
printf("\n請向棧中寫入括號(輸入“#”結束輸入):\n");
int temp = 0;
char string[MAXSIZE] = { '\0' };
for (int i = 0;;i++) {
scanf_s("%c", &string[i],sizeof(string));
if (string[i] == '#')break;
temp++;
}
Check(string, temp);
}
C語言實現
相關文章
- 括號匹配檢驗 資料結構運用資料結構
- 【資料結構】棧的應用--括號的匹配(c++)資料結構C++
- LeetCode 3: PairsOfParentheses (括號匹配問題)LeetCodeAI
- 括號匹配的檢驗問題(C++)C++
- 【棧】括號匹配
- ACM 括號配對問題ACM
- interleave字串;及括號匹配分析字串
- HDU 5831 Rikka with Parenthesis II (括號匹配)
- 括號匹配;及找數字續分析
- Shell 括號總結
- POJ 2955-Brackets(括號匹配-區間DP)Racket
- 【題解】括號序列
- sqlserver查詢長括號[資料SQLServer
- 03.Java資料結構問題Java資料結構
- 【資料結構】停車場問題資料結構
- 資料結構——RMQ(ST表)問題資料結構MQ
- 資料結構連結串列各種問題資料結構
- 每日一題: 有效括號每日一題
- 【資料結構與演算法】字串匹配資料結構演算法字串匹配
- UVA 673 括號的匹配——經典棧的應用
- 【dawn·資料結構】迷宮問題(C++)資料結構C++
- 資料結構初階--堆排序+TOPK問題資料結構排序TopK
- 理解正規表示式中的括號 (),方括號 [] 和大括號 {}
- 資料結構測試題。小問題見大智慧!資料結構
- 迷宮問題【資料結構實驗報告】資料結構
- 常見問題--oracle物理資料庫結構概述Oracle資料庫
- Unix各種括號的用法總結
- 資料結構和演算法面試題系列—揹包問題總結資料結構演算法面試題
- 【資料結構與演算法】揹包問題總結梳理資料結構演算法
- 【整理】資料結構——題目資料結構
- 資料結構簡單題資料結構
- 關於路由器匹配主訊號的問題路由器
- (C++)資料結構實驗二——迷宮問題C++資料結構
- leetcode演算法資料結構題解---資料結構LeetCode演算法資料結構
- 字串匹配問題字串匹配
- 括號畫家
- 用Python解決資料結構與演算法問題(三):線性資料結構之棧Python資料結構演算法
- 【資料結構與演算法】字串匹配(字尾陣列)資料結構演算法字串匹配陣列