【数据结构四】栈的应用和矩阵的压缩存储

147 阅读1分钟

栈的应用

(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)表达式求值

图片.png

图片.png

图片.png

图片.png

图片.png

图片.png

(3)递归

图片.png

图片.png

矩阵的压缩存储

图片.png

OS:说实话,这一节的话,不是很理解。主要是关于线性代数那方面的。 图片.png