国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C語言詳解括號匹配問題(棧的應(yīng)用 )

這篇具有很好參考價值的文章主要介紹了C語言詳解括號匹配問題(棧的應(yīng)用 )。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

問題概述

檢測括號是否成對出現(xiàn)
括號匹配問題 棧c語言,算法和數(shù)據(jù)結(jié)構(gòu),C語言,括號匹配,棧,算法,數(shù)據(jù)結(jié)構(gòu)
最后出現(xiàn)的左括號最先匹配(LIFO),和棧的后進(jìn)先出異曲同工
括號匹配問題 棧c語言,算法和數(shù)據(jù)結(jié)構(gòu),C語言,括號匹配,棧,算法,數(shù)據(jù)結(jié)構(gòu)
每出現(xiàn)一個右括號,就抵消(出棧操作)掉一個左括號

算法思路

  • 遇到左括號就入棧
  • 遇到有括號,就抵消一個左括號

不匹配的情況

  • 遇到一個右括號,棧內(nèi)彈出的左括號與之不匹配,例如 此時的右括號是 ] 而棧內(nèi)的左括號是 {
  • 匹配到最后一個括號。棧內(nèi)已經(jīng)空了,說明此時多出來了括號
  • 處理完所有括號,棧內(nèi)非空

實(shí)現(xiàn)流程圖

括號匹配問題 棧c語言,算法和數(shù)據(jù)結(jié)構(gòu),C語言,括號匹配,棧,算法,數(shù)據(jù)結(jié)構(gòu)

C語言代碼

匹配代碼實(shí)現(xiàn)代碼

bool bracketCheck(char str[],int length){
	SqStack S;
	InitStack(&S); //初始化棧
	for(int i=0;i<length;i++){
		if(str[i]=='('||str[i]=='{'||str[i]=='['){
			Push(&S,str[i]); //掃描到左括號就入棧
		}else{
			if(IsEmpty(S)){ //掃描到右括號,當(dāng)前棧為空,即右括號單身情況
				return false; //匹配失敗
			}
			char topElem; //用來保存彈出棧的棧頂元素
			Pop(&S,&topElem); //棧頂元素出棧
			if(str[i]==')'&&topElem!='('){
				return false;
			}
			if(str[i]=='}'&&topElem!='{'){
				return false;
			}
			if(str[i]==']'&&topElem!='['){
				return false;
			}
		}
	}
	return IsEmpty(S);
}

完整代碼

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#define MaxSize 100 //定義棧中元素最大個數(shù)

typedef struct{
	char data[MaxSize];
	int top;
}SqStack;

//初始化棧
void InitStack(SqStack *S){
	S->top = -1;
}
//判斷棧是否為空
bool IsEmpty(SqStack S){
	if(S.top == -1){
		return true;
	}
	return false;
}
//新元素入棧
void Push(SqStack *S,char x){
	if(S->top == MaxSize-1){
		printf("棧已滿"); //棧已滿
		return;
	}
	S->top += 1;
	S->data[S->top] = x;
}
//棧頂元素出棧,用x返回
void Pop(SqStack *S,char *x){
	if(S->top == -1){
		printf("棧已滿");
		return;
	}
	*x = S->data[S->top];
	S->top -= 1;
}
//匹配算法
bool bracketCheck(char str[],int length){
	SqStack S;
	InitStack(&S); //初始化棧
	for(int i=0;i<length;i++){
		if(str[i]=='('||str[i]=='{'||str[i]=='['){
			Push(&S,str[i]); //掃描到左括號就入棧
		}else{
			if(IsEmpty(S)){ //掃描到右括號,當(dāng)前棧為空,即右括號單身情況
				return false; //匹配失敗
			}
			char topElem; //用來保存彈出棧的棧頂元素
			Pop(&S,&topElem); //棧頂元素出棧
			if(str[i]==')'&&topElem!='('){
				return false;
			}
			if(str[i]=='}'&&topElem!='{'){
				return false;
			}
			if(str[i]==']'&&topElem!='['){
				return false;
			}
		}
	}
	return IsEmpty(S);
}
int main(){
	char s[MaxSize];
	printf("請輸入需要判斷的括號:\n");
	scanf("%s",s);
	int len = strlen(s);
	printf("當(dāng)前輸入的括號個數(shù)為:%d\n",len);
	printf("--------現(xiàn)在開始進(jìn)行判斷--------\n");
	if(bracketCheck(s,len)){
		printf("匹配成功!");
	}else{
		printf("匹配失敗!");
	}
	return 0;
}

結(jié)果測試

括號匹配問題 棧c語言,算法和數(shù)據(jù)結(jié)構(gòu),C語言,括號匹配,棧,算法,數(shù)據(jù)結(jié)構(gòu)
括號匹配問題 棧c語言,算法和數(shù)據(jù)結(jié)構(gòu),C語言,括號匹配,棧,算法,數(shù)據(jù)結(jié)構(gòu)文章來源地址http://www.zghlxwxcb.cn/news/detail-737695.html

到了這里,關(guān)于C語言詳解括號匹配問題(棧的應(yīng)用 )的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【數(shù)據(jù)結(jié)構(gòu)】【?!坷ㄌ柶ヅ渌惴ǎ芍苯舆\(yùn)行)

    【數(shù)據(jù)結(jié)構(gòu)】【?!坷ㄌ柶ヅ渌惴ǎ芍苯舆\(yùn)行)

    假設(shè)表達(dá)式中允許包含三種括號:()、[]、{},其嵌套的順序任意,即([]{})或[()[]{}]等均為正確的格式,實(shí)現(xiàn)一個算法,完成對表達(dá)式中括號的檢驗。 考慮以下括號序列: [ ( [ ] [ ] ) ] 分析如下: (1)計算機(jī)接收第一個括號 [ 后,等待與之匹配的 ] 出現(xiàn)。 (2)接收第二個括號

    2024年04月17日
    瀏覽(23)
  • C語言經(jīng)典算法之括號匹配算法

    目錄 前言 A.建議 B.簡介 一 代碼實(shí)現(xiàn) 二 時空復(fù)雜度 A.時間復(fù)雜度分析 B.空間復(fù)雜度分析 三 優(yōu)缺點(diǎn) A.優(yōu)點(diǎn): B.缺點(diǎn): 四 現(xiàn)實(shí)中的應(yīng)用 1.學(xué)習(xí)算法最重要的是理解算法的每一步,而不是記住算法。 2.建議讀者學(xué)習(xí)算法的時候,自己手動一步一步地運(yùn)行算法。 tips:文中的(如

    2024年02月21日
    瀏覽(25)
  • 【數(shù)據(jù)結(jié)構(gòu)】括號匹配問題你學(xué)會了嗎?來刷刷題檢驗一下吧?。。? decoding=

    【數(shù)據(jù)結(jié)構(gòu)】括號匹配問題你學(xué)會了嗎?來刷刷題檢驗一下吧?。?!

    大家好,很高興又和大家見面啦?。?! 在前面的內(nèi)容中,我們詳細(xì)介紹了棧在括號問題中的應(yīng)用,相信大家看完后對括號問題的解題思路有了更加清晰的認(rèn)識了。俗話說的好,磨刀不誤砍柴工。在今天的內(nèi)容中,我們就來通過幾道習(xí)題來加深棧在括號問題中應(yīng)用吧。 首先我

    2024年04月22日
    瀏覽(23)
  • 棧的OJ題(逆波蘭表達(dá)式求值+括號匹配+出入棧順序匹配+最小棧)

    棧的OJ題(逆波蘭表達(dá)式求值+括號匹配+出入棧順序匹配+最小棧)

    平時使用是算式是中綴表達(dá)式 逆波蘭表達(dá)式是一種后綴表達(dá)式,算符寫在后面。 優(yōu)點(diǎn): 1.去掉括號后表達(dá)式無歧義 2.適合用棧操作運(yùn)算:遇到數(shù)字則入棧;遇到算符則取出棧頂兩個數(shù)字進(jìn)行計算,并將結(jié)果壓入棧中 3.中綴轉(zhuǎn)后綴:加上括號,將對應(yīng)的運(yùn)算符放在括號外 1.題

    2024年02月08日
    瀏覽(33)
  • 【算法與數(shù)據(jù)結(jié)構(gòu)】棧的實(shí)現(xiàn)詳解

    【算法與數(shù)據(jù)結(jié)構(gòu)】棧的實(shí)現(xiàn)詳解

    棧的概念: 棧 :一種特殊的線性表,其只允許在固定的一端進(jìn)行插入和刪除元素操作。進(jìn)行數(shù)據(jù)插入和刪除操作的一端 稱為棧頂,另一端稱為棧底。棧中的數(shù)據(jù)元素遵守后進(jìn)先出LIFO(Last In First Out)的原則。 壓棧:棧的插入操作叫做進(jìn)棧/壓棧/入棧,入數(shù)據(jù)在棧頂。 出棧:

    2024年03月11日
    瀏覽(46)
  • 棧的詳解和例題(力扣有效括號)

    棧的詳解和例題(力扣有效括號)

    感謝各位大佬的光臨,希望和大家一起進(jìn)步,望得到你的三連,互三支持,一起進(jìn)步 個人主頁:LaNzikinh-CSDN博客 收入專欄:初階數(shù)據(jù)結(jié)構(gòu)_LaNzikinh籃子的博客-CSDN博客 文章目錄 前言 一.什么是棧 二.棧的實(shí)現(xiàn) 三.例題(力扣) 總代碼 之前講了,很多關(guān)于棧的習(xí)題,還有棧與隊列

    2024年04月11日
    瀏覽(18)
  • 數(shù)據(jù)結(jié)構(gòu)與算法-(7)---棧的應(yīng)用-(4)后綴表達(dá)式求值

    數(shù)據(jù)結(jié)構(gòu)與算法-(7)---棧的應(yīng)用-(4)后綴表達(dá)式求值

    ??write in front?? ??大家好,我是Aileen??.希望你看完之后,能對你有所幫助,不足請指正!共同學(xué)習(xí)交流. ??本文由Aileen_0v0?? 原創(chuàng) CSDN首發(fā)?? 如需轉(zhuǎn)載還請通知?? ??個人主頁:Aileen_0v0??—CSDN博客 ??歡迎各位→點(diǎn)贊?? + 收藏?? + 留言??? ??系列專欄:Aileen_0v0??

    2024年02月07日
    瀏覽(20)
  • 【數(shù)據(jù)結(jié)構(gòu)】用棧實(shí)現(xiàn)括號匹配

    【數(shù)據(jù)結(jié)構(gòu)】用棧實(shí)現(xiàn)括號匹配

    1.創(chuàng)立一個判斷括號是否匹配的函數(shù)BracketsCheck 2.傳參(棧,輸入的字符串) 3.對字符串中的(、[、{、這三種括號進(jìn)行匹配 4.順序從左往右進(jìn)行,依次將符合條件的括號放入棧中,滿足FILO原則 5.但拿到右括號時進(jìn)行匹配,如果匹配成功,那么就出棧,如果失敗就返回false 定義

    2024年02月06日
    瀏覽(23)
  • 頭歌(C語言)-數(shù)據(jù)結(jié)構(gòu)與算法-棧的實(shí)現(xiàn)-第1關(guān):實(shí)現(xiàn)一個順序存儲的棧

    頭歌(C語言)-數(shù)據(jù)結(jié)構(gòu)與算法-棧的實(shí)現(xiàn)-第1關(guān):實(shí)現(xiàn)一個順序存儲的棧

    任務(wù)描述 相關(guān)知識 棧的基本概念 棧結(jié)構(gòu)的定義(C) 順序棧的操作 編程要求 測試說明 任務(wù)描述 本關(guān)任務(wù)是實(shí)現(xiàn) step1/SeqStack.cpp 中的 SS_IsFull 、 SS_IsEmpty 、 SS_Length 、 SS_Push 和 SS_Pop 五個操作函數(shù),以實(shí)現(xiàn)判斷棧是否為滿、是否為空、求棧元素個數(shù)、進(jìn)棧和出棧等功能。 相關(guān)

    2024年02月07日
    瀏覽(92)
  • 《數(shù)據(jù)結(jié)構(gòu)、算法與應(yīng)用C++語言描述》-列車車廂重排問題

    《數(shù)據(jù)結(jié)構(gòu)、算法與應(yīng)用C++語言描述》-列車車廂重排問題

    完整可編譯運(yùn)行代碼見:Github::Data-Structures-Algorithms-and-Applications/_10Train_carriages_rearrangement/ 一列貨運(yùn)列車有 n 節(jié)車廂,每節(jié)車廂要??吭诓煌能囌尽<僭O(shè) n個車站從 1 到n 編號,而且貨運(yùn)列車按照從n到1的順序經(jīng)過車站。車廂的編號與它們要??康能囌揪幪栂嗤?。為了便于從

    2024年04月10日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包