利用棧來實現字串的左右括號匹配
思路:
對於字串遍歷
左括號字元入棧
遇到右括號字元就從棧頂彈出原素
彈出和右括號進行匹配
如果匹配成功繼續 匹配不成果報錯
注意
入棧的是字串的位址 不能說會變的臨時變數
接字串時需要用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...