编写一个程序模拟堆栈,要求能够模拟、入栈、出栈、返回栈顶元素等基本操作。栈中元素可用整数代替。不能使用C++模板库预定义的类型。程序运行中可输入多组入栈、出栈操作,每次操作后展示栈中元素。
时间: 2024-03-18 19:40:31 浏览: 147
以下是一个模拟堆栈的程序,可以实现入栈、出栈、返回栈顶元素等操作,并支持多组操作:
```c++
#include <iostream>
using namespace std;
const int MAXSIZE = 100; // 栈的最大长度
class Stack {
public:
Stack() : top(-1) {} // 构造函数,初始化top为-1
bool push(int x); // 入栈操作
bool pop(); // 出栈操作
int peek(); // 返回栈顶元素
bool isEmpty(); // 判断栈是否为空
bool isFull(); // 判断栈是否已满
void display(); // 输出栈中元素
private:
int top; // 栈顶指针
int data[MAXSIZE]; // 栈中元素
};
bool Stack::push(int x) {
if (isFull()) { // 栈已满,无法入栈
return false;
}
data[++top] = x; // 更新栈顶指针,将元素入栈
return true;
}
bool Stack::pop() {
if (isEmpty()) { // 栈为空,无法出栈
return false;
}
top--; // 更新栈顶指针,将元素出栈
return true;
}
int Stack::peek() {
if (isEmpty()) { // 栈为空,无法返回栈顶元素
return -1;
}
return data[top]; // 返回栈顶元素
}
bool Stack::isEmpty() {
return (top == -1); // 判断栈是否为空
}
bool Stack::isFull() {
return (top == MAXSIZE - 1); // 判断栈是否已满
}
void Stack::display() {
if (isEmpty()) { // 栈为空,无法输出
cout << "Stack is empty." << endl;
return;
}
cout << "Stack: ";
for (int i = 0; i <= top; i++) {
cout << data[i] << " "; // 从栈底到栈顶,依次输出元素
}
cout << endl;
}
int main() {
Stack s; // 创建一个栈
char op; // 操作符,i表示入栈,o表示出栈,p表示返回栈顶元素
int x; // 入栈元素或返回元素
while (true) { // 反复执行,直到输入q退出
cout << "Enter operation (i/o/p/q): ";
cin >> op;
switch (op) {
case 'i': // 入栈操作
cout << "Enter element to push: ";
cin >> x;
if (s.push(x)) { // 入栈成功
cout << "Push element " << x << " to stack." << endl;
} else { // 入栈失败
cout << "Stack overflow." << endl;
}
s.display(); // 输出栈中元素
break;
case 'o': // 出栈操作
if (s.pop()) { // 出栈成功
cout << "Pop element " << s.peek() << " from stack." << endl;
} else { // 出栈失败
cout << "Stack underflow." << endl;
}
s.display(); // 输出栈中元素
break;
case 'p': // 返回栈顶元素
x = s.peek();
if (x != -1) { // 返回元素成功
cout << "Peek element is " << x << "." << endl;
} else { // 返回元素失败
cout << "Stack is empty." << endl;
}
s.display(); // 输出栈中元素
break;
case 'q': // 退出程序
cout << "Exit." << endl;
return 0;
default: // 操作符不合法
cout << "Invalid operation." << endl;
break;
}
}
return 0;
}
```
以上是一个模拟堆栈的程序,可以满足题目要求。程序在每次操作后都会输出当前栈中元素。
阅读全文