概述
前面实现了栈的基本数据结构,这里来做一个联系,用栈来解决一道比较常见的算法题,就是括号配对是否满足规则。
实现
描述
给定一组括号,判断是否满足配对。
代码
c
#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
#define bool char
#define true 1
#define MAX_LEN 10
#define false 0
typedef char ElementType;
typedef struct Stack {
int top;
ElementType stackList[MAX_LEN];
} Stack;
bool fn(char arr[], int len, Stack* S);
bool push(Stack* S, ElementType data);
bool pop(Stack* S, ElementType* x);
bool intStack(Stack* S);
int main() {
Stack S;
intStack(&S);
char brackList[] = {'(', '{','(',')','}','{','}','}' };
printf("%d", fn(brackList, sizeof(brackList) / sizeof(brackList[0]), &S));
}
bool fn(char arr[], int len, Stack* S) {
for (int i = 0; i < len; i++) {
if (arr[i] == '{' || arr[i] == '(') {
push(S,arr[i]);
printf("%c", arr[i]);
}
else {
if (S->top == 0) {
return false;
}
ElementType topData;
pop(S, &topData);
if (topData == '(' && arr[i] != ')') {
return false;
}
else if (topData == '{' && arr[i] != '}') {
return false;
}
}
}
if (S->top == 0) {
return true;
}
return false;
}
//初始化
bool intStack(Stack* S) {
for (int i = 0; i < MAX_LEN; i++) {
S->stackList[i] = 0;
}
S->top = 0;
return true;
}
//入栈
bool push(Stack* S,ElementType data) {
S->top++;
S->stackList[S->top] = data;
return true;
}
//出栈
bool pop(Stack* S, ElementType *x) {
*x = S->stackList[S->top];
S->stackList[S->top] = 0;
S->top--;
return true;
}