資料結構 括號匹配

2021-10-05 06:28:51 字數 1843 閱讀 2539

利用棧來實現字串的左右括號匹配

思路:

對於字串遍歷

左括號字元入棧

遇到右括號字元就從棧頂彈出原素

彈出和右括號進行匹配

如果匹配成功繼續 匹配不成果報錯

注意

入棧的是字串的位址 不能說會變的臨時變數

接字串時需要用char*型別去接 並且進行強制型別轉換

匹配的時候再用*out表示彈出元素取位址 為char型別變數

#include

#include

#include

#include

"stacklink.h"

//學會呼叫之前寫的函式

stacklist*

stack_creat()

void

stack_clear

(stacklist* stack)

//注意 清空時把之前的元素都彈出去 (釋放節點記憶體)

while

(stack_length

(stack)!=0

)return;}

void

stack_destory

(stacklist* stack)

stack_clear

(stack)

;//先把元素清零

link_destory

(stack)

;//銷毀該鍊錶 當做鍊錶型別銷毀

stack =

null;}

intstack_length

(stacklist* stack)

intstack_push

(stacklist* stack,

void

* item)

tmp->item = item;

//把元素的首位址賦值給成員變數 把變數給掛到節點上

int ret;

ret =

link_insert

(stack,

(linknode*

)tmp,0)

;//注意 型別轉換

if(ret !=0)

return ret;

}void

*stack_pop

(stacklist* stack)

void

* ret =

null

; stacknode* lnode =

null

; lnode =

(stacknode*

)link_delete

(stack,0)

; ret = lnode->item;

//傳出來位址 快取到ret中 不是在這個函式裡分配的記憶體定義的變數 還得傳出到呼叫他的函式中

if(lnode !=

null

)//注意 釋放insert中建立的記憶體

return ret;

}void

*stack_get

(stacklist* stack)

void

* ret =

null

; stacknode* lnode =

null

; lnode =

(stacknode*

)link_get

(stack,0)

; ret = lnode->item;

//傳出來位址 快取到ret中 不是在這個函式裡分配的記憶體定義的變數 還得傳出到呼叫他的函式中

return ret;

}

資料結構 括號匹配

三種括號形式 輸入一段字串,判斷其括號是否匹配。如下 括號匹配問題 include include include define stack init size 100 define stackincrement 10 define error 0 define true 1 define fals...

資料結構 括號匹配問題

給定乙個字串,其中的字元只包含三種括號 花括號 中括號 圓括號 即它僅由 這六個字元組成。設計演算法,判斷該字串是否有效,即字串中括號是否匹配。括號匹配要求括號必須以正確的順序配對,如 或 等為正確的格式,而 或 或 均為不正確的格式。這個問題可以用棧stack來解決,具體的 如下 pragma o...

資料結構作業 括號匹配

include include include define max 128 宣告堆疊元素 儲存左括號的型別和位置 struct brackets struct brackets stack max 定義棧 int top 0 定義棧頂且初始化 int ispaired 定義配對標誌位 void p...