数据结构栈的实现以及基本操作(括号匹配

数据结构括号匹配栈的实现

  1. 首先是一些基本的定义
#include <iostream>
#include<stdlib.h>
#include<cstring>
#define MAXSIZE 100
#define INCREASE 10
using namespace std;

typedef char ElemType;
typedef void status;
  1. 数据结构的定义
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;

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值