所以我目前正試圖通過實現各種數據結構來將我的Java體驗遷移到C++,以便讓它們至少實現一次。C++堆棧數據結構。這段代碼有什麼問題?
你介意給我一些建議嗎?我遇到的問題主要集中在push(int值)和特別是pop()中的指針。由於推動似乎正常工作,我發現自己努力爭取在彈出的東西時獲得正確的價值。怎麼了?
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;
}
看起來更像C而不是C++。 –
對不起,但你做的都是錯誤的,無論推送還是彈出都無法正常工作。最大的問題是你不懂C++中的內存分配(這有點奇怪,因爲如果你用Java這樣做的話,你會更接近它)。你不能這樣做'int temporaryArray [allocatedArraySize * beta]; ... stackArray = temporaryArray;'。它會編譯,但它肯定不會工作。內存分配在這樣的論壇中是一個太大的話題。你需要**緊急**閱讀一本關於C++的書。 – john