帮我用c++写一个栈的实现及应用的代码
时间: 2024-02-18 17:06:13 浏览: 80
好的,以下是C++中用数组实现栈的代码,并包含了一个简单的应用:栈的应用场景:括号匹配问题。
```c++
#include <iostream>
using namespace std;
const int MAXSIZE = 100; // 定义栈的最大容量
class Stack {
private:
int data[MAXSIZE]; // 栈的数据存储区
int top; // 栈顶指针,-1表示空栈
public:
Stack() { top = -1; } // 构造函数,初始化top为-1
bool is_empty() { return top == -1; } // 判断栈是否为空
bool is_full() { return top == MAXSIZE-1; } // 判断栈是否已满
void push(int x) { // 入栈
if (is_full()) {
cout << "栈已满,无法入栈!" << endl;
return;
}
data[++top] = x;
}
int pop() { // 出栈
if (is_empty()) {
cout << "栈已空,无法出栈!" << endl;
return -1;
}
return data[top--];
}
int peek() { // 查看栈顶元素
if (is_empty()) {
cout << "栈已空,无法查看栈顶元素!" << endl;
return -1;
}
return data[top];
}
};
bool is_match(char c1, char c2) { // 判断括号是否匹配
if (c1 == '(' && c2 == ')')
return true;
if (c1 == '[' && c2 == ']')
return true;
if (c1 == '{' && c2 == '}')
return true;
return false;
}
bool is_valid(string s) { // 判断括号是否合法
Stack stack;
for (int i = 0; i < s.length(); i++) {
char c = s[i];
if (c == '(' || c == '[' || c == '{') // 左括号入栈
stack.push(c);
else if (c == ')' || c == ']' || c == '}') { // 右括号出栈
if (stack.is_empty() || !is_match(stack.peek(), c))
return false;
stack.pop();
}
}
return stack.is_empty(); // 判断栈是否为空
}
int main() {
string s = "([])(){}";
if (is_valid(s))
cout << "括号匹配成功!" << endl;
else
cout << "括号匹配失败!" << endl;
return 0;
}
```
以上代码实现了栈的基本操作,并且还包含了一个简单的应用:判断括号是否匹配。
阅读全文