stack宣告見前文:
括號匹配思路:乙個指標遍歷串,如是左括號入棧,右括號則出棧並於當前指標比較是否匹配。再指標指向\0,並且棧為空時才是匹配模式匹配串類似 「(()()abc)」
//匹配成功返回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 左右括號匹配正確 實現思想 定義乙個棧,遇到左括號時就入棧,遇到右括號...