动态堆栈类及括号匹配(考察类的构建与应用)

前言

NWAFU OOP02_02


一、题目描述

Description

设计一个动态字符堆栈类,要求堆栈可存储的字符数量可动态扩展,在构造函数中使用new进行初始堆栈空间内存分配,在析构函数中采用delete释放内存,堆栈类框架如下所示:

class CStack
{
		char *s;
		int tp;
		int size;
	public:
		CStack(int initSize = 5);
		~CStack();
		bool isEmpty();
		bool isFull();
		void push(char c);
		char pop();
		char top();

};

编码完善上述动态字符堆栈类,基于此堆栈类,判断一个字符串中的括号是否正确匹配。如输入"{[(1+2)/(3+4)*5-3]*2}/3-4",则字符串中的括号匹配,若输入"[(])",则字符串中的括号不匹配。

Input

采用getline(cin, string)读入一个可能包含"()[]{}"三种括号的字符串。

Output

判断输入字符串中的括号是否正确匹配,若正确匹配,输出"Balanced",否则输出"Not balanced"。

Sample Input 1 

{[9+(3-1)*3+10]-5}/2

Sample Output 1

Balanced

Sample Input 2 

int main(){int a;cin >> a; if (a==0)cout << "Hello world!" << endl;else cout << "Hello China!" << endl;

Sample Output 2

Not balanced

二、设计步骤

代码实现:

#include <iostream>
#include <string>
using namespace std;

class CStack {
    char *s;
    int tp;
    int size;

public:
    CStack(int initSize = 5);
    ~CStack();
    bool isEmpty();
    bool isFull();
    void push(char c);
    char pop();
    char top();
};

CStack::CStack(int initSize) {
    size = initSize;
    s = new char[size];
    tp = -1;
}

CStack::~CStack() {
    delete[] s;
}

bool CStack::isEmpty() {
    return (tp == -1);
}

bool CStack::isFull() {
    return (tp == size - 1);
}

void CStack::push(char c) {
    if (isFull()) {
        int newSize = size * 2;
        char *newS = new char[newSize];
        for (int i = 0; i < size; ++i) {
            newS[i] = s[i];
        }
        delete[] s;
        s = newS;
        size = newSize;
    }
    s[++tp] = c;
}

char CStack::pop() {
    if (isEmpty()) {
        return '\0'; 
    }
    return s[tp--];
}

char CStack::top() {
    if (isEmpty()) {
        return '\0'; 
    }
    return s[tp];
}

bool isMatchingPair(char character1, char character2) {
    if (character1 == '(' && character2 == ')')
        return true;
    else if (character1 == '[' && character2 == ']')
        return true;
    else if (character1 == '{' && character2 == '}')
        return true;
    else
        return false;
}

bool isBalanced(string exp) {
    CStack stack(exp.length());
    for (int i = 0; i < exp.length(); i++) {
        if (exp[i] == '(' || exp[i] == '[' || exp[i] == '{')
            stack.push(exp[i]);
        else if (exp[i] == ')' || exp[i] == ']' || exp[i] == '}') {
            if (stack.isEmpty() || !isMatchingPair(stack.pop(), exp[i]))
                return false;
        }
    }
    return stack.isEmpty();
}

int main() {
    string expression;
    getline(cin, expression);
    if (isBalanced(expression))
        cout << "Balanced";
    else
        cout << "Not balanced";
    return 0;
}

总结

EOF

相关推荐

  1. 动态堆栈括号匹配(考察构建应用)

    2024-03-30 15:54:05       18 阅读
  2. 简单应用括号匹配

    2024-03-30 15:54:05       13 阅读
  3. C#使用自定义方法设计堆栈

    2024-03-30 15:54:05       22 阅读
  4. 对象\对象应用

    2024-03-30 15:54:05       20 阅读
  5. 分布工具定义实现测试。

    2024-03-30 15:54:05       44 阅读
  6. 模板继承成员、全局函数实现

    2024-03-30 15:54:05       20 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-30 15:54:05       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-30 15:54:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-30 15:54:05       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-30 15:54:05       20 阅读

热门阅读

  1. python知识点记录

    2024-03-30 15:54:05       21 阅读
  2. JVM基础

    JVM基础

    2024-03-30 15:54:05      18 阅读
  3. contextlib.redirect_stdout 使用

    2024-03-30 15:54:05       16 阅读
  4. docker-compose运行mysql

    2024-03-30 15:54:05       15 阅读
  5. 算法——图论:判断二分图(染色问题)

    2024-03-30 15:54:05       19 阅读
  6. 什么是站群服务器?

    2024-03-30 15:54:05       16 阅读
  7. vue3父子组件之间的传值方式

    2024-03-30 15:54:05       22 阅读
  8. C# 到异常处理 暂时告一段落 开始窗体的学习

    2024-03-30 15:54:05       20 阅读
  9. 每日一题:C语言经典例题之鸡兔同笼

    2024-03-30 15:54:05       20 阅读
  10. Grok - X AI 314B大模型

    2024-03-30 15:54:05       26 阅读
  11. 【SQL】COUNT()函数 用法详解

    2024-03-30 15:54:05       23 阅读
  12. C#面:简述抽象函数(方法)

    2024-03-30 15:54:05       22 阅读
  13. 【PostgreSQL】- 1.2 PostgreSQL 配置单独的数据库存储

    2024-03-30 15:54:05       23 阅读
  14. 【EBS】ORACLE EBS R12财务月结基础

    2024-03-30 15:54:05       21 阅读