堆栈可以用数组来表示,假设堆栈可保存的数据类型为char。那么堆栈数据成员如下: char element[MAXSIZE]; int index; //堆栈指针 堆栈相关的成员函数如下: void push(char item); //元素item进栈,即插入item到栈顶; void pop( ); //弹出栈顶元素; char top(); //返回栈顶元素的值,但不移动栈顶指针; bool isEmpty(); //判断堆栈是否为空 解决问题: (1)根据上述提示实现一个堆栈;注意栈空和栈满情况的处理; (2)堆栈在计算机语言中的编译过程中用来进行语法检查,编写一个程序,利用堆栈来检查一个C/C++语言程序中的花括号、方括号和圆括号是否配对。要求c++实现
时间: 2023-06-26 11:04:07 浏览: 117
下面是一个基于数组实现的堆栈的C++代码:
```cpp
#include <iostream>
using namespace std;
const int MAXSIZE = 100; // 堆栈最大容量
class Stack {
private:
char element[MAXSIZE]; // 堆栈数据
int index; // 堆栈指针
public:
Stack() { index = -1; } // 构造函数,初始化堆栈指针
void push(char item); // 压栈操作
void pop(); // 出栈操作
char top(); // 取栈顶元素
bool isEmpty(); // 判断堆栈是否为空
};
void Stack::push(char item) {
if (index >= MAXSIZE-1) {
cout << "Error: Stack is full!" << endl;
return;
}
index++;
element[index] = item;
}
void Stack::pop() {
if (index < 0) {
cout << "Error: Stack is empty!" << endl;
return;
}
index--;
}
char Stack::top() {
if (index < 0) {
cout << "Error: Stack is empty!" << endl;
return '\0';
}
return element[index];
}
bool Stack::isEmpty() {
return (index < 0);
}
int main() {
Stack s; // 创建一个堆栈对象
char str[MAXSIZE];
cout << "请输入一个包含花括号、方括号和圆括号的程序代码:";
cin.getline(str, MAXSIZE);
for (int i = 0; str[i] != '\0'; i++) {
if (str[i] == '(' || str[i] == '[' || str[i] == '{') {
s.push(str[i]); // 左括号入栈
} else if (str[i] == ')' || str[i] == ']' || str[i] == '}') {
char c = s.top();
if ((str[i] == ')' && c == '(') ||
(str[i] == ']' && c == '[') ||
(str[i] == '}' && c == '{')) {
s.pop(); // 匹配成功,右括号出栈
} else {
cout << "Error: Brackets do not match!" << endl;
return 0;
}
}
}
if (s.isEmpty()) {
cout << "Brackets match!" << endl;
} else {
cout << "Error: Brackets do not match!" << endl;
}
return 0;
}
```
该代码可以检查一个C/C++语言程序中的花括号、方括号和圆括号是否配对,如果匹配成功,输出"Brackets match!",否则输出"Error: Brackets do not match!"。
阅读全文