合肥網(wǎng)站制作公司有哪些公司寧波seo企業(yè)網(wǎng)絡(luò)推廣
### 思路
1. **初始化棧**:創(chuàng)建一個(gè)空棧用于存儲(chǔ)左括號(hào)。
2. **遍歷字符串**:逐個(gè)字符檢查:
? ?- 如果是左括號(hào)(`(` 或 `[`),則入棧。
? ?- 如果是右括號(hào)(`)` 或 `]`),則檢查棧是否為空:
? ? ?- 如果棧為空,說明缺少左括號(hào),輸出錯(cuò)誤信息。
? ? ?- 如果棧不為空,彈出棧頂元素并檢查是否匹配:
? ? ? ?- 如果匹配,繼續(xù)檢查下一個(gè)字符。
? ? ? ?- 如果不匹配,輸出錯(cuò)誤信息。
3. **檢查棧是否為空**:遍歷結(jié)束后,如果棧為空,說明括號(hào)匹配;否則,說明缺少右括號(hào)。
### 偽代碼
```
function InitStack(S):
? ? allocate memory for S.base of size STACK_INIT_SIZE
? ? S.top = S.base
? ? S.stacksize = STACK_INIT_SIZE
? ? return OK
function StackEmpty(S):
? ? return S.top == S.base
function Push(S, e):
? ? if S.top - S.base >= S.stacksize:
? ? ? ? reallocate memory for S.base with size S.stacksize + STACKINCREMENT
? ? ? ? S.top = S.base + S.stacksize
? ? ? ? S.stacksize += STACKINCREMENT
? ? S.top = e
? ? S.top += 1
? ? return OK
function Pop(S, e):
? ? if S.top == S.base:
? ? ? ? return ERROR
? ? S.top -= 1
? ? e = S.top
? ? return OK
function check():
? ? initialize stack s
? ? read input string ch
? ? p = ch
? ? while *p:
? ? ? ? if *p is '(' or '[':
? ? ? ? ? ? Push(s, *p)
? ? ? ? else if *p is ')' or ']':
? ? ? ? ? ? if StackEmpty(s):
? ? ? ? ? ? ? ? print "lack of left parenthesis"
? ? ? ? ? ? ? ? exit(ERROR)
? ? ? ? ? ? Pop(s, e)
? ? ? ? ? ? if (*p is ')' and e is not '(') or (*p is ']' and e is not '['):
? ? ? ? ? ? ? ? print "isn't matched pairs"
? ? ? ? ? ? ? ? exit(ERROR)
? ? ? ? p += 1
? ? if StackEmpty(s):
? ? ? ? print "matching"
? ? else:
? ? ? ? print "lack of right parenthesis"
```
### C++代碼
?
#include <iostream>
#include <cstdlib>
using namespace std;typedef char SElemType;
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int Status;
#define STACK_INIT_SIZE 10
#define STACKINCREMENT 2struct SqStack {SElemType *base;SElemType *top;int stacksize;
};Status InitStack(SqStack &S) {S.base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));if (!S.base) exit(ERROR);S.top = S.base;S.stacksize = STACK_INIT_SIZE;return OK;
}Status StackEmpty(SqStack S) {return S.top == S.base ? TRUE : FALSE;
}Status Push(SqStack &S, SElemType e) {if (S.top - S.base >= S.stacksize) {S.base = (SElemType *)realloc(S.base, (S.stacksize + STACKINCREMENT) * sizeof(SElemType));if (!S.base) exit(ERROR);S.top = S.base + S.stacksize;S.stacksize += STACKINCREMENT;}*S.top++ = e;return OK;
}Status Pop(SqStack &S, SElemType &e) {if (S.top == S.base) return ERROR;e = *--S.top;return OK;
}void check() {SqStack s;SElemType ch[80], *p, e;if (InitStack(s)) {cin >> ch;p = ch;while (*p) {switch (*p) {case '(':case '[':Push(s, *p);p++;break;case ')':case ']':if (!StackEmpty(s)) {Pop(s, e);if ((*p == ')' && e != '(') || (*p == ']' && e != '[')) {cout << "isn't matched pairs" << endl;exit(ERROR);} else {p++;break;}} else {cout << "lack of left parenthesis" << endl;exit(ERROR);}default:p++;}}if (StackEmpty(s))cout << "matching" << endl;elsecout << "lack of right parenthesis" << endl;}
}int main() {check();return 0;
}