Files
Data-Structure/Exercise/Homework1/B 栈的实现及基本操作.cpp
2025-09-29 11:06:08 +08:00

84 lines
1.6 KiB
C++

#include <iostream>
#include <limits>
using namespace std;
template <class T>
class Stack {
T* element;
int length;
int stackTop;
const T INF = std::numeric_limits<T>::max();
public:
Stack(int l) {
stackTop = -1;
length = l;
element = new T[l];
}
~Stack() {
delete[] element;
}
T& top() {
if (stackTop == -1) throw std::invalid_argument("No Top Element.");
return element[stackTop];
}
void pop() {
if (stackTop == -1) throw std::invalid_argument("No Top Element.");
stackTop--;
}
void push(const T& e) {
if (stackTop == length - 1) {
T* tmp = new T[2 * length];
for (int i = 0; i < length; i++) {
tmp[i] = element[i];
}
delete[] element;
element = tmp;
length *= 2;
}
stackTop++;
element[stackTop] = e;
}
bool empty() const {
return stackTop == -1;
}
};
int main() {
int n;
cin >> n;
Stack<int> s(n);
for (int i = 0; i < n; i++) {
int p;
cin >> p;
switch (p) {
case 0: {
if (!s.empty()) {
cout << s.top() << endl;
s.pop();
} else {
cout << "invalid" << endl;
}
break;
}
case 1: {
int val;
cin >> val;
s.push(val);
break;
}
default:
return 0;
}
}
return 0;
}