當我們學習了棧這種資料結構滯後,我們就可以利用棧來解決一些實際問題。
這裡是我們給出的動態順序棧的實現
template< class t>
class stack
void push(const t& data)
void pop()
bool empty()
t& top()
t& top()const
size_t size()
size_t capacity()
void _checkcapacity()
_capacity = _size * 2 + 3;
delete _array;
_array = newarray;
}
} ~stack()
private:
t * _array;
int _size;
int _capacity;
};
1.括號匹配問題
char a = "(())abc";//左右括號次序不對
char b = "(()))abc";//右括號多於左括號
char c = "(()()abc";//左括號多於右括號
char d = "(())abc";///左右括號正確
bool matchbrackets(char* c,int size)
else if (c[i] == ')' || c[i] == ']' || c[i] == '}')
else
'&&ch.top() == '
else }
} else }
if (ch.empty())
else
}2.逆波蘭表示式問題
實現**:
enum op ;
typedef struct cellcell;
int rpn(cell*s, int size)
else if (s[i]._op == operator)
}} return c.top();
}
下面我們給出 表示式:
cell a = ,,,,,,,,,, };
即 表示式 12*(3+4)-6+8/2 =82;
來看程式執行結果:
結果正確。
棧解決 括號匹配問題和逆波蘭表示式
所需知識 棧 字串 思路分析 有如下四組字串 如何檢測左右括號順序與個數是否匹配 char a abc char b abc char c abc char d abc 1 解決 1 當讀到乙個左括號的字元,包括 時,檢測棧頂元素是否為與之匹配的左括號,若是,證明這一對括號匹配,將這個左括號出棧繼續...
括號匹配 逆波蘭函式(棧)
1.括號匹配 int isbrackets char ch 判斷括號函式 ch return0 void matchbrackets const char str ch stacktop s if ch str i ch str i str i 檢測當前括號是否與棧頂括號匹配 stackpop s ...
棧應用 括號匹配和逆波蘭表示式
stack宣告見前文 括號匹配 匹配串類似 abc 思路 乙個指標遍歷串,如是左括號入棧,右括號則出棧並於當前指標比較是否匹配。再指標指向 0,並且棧為空時才是匹配模式 匹配成功返回1 int match brackets const char string stack s init s 考慮左括號...