檢測括號是否匹配的演算法中,棧的特性是最符合括號特點的。棧的先進後出將括號的匹配正好完美實現。
思想:從字串開頭向後逐個檢測,檢測到除括號外的元素就跳過。檢測到左括號時,就進行入棧操作,繼續向後檢測。檢測到有括號時,就檢查棧頂元素是否是匹配的左括號。若不匹配,則直接返回錯誤訊號,使程式結束;若匹配,進行出棧操作,繼續向後檢測。結束時,要判斷棧是否為空,若不為空,則括號不匹配;若為空,則括號匹配。
**:
#include #include #include #define sta_size 50//棧的大小
#define buf_size 50//輸入字串的大小
//棧的宣告
struct stack;
//判斷棧是否為空
int if_empty(struct stack* psta)
判斷棧是否為滿
int if_full(struct stack* psta)
//初始化棧
void init_stack(struct stack* psta)
//入棧操作
int push_stack(struct stack* psta, char data)
(psta->top)++;
psta->sta[psta->top] = data;
}
//出棧操作
char pop_stack(struct stack* psta)
char tmp = psta->sta[psta->top];
(psta->top)--;
return tmp;
}
//檢視棧頂元素
char get_top_data(struct stack* psta)
char tmp = psta->sta[psta->top];
return tmp;
}
//括號匹配函式
int bracket_match(struct stack* sta, char* string)
else
goto err;
case '}':
if (' else
goto err;
case ']':
if ('[' == (get_top_data(sta))) else
goto err;
case '>':
if ('
goto err;
default:
break;
} ps++;
} if(if_empty(sta) == 0)
ok: return 0;
else
err:
return 1;
}int main(int argc, char* argv)
; // char* buf = "he()jfkdjs";
printf("請輸入要檢測的不超過50個字元的字串:\n");
fgets(buf, buf_size, stdin);
int ret = bracket_match(&sta, buf);
if(ret == 0)
printf("括號檢測匹配... \n");
else
printf("括號檢測不匹配... \n");
return 0;
}
結果:
利用棧判斷括號是否匹配
輸入格式如下 3 輸出格式如下 yes no yes 演算法描述 利用棧來判斷 注意出棧時,考慮棧是否為空 最後匹配的結果應該是棧為空 1 從左到右進行掃瞄字元 2 若為左括號 else public boolean isbalanced string str elseelseelse end fo...
c語言 括號匹配檢測(棧的應用)
括號匹配檢測,對於一串帶括號的字元 1.如果是左括號,入棧 2.如果是右括號,與棧頂元素比較,若形成括號對,則棧頂左括號出棧 若不能形成括號對,則括號不能匹配 include include define init size 6 初始棧空間 define incre size 2 佔空間增量 棧結構...
C 括號匹配檢測(用棧)
輸入一串括號,包括圓括號和方括號,判斷是否匹配,即 或 為匹配的正確的格式,或 為不匹配的格式。1 include2 include 3 include4 using namespace std 5int main 623 else 24goto breakloop 25case if s.empt...