#include <iostream>
#include <stdexcept>
using namespace std;
template<typename T>
class Stack {
private:
T* data;
int size;
int capacity;
void resize();
public:
Stack() : data(new T[10]), size(0), capacity(10) {}
~Stack() { delete[] data; }
void push(T element);
T pop();
T top() const;
int getSize() const;
};
// 扩容
template<typename T>
void Stack<T>::resize() {
int newCapacity = capacity * 2;
T* newData = new T[newCapacity];
for (int i = 0; i < size; ++i) {
newData[i] = data[i];
}
delete[] data;
data = newData;
capacity = newCapacity;
}
// push 函数实现
template<typename T>
void Stack<T>::push(T element) {
if (size == capacity) {
resize();
}
data[size++] = element;
}
// pop 函数实现
template<typename T>
T Stack<T>::pop() {
if (size == 0) {
throw std::underflow_error("Stack is empty");
}
return data[--size];
}
// top 函数实现
template<typename T>
T Stack<T>::top() const {
if (size == 0) {
throw std::underflow_error("Stack is empty");
}
return data[size - 1];
}
// getSize 函数实现
template<typename T>
int Stack<T>::getSize() const {
return size;
}
int main() {
Stack<int> st;
st.push(4);
st.push(7);
st.push(13);
cout << st.top() << endl;
}
数据结构Day4: 顺序表实现栈
最新推荐文章于 2024-07-13 08:21:27 发布