이제 Coursera의 과정을 통해 데이터 구조에 대해 배우기 시작했고 배열을 사용하여 스택 데이터 구조를 만들 수 있음을 알게되었습니다. 나는 내가 쓴 것이 스택이해야만하는 것인지 궁금해했다.Stack (데이터 구조) 구현
#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();
}
또한 많은 사람들이 이러한 종류의 작업에 동적 메모리 할당을 사용하지 않는다는 것을 알았습니다. 왜 그런 이유가 있습니까? 컴파일 할 때 배열의 크기를 지정하면 메모리가 부족하거나 메모리가 너무 많이 할당 될 수 있습니다.
스택에 물건을 푸시하고 다시 튕겨내는 테스트 앱을 작성하십시오. 제대로 작동합니까? 우리는 코드 테스터가 아닙니다. –
불충분 한 메모리 또는 10000 int 포인터의 배열이 스택에 80 KB + 동적 할당의 오버 헤드 (모두 사용되는 경우)와 10000 int 배열이 가능할 가능성이 40 KB 인 것으로 생각하면 메모리가 충분하지 않거나 과도하게 할당 된 메모리에 대해 언급하는 것이 재미 있습니다. 스택에 모든 것이 있습니다. – chris
@chris 맞아요.하지만 규칙적인 int 대신 클래스의 객체가 있다면 어떻게 될까요? –