栈的应用
(1)括号匹配
//----------顺序栈实现括号匹配
#define MaxSize 10 //定义栈中元素的最大个数
typedef struct{
char data[MaxSize]; //用静态数组存放栈中元素
int top; //栈顶指针
}SqStack;
//初始化栈
void InitStack(SqStack &S){
S.top = -1;
}
//判断栈是否为空
bool StackEmpty(SqStack S) {
return (S.top == -1);
}
//新元素入栈
bool Push(SqStack &S, char x){
if(S.top == MaxSize-1) //栈满
return false;
S.top = S.top + 1;
S.data[S.top] = x;
}
//栈顶元素出栈,用x返回
bool Pop(SqStack &S, char &x){
if(S.top == -1) return false; // 栈为空
x = S.data[S.top];
S.top = S.top - 1;
return true;
}
bool bracketCheck(char str[], int length){
SqStack S;
//初始化栈
InitStack(S);
for(int i = 0; i<length; i++){
if(str[i] == '(' || str[i] == '{' || str[i] == '['){
Push(S, str[i]); // 扫描到左括号,入栈
} else {
if(StackEmpty(S)) //扫描到右括号,且当前栈为空
return false;
char topElem;
Pop(S, topElem); //栈顶元素出栈
if(str[i] == ')' && topElem != '(')
return false;
if(str[i] == '}' && topElem != '{')
return false;
if(str[i] == ']' && topElem != '[')
return false;
}
}
return StackEmpty(S); //检索完全部括号后,栈空说明匹配成功
}
(2)表达式求值
(3)递归
矩阵的压缩存储
OS:说实话,这一节的话,不是很理解。主要是关于线性代数那方面的。