stack解決括號問題

2021-09-27 12:14:02 字數 2253 閱讀 1195

問題描述:

write a program to implement 「parse parentheses」 (algorithm 3-9, discussed in the class),

matching braces rather than parentheses. in your implementation, push the line number

into the stack rather than the opening brace. when an error occurs, print the line number

for the unmatched opening brace or unmatched closing brace.

**:#include

#include

#include

#define maxsize 100

typedef char sdatatype;

typedef struct stack

int top;

sdatatype _arry[maxsize];

}stack;

int isbrackets(char arry, int i)

if (('(' == arry[i]) || (')' == arry[i]) || ('[' == arry[i]) || (']' == arry[i]) || ('' == arry[i]))

return 1;//是括號

else

return 0;

int stacksize(stack* ps)

assert(ps != null);

return ps->top;

void stackpush(stack* ps, sdatatype data)

assert(ps != null);

if (ps->top == maxsize)

return;

else

ps->_arry[ps->top] = data;

ps->top++;

void stackpop(stack* ps)

assert(ps != null);

if (ps->top)

ps->top--;

int stackempty(stack* ps)

assert(ps != null);

if (0 == ps->top)

return 1;

else

return 0;

void stackinit(stack* ps)

assert(ps != null);

ps->top = 0;

void matchbrackets(stack* ps, int sz, char arry)

int i = 0;

int k = 0;//因為傳的是指標,所以要定義乙個形參

assert(ps != null);

//char ch = 0;

while (i < sz)

printf("arry[i]: %c", arry[i]);

if (isbrackets(arry, i))//是括號

//如果是左括號,入棧

if (('(' == arry[i]) || ('[' == arry[i]) || ('' == arry[i]))

if (0 == ps->top) //判斷棧是否為空,若為空,則右括號比左括號多

printf("右括號比左括號多!\n");

return;

else

k = ps->top;

char ch = ps->_arry[--k];

if (((')' == arry[i]) && ('(' == ch)) ||

((']' == arry[i]) && ('[' == ch)) ||

(('}' == arry[i]) && ('";

int sz = 100, len;

stack ps;

stackinit(&ps);

len = stacksize(&ps);

printf("len: %d\n", len);

char data = 'a';

//stackpush(&ps, data);

matchbrackets(&ps, sz, arry);

len = stacksize(&ps);

printf("len: %d\n", len);

括號匹配問題 stack的利用

題目 擴號匹配問題 poj.grids.cn 描述 在某個字串 長度不超過100 中有左括號 右括號和大小寫字母 規定 與常見的算術式子一樣 任何乙個左括號都從內到外與在它右邊且距離最近的右括號匹配。其中不能匹配的左括號用 標註,不能匹配的右括號用 標註 關於輸入 第一行乙個正整數n,表示資料的組數...

nyoj 2 括號配對問題 stack

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

NYOJ 2 括號配對問題(棧stack)

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