堆栈(数据结构)实现
Stack (Data structure) implementation
因此,我刚刚开始通过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的时间意味着删除或添加它将更快地工作
相关文章:
- 如何使用set实现无序数据结构?
- 如何知道用于实现标准代码段的确切数据结构和算法,例如在C++STL中?
- 如何在C++中实现节点数任意的通用树数据结构?
- C++ 中的 TRIE 数据结构实现
- Trie数据结构的实现
- 实现具有浮点键的类似哈希表的数据结构,其中公差内的值被合并在一起
- 数据结构实现
- 与shared_ptr相比,更小的运行时数据结构和更快的代码可实现独特的_ptr
- C++:如果 std::atomic_flag 是唯一的无锁原子类型,如何在C++中实现无锁数据结构?
- unordered_set是否适合存储矢量<int>元素的数据结构?如果是这样,我将如何实现哈希函数?
- 我应该使用什么样的数据结构来实现UPGMA
- 我应该如何在恒定长度的 STL 样式数据结构中实现max_size?
- 如何使用 C++ 实现堆数据结构
- 堆栈(数据结构)实现
- 如何实现数据结构,就像C 中的数组一样支持不同的类型元素
- 我需要一个像堆栈一样的数据结构,但具有随机访问,但是,我应该实现什么
- 在Haskell中使用O(1)元素访问实现高效的类似拉链的数据结构
- STL如何用非线性数据结构实现反向迭代器去引用
- 实现数据结构时的智能指针或原始指针
- 将值映射到像素对-如何实现数据结构