首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >栈(数据结构)实现

栈(数据结构)实现
EN

Stack Overflow用户
提问于 2017-12-20 11:28:36
回答 2查看 210关注 0票数 0

因此,通过Coursera课程,我刚刚开始学习数据结构,并且我了解到使用数组创建堆栈数据结构是可能的。我只是想知道我写的是不是堆栈应该做的事情。

代码语言:javascript
复制
#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 element\n";
        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();
}

另外,我发现很多人并不使用动态内存分配来完成这类任务。有什么原因吗?似乎在编译时指定数组的大小可能导致内存不足或过度分配内存给我

EN

回答 2

Stack Overflow用户

发布于 2017-12-20 13:03:38

是的,这是实现堆栈的一种方式。定义堆栈的重要一点是LIFO (后进先出)。所以,只要你只是在顶部添加和删除,那么这就是一个堆栈。把它想象成一堆盘子,如果把10个盘子逐个放入一叠,然后逐个从这一叠中取出,那么放在上面的第一个盘子也是最后一个取出的。你不能移除不在顶部的盘子,因为它被上面的所有盘子所覆盖。堆栈数据结构也是如此。

所以你的实现实际上是一个堆栈。

票数 1
EN

Stack Overflow用户

发布于 2021-10-04 18:13:23

当我们想要颠倒顺序的东西时,我们使用的堆栈也需要恒定的时间,这意味着推送时间为O(1),而pop意味着删除或添加它的速度会快得多

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47898372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档