所需知識
棧❀思路分析字串
有如下四組字串
如何檢測左右括號順序與個數是否匹配
char a = "(())abc";
char b = "(()))abc";
char c = "(()()abc";
char d = "(())abc";
1、解決:
(1)、當讀到乙個左括號的字元,包括『(』,『』,』]』時,檢測棧頂元素是否為與之匹配的左括號,若是,證明這一對括號匹配,將這個左括號出棧繼續檢測,檢測到其他字元,如字母數字,直接跳過,不做任何處理。
(2)、左右括號不匹配:如果檢測到右括號時,取棧頂元素中的左括號,發現不是與之對應的左括號,說明不匹配。
(3)、右括號比左括號多:如果檢測到右括號時,取棧頂元素中的左括號,發現棧已空,說明右括號多餘左括號。
(4)、左括號比右括號多:當所有字元都已經讀完,發現棧內仍有左括號,說明左括號比右括號多。
(5)、匹配成功:當中間無其他情況發生,且讀完字元後,棧為空,說明匹配成功。
2、具體實現
#include
//括號匹配
#define max 20
typedef
char datatype;
typedef
struct stack
stack;
//初始化棧
void initstack(stack * s)
//取棧頂元素
datatype stacktop(stack * s)
return s->arr[s->top - 1];
}//清空棧
void empty(stack * s)
//入棧
void pushstack(stack * s, datatype c)
s->arr[s->top] = c;
s->top++;
}//判斷棧是否空,空返回1
int emptystack(stack *s)
//出棧
❀思路分析
以12*(3+4)-6+8/2 —–> 12 3 4 + *6 - 8 2/ +為例
(1)、讀到數字時,將數字壓棧
(2)、讀到+,-,*,/的操作符時,取出棧頂的前兩位數字,進行運算操作後,將其結果壓棧
具體實現
#ifndef __reverse_order_expression_h__
//逆波蘭表示式
//12*(3+4)-6+8/2 -----> 12 3 4 + *6 - 8 2/ +
#include
#include
#include
#define maxsize 15
typedef
enum operation
way;
typedef
int datatype;
typedef
struct cell
cell;
//進行逆波蘭填棧操作
//建立棧
typedef
struct stack
stack;
//棧的初始化
void initstack(stack * s)
//入棧
void pushstack(stack * s, datatype d)
s->data[s->top] = d;
s->top++;
}//取棧頂元素,並出棧
datatype topstack(stack *s)
s->top--;
return s->data[s->top];
}datatype order(cell arr,int size,stack *s)
case sub:
case mul:
case div:
case data:
default:}}
return topstack(s);
}int main()
, , ,
, , , , , , , };
int size = sizeof(arr) / sizeof(arr[0]);
initstack(&s);
printf("該表示式12*(3+4)-6+8/2 -----> 12 3 4 + *6 - 8 2/ +的值為%d \n", order(arr, size, &s));
利用棧解決括號匹配和逆波蘭表示式
當我們學習了棧這種資料結構滯後,我們就可以利用棧來解決一些實際問題。這裡是我們給出的動態順序棧的實現 template class t class stack void push const t data void pop bool empty t top t top const size t si...
括號匹配 逆波蘭函式(棧)
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 考慮左括號...