数据结构括号匹配栈的实现
- 首先是一些基本的定义
#include <iostream>
#include<stdlib.h>
#include<cstring>
#define MAXSIZE 100
#define INCREASE 10
using namespace std;
typedef char ElemType;
typedef void status;
- 数据结构的定义
typedef struct {
ElemType* base;
//base是基地址,指向栈底,top指向栈顶的上一个位置
ElemType* top;
int size;
}Stack;
3.基本操作
status InitStack(Stack& stack)
{
stack.base = (ElemType*)malloc(MAXSIZE * sizeof(Stack));
//开辟顺序存储的空间
stack.top = stack.base;
//初始状态,栈的头和基地址指向同一个位置;
stack.size = MAXSIZE;
}
//取栈顶元素
status GetTop(Stack s, ElemType& e)
{
if (s.base == s.top)
{
cout << "空栈";
return;
}
e = *(s.top - 1);
}
//元素入栈
status push(Stack& s, ElemType e)
{
if (s.top - s.base >= MAXSIZE)
{
s.base = (ElemType*)realloc(s.base, (s.size + INCREASE) * sizeof(Stack));
s.top = s.base + INCREASE;
s.size += INCREASE;
}
*(s.top++) = e;
}
//出栈
status pop(Stack& s,ElemType& e)
{
if (s.top == s.base)
{
cout << "空的";
return;
}
e = *(--s.top);
}
//判断是否为空
bool IsEmpty(Stack s)
{
return s.top == s.base;
}
4.最后是主函数的部分。有问题欢迎讨论哦。
int main()
{
Stack myStack;
InitStack(myStack);
int i;
//括号匹配
string str;
cin >> str;
ElemType e;
char left='(';
char right = ')';
int len = str.length();
for (i = 0; i < len; i++)
{
if (str[i] != left && str[i] != right)
{
return 0;
cout << "输入了不是括号的字符" << endl;
}
if(IsEmpty(myStack)||str[i]==left)
push(myStack, str[i]);
else //输入一个右括号
{
GetTop(myStack, e);
if (e == left)
pop(myStack, e);
else
push(myStack, str[i]);
}
}
if (IsEmpty(myStack))
cout << "匹配";
else
cout << "不匹配";
return 0;
}