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

2021-09-29 02:56:25 字數 2381 閱讀 7682

括號匹配問題

問題:假設乙個演算法表示式種包含圓括號、方括號、花括號三種型別的括號,編寫乙個函式,用來判斷表示式種的括號是否正確配對。

括號匹配有四種情況:

(1)右括號多於左括號

(2)左右括號次序匹配不正確

(3)左括號多於右括號

(4)左右括號匹配正確

實現思想 :定義乙個棧,遇到左括號時就入棧,遇到右括號時便令棧頂店的左右括號進行匹配

當棧為空,右括號多於左括號

當字串遍歷結束時,棧不為空,左括號多於右括號

當棧頂的左括號和右括號不匹配時,次序不匹配

當字串遍歷結束後,棧為空,匹配正確

#include

using namespace std;

#include

#include

stack<

char

> s;

bool isbrackets

(char e)

//判斷字元是否為空')

return true;

return false;

}bool matchbrackets

(char

* pstr)

char c = s.

top();

if(c ==

'('&& c ==

')'|| c ==

'['&& c ==

']'|| c =='')

s.pop();

else}}

}if(!s.

empty()

) cout <<

"左右括號匹配正確"

<< endl;

return true;

}int

main()

逆波蘭表示式

逆波蘭表示式也叫字尾表示式,先運算元,後操作符。

實現原理:棧後進先出 ,順序遍歷波蘭表示式,遇到運算元的時候入棧 , 遇到操作符,先讓運算元出棧運算運算元,然後再把運算結果入棧,所有的算式都可以用逆波蘭表示式寫出來

#ifndef __reverse_order_expression_h__

//12*(3+4)-6+8/2 -----> 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))

;system

("pause");

return0;

}#endif

棧的應用 括號匹配問題

typedef struct stack stack,pstack 單向鏈式儲存結構 void pushstack pstack stack,char str 左括號入棧 bool popstack pstack stack,char str 左括號出棧 非常簡單的出入棧操作 這裡就說下進棧操作不用...

括號匹配問題 棧的應用

pragma once ifndef stack h define stack h define datatype char define max size 20 typedef struct stack stack 初始化棧 void stackinit stack s 壓棧 void stack...

括號匹配問題(棧的應用)

時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述 現在,有一行括號序列,請你檢查這行括號是否配對。輸入第一行輸入乙個數n 0輸出 每組輸入資料的輸出佔一行,如果該字串中所含的括號是配對的,則輸出yes,如果不配對則輸出no 樣例輸入 3 樣例輸出 no noyes 先了解一下棧...