【发布时间】:2011-08-22 21:11:21
【问题描述】:
所以我目前正在尝试通过实现各种数据结构来将我的 Java 经验迁移到 C++,以便让它们至少实现一次。
你介意给我一些建议吗?我遇到的问题主要集中在 push(int value) 中的指针,尤其是 pop() 中。由于 push 似乎工作正常,我发现自己在弹出东西时很难恢复正确的值。怎么了?
PS:我也认为,由于我手动分配我的数组空间,我也需要删除它。我该怎么做?
#ifndef STACK_H
#define STACK_H
class Stack
{
private:
int *stackArray;
int elementsInArray;
int allocatedArraySize;
int alpha;
int beta;
public:
Stack();
void push(int aValue);
int pop();
bool isEmpty();
int size() const;
};
#endif
和实施:
#include <iostream>
#include "Stack.h"
Stack::Stack()
{
alpha = 4;
beta = 2;
elementsInArray = 0;
allocatedArraySize = 1;
stackArray = new int[1];
}
void Stack::push(int aValue)
{
if (elementsInArray == allocatedArraySize)
{
int temporaryArray[allocatedArraySize*beta];
for (int i = 0; i < elementsInArray; i++)
temporaryArray[i] = stackArray[i];
stackArray = temporaryArray;
allocatedArraySize *= beta;
}
elementsInArray++;
stackArray[elementsInArray] = aValue;
}
int Stack::pop()
{
int result = -INT_MAX;
if (elementsInArray == 0)
return result;
if (elementsInArray > 0)
{
result = stackArray[elementsInArray-1];
elementsInArray--;
if (elementsInArray <= allocatedArraySize/alpha)
{
int temporaryArray[allocatedArraySize/alpha];
for (int i = 0; i < elementsInArray; i++)
temporaryArray[i] = stackArray[i];
stackArray = temporaryArray;
allocatedArraySize /= beta;
}
}
return result;
}
bool Stack::isEmpty()
{
if (elementsInArray == 0)
return true;
return false;
}
int Stack::size() const
{
return allocatedArraySize;
}
【问题讨论】:
-
对不起,你做错了,push 和 pop 都不能正常工作。最大的问题是您不了解 C++ 中的内存分配(这有点奇怪,因为如果您以类似 Java 的方式完成它,您会更接近)。你不能这样做
int temporaryArray[allocatedArraySize*beta]; ... stackArray = temporaryArray;。它会编译,但它肯定不会工作。内存分配是一个太大的话题,无法在这样的论坛中讨论。您迫切需要阅读一本关于 C++ 的书。
标签: c++ data-structures stack