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

2021-08-10 17:03:10 字數 1385 閱讀 4073

當我們學習了棧這種資料結構滯後,我們就可以利用棧來解決一些實際問題。

這裡是我們給出的動態順序棧的實現

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 考慮左括號...