堆栈(数据结构)实现

Stack (Data structure) implementation

本文关键字:实现 数据结构 堆栈      更新时间:2023-10-16

因此,我刚刚开始通过Coursera上的课程了解数据结构,我了解到可以使用数组来创建堆栈数据结构。我只是想知道我写的是堆栈应该做的。

#include <iostream>
using namespace std;
const int MAX_SIZE = 10000;
class Stack {
    public:
        Stack();
        ~Stack();
        void push(int n);
        void pop();
        int top();
        bool isEmpty() const;
        void print() const;
    private:
        int* array [MAX_SIZE];
        int curNum;
};
Stack::Stack() {
    curNum = 0;
}
Stack::~Stack() {
    for (int i = 0; i < curNum; ++i) 
        delete array[i];
}
void Stack::push(int n) {
    if (curNum >= MAX_SIZE) {
        cout << "reached maximum capacity...can't add an elementn";
        return;
    }
    array[curNum] = new int(n);
    curNum++;
}
void Stack::pop() {
    delete array[curNum];
    curNum--;
}
int Stack::top() {
    return *array[curNum];
}
void Stack::print() const{
    for (int i = 0; i < curNum; ++i) 
        cout << *array[i] << endl;
}
bool Stack::isEmpty() const{
    return curNum == 0;
}
int main () {
    Stack stack;
    stack.push(5);
    stack.print();
    stack.pop();
}

另外,我看到很多人都不会为此任务使用动态内存分配。有原因吗?似乎在编译时间指定数组的大小可能导致内存不足或将内存过度分配给我

是的,这是实现堆栈的一种方法。定义堆栈的重要一件是Lifo(最后,首先)。因此,只要您仅添加并从顶部删除,那就是堆栈。将其视为一堆菜肴;如果将10道菜一口气放入堆栈中,然后从上述堆栈中取出一盘,那么戴上第一道菜也将是最后一道菜。您无法取出不在顶部的菜,因为它被上面的所有菜肴覆盖。堆栈数据结构也是如此。

因此您的实现确实是堆栈。

当我们想要相反顺序和堆栈的东西时,我们使用的堆栈还需要恒定的时间o(1)推动和pop的时间意味着删除或添加它将更快地工作