棧的應用 括號匹配問題

2021-07-26 10:03:10 字數 1848 閱讀 4620

typedef struct stack

stack,*pstack;

單向鏈式儲存結構

void pushstack(pstack stack, char* str) //左括號入棧

bool popstack(pstack stack, char* str)//左括號出棧

非常簡單的出入棧操作 這裡就說下進棧操作不用加判棧滿操作是因為 畢竟是繩不是杯 只要記憶體有空間就能進棧 所以不加判滿

bool getstacktop(const pstack stack, char* str)//取棧頂操作

bool veriyop(const char *str1,const char*str2)//檢驗括號是否匹配

') return true;

else return false;

case '[':

if ((*str2) == ']') return true;

else return false;}}

檢驗棧頂括號是否與檢測括號匹配  *str1棧頂左括號,*str2是待檢測的右括號  成功匹配返回真

下面就是主要解決過程

首先判斷括號數是否是奇數,奇數情況直接返回錯誤,終止。

否則,依次取括號判斷入棧、匹配。

bool operators(char * str)//括號匹配solution

//累計計算括號個數 

if (*(str + i) == '\0'&&i % 2)//括號個數若為奇數 直接返回 不入棧

for (i = 0; *(str + i) != '\0'; ++i)

':case ']':

case ')':

if (!popstack(a, &topch)|!veriyop(&topch, str + i))//檢驗括號是否匹配操作,其中兩個判斷條件位置順序不可交換

break;

default:

break;}}

return true;

}

typedef struct stack

stack,*pstack;

void initstack(pstack stack)//初始化

void pushstack(pstack stack, char* str) //左括號入棧

bool popstack(pstack stack, char* str)//左括號出棧

bool getstacktop(const pstack stack, char* str)//取棧頂操作

bool veriyop(const char *str1,const char*str2)//檢驗括號是否匹配

') return true;

else return false;

case '[':

if ((*str2) == ']') return true;

else return false; }}

bool operators(char * str)//括號匹配solution

//累計計算括號個數

if (*(str + i) == '\0'&&i % 2)//括號個數若為奇數 直接返回 不入棧

for (i = 0; *(str + i) != '\0'; ++i)

': case ']':

case ')':

if (!popstack(a, &topch)|!veriyop(&topch, str + i))//檢驗括號是否匹配操作,其中兩個判斷條件位置順序不可交換

break;

default:

break;

} }return true;

}

括號匹配問題 棧的應用

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 先了解一下棧...

括號匹配問題 棧的應用

黑馬教程 給定乙個字串,裡邊可能包含 和其它字元,編寫程式檢查字串中的小括號是否成對出現。例如 上海 長安 正確匹配 上海 長安 正確匹配 上海 長安 北京 深圳 南京 正確匹配 上海 長安 錯誤匹配 上海 長安 錯誤匹配利用棧來解決。遍歷字串,如果遇到 則將其壓入棧中,如果遇到 則做乙個彈棧的動作...