棧應用 括號匹配和逆波蘭表示式

2021-08-19 08:01:07 字數 1235 閱讀 8288

stack宣告見前文:

括號匹配

匹配串類似 「(()()abc)」

思路:乙個指標遍歷串,如是左括號入棧,右括號則出棧並於當前指標比較是否匹配。再指標指向\0,並且棧為空時才是匹配模式

//匹配成功返回1

int match_brackets(const

char * string)

stack s;

init(&s);

//考慮左括號多,右括號多,和括號型別順序不同三種情況

while (*string)

else

if (*string == ')' || *string == '}' || *string == ']') '&& tmp == '

else

}else

}//只有當字串掃瞄完了,並且棧中括號都匹配完了,才是正確匹配

if (isempty(&s))

return

0;}

逆波蘭表示式

運算元放前,操作符置後

例如 」 12 3 4 + * 6 - 8 2 / +」 = 12*(3+4)- 6 + 8/2

思路:指標遍歷串,如果是數字則入棧,操作符則取出兩個棧元素運算,然後入棧,指標指向空時返回棧頂值。

//錯誤串返回-1,其他返回表示式值

intexp(const

char* str)

char *low = str;

char *fast = str;

stack s;

init(&s);

//排除掉串前多個空格

while (*low && *low == ' ')

fast = low;

//開始處理

while (*fast)

pushback(&s, sum);

}else

if(*low=='+' || *low == '-' || *low == '*' || *low == '/')

fast++;

}else

//low和fast指向下乙個字元開頭

while (*fast && *fast == ' ')

low = fast;

}return top(&s);

}

利用棧解決括號匹配和逆波蘭表示式

當我們學習了棧這種資料結構滯後,我們就可以利用棧來解決一些實際問題。這裡是我們給出的動態順序棧的實現 template class t class stack void push const t data void pop bool empty t top t top const size t si...

棧解決 括號匹配問題和逆波蘭表示式

所需知識 棧 字串 思路分析 有如下四組字串 如何檢測左右括號順序與個數是否匹配 char a abc char b abc char c abc char d abc 1 解決 1 當讀到乙個左括號的字元,包括 時,檢測棧頂元素是否為與之匹配的左括號,若是,證明這一對括號匹配,將這個左括號出棧繼續...

棧的簡單應用 括號匹配問題和逆波蘭表示式

括號匹配問題 問題 假設乙個演算法表示式種包含圓括號 方括號 花括號三種型別的括號,編寫乙個函式,用來判斷表示式種的括號是否正確配對。括號匹配有四種情況 1 右括號多於左括號 2 左右括號次序匹配不正確 3 左括號多於右括號 4 左右括號匹配正確 實現思想 定義乙個棧,遇到左括號時就入棧,遇到右括號...