資料結構 棧與佇列(一) 括號匹配

2021-10-02 17:45:15 字數 3142 閱讀 6043

candela是一名漫畫家,她有乙個奇特的愛好,就是在紙上畫括號。這一天,剛剛起床的candela畫了一排括號序列,其中包含小括號()、中括號和大括號{},總長度為n。這排隨意繪製的括號序列顯得雜亂無章,於是candela定義了什麼樣的括號序列是美觀的:

(1) 空的括號序列是美觀的;

(2) 若括號序列a是美觀的,則括號序列(a)、[a]、也是美觀的;

(3)若括號序列a、b都是美觀的,則括號序列ab也是美觀的; 例如 ()() 是美觀的括號序列,而 )(]( 則不是。

現在candela想知道她畫出的括號序列是不是美觀的。你能幫幫她嗎?

1.1輸入
乙個括號序列,長度不超過10000。

1.2輸出
如果它是美觀的,輸出yes,否則輸出no。

1.3樣例輸入和輸出
樣例輸入

( ) ( )

樣例輸出

yes

c

#include

#include

#include

typedef

char elemtype;

typedef

struct

stack;

//初始化乙個空棧。空棧擁有10000個元素的空間,棧頂值為 -1

void

init

(stack *pstack)

//把x入棧

void

push

(stack *pstack,elemtype x)

free

(pstack->base)

; pstack->base=b;

}//如果輸入的元素沒有超出棧的最大限制,那麼將元素壓棧

pstack->base[

++pstack->top]

=x;}

//返回當前棧頂元素的值

elemtype top

(stack *pstack)

//當前棧頂元素出棧

void

pop(stack *pstack)

//判斷是否棧空,若空則返回 true,否則返回 false

bool empty

(stack *pstack)

//清空分配給棧的儲存空間

void

destroy

(stack *pstack)

intmain

(void)'

)else

'&&pstack->base[pstack->top]=='

else}}

}if(flag==true)

destroy

(pstack)

;return0;

}

這道題雖然說什麼美觀的括號,但其實就是利用棧實現括號的匹配,那我們首先就要搞清楚括號匹配和不匹配的型別:

1.匹配的型別就一種,我們利用棧的先進後出的特性,對括號從最內側進行匹配,如果到最後乙個元素輸入後,整個棧中沒有元素(匹配後元素就直接出棧刪除)的話,就是匹配的,輸出「yes」。

2.不匹配的型別有三種

2.1左括號多餘,也就是說在輸入資料結束後,最後乙個元素是括號的左半部分「(」,「」,「]」。那麼這個時候就是輸出「no」。

2.3括號不匹配,也就是說在輸入資料結束後,棧內元素的括號不能相互匹配,例如:「(}」,「])或()等均為正確的格式,而)}或均為不正確的格式.

輸入一串括號

如果輸入的右括號多餘,輸出:extra right brackets

如果輸入的左括號多餘,,輸出:extra leftbrackets

如果輸入的括號不匹配,輸出:brackets not match

如果輸入的括號匹配,輸出:brackets match

輸入

樣例輸出

brackets not match

這個時候我們只需要把上面的**稍微改一下輸出就可以了

c

#include

#include

#include

typedef

char elemtype;

typedef

struct

stack;

void

init

(stack *pstack)

//初始化乙個空棧。空棧擁有10個元素的空間,棧頂值為 -1

void

push

(stack *pstack, elemtype x)

//把 x 入棧

free

(pstack->base)

; pstack->base = b;

} pstack->base[

++pstack->top]

= x;

}elemtype top

(stack *pstack)

//返回當前棧頂元素的值

void

pop(stack *pstack)

//當前棧頂元素出棧

bool empty

(stack *pstack)

//如果棧空,則返回 true,否則返回 false

void

destroy

(stack *pstack)

//清空分配給棧的儲存空間

intmain

(void)'

)else

'&&pstack->base[pstack->top]=='

else}}

}if(flag == true)

destroy

(pstack)

;return0;

}

資料結構實驗之棧與佇列四 括號匹配

time limit 1000ms memory limit 65536kb submit statistic problem description 給你一串字元,不超過50個字元,可能包括括號 數字 字母 標點符號 空格,你的任務是檢查這一串字元中的 是否匹配。input 輸入資料有多組,處理到...

資料結構實驗之棧與佇列四 括號匹配

problem description 給你一串字元,不超過50個字元,可能包括括號 數字 字母 標點符號 空格,你的任務是檢查這一串字元中的 是否匹配。input 輸入資料有多組,處理到檔案結束。output 如果匹配就輸出 yes 不匹配輸出 no example input sin 20 10...

資料結構實驗之棧與佇列四 括號匹配

problem description 給你一串字元,不超過50個字元,可能包括括號 數字 字母 標點符號 空格,你的任務是檢查這一串字元中的 是否匹配。input 輸入資料有多組,處理到檔案結束。output 如果匹配就輸出 yes 不匹配輸出 no example input sin 20 10...