2017-12-20 20 views
0

이제 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(); 
} 

또한 많은 사람들이 이러한 종류의 작업에 동적 메모리 할당을 사용하지 않는다는 것을 알았습니다. 왜 그런 이유가 있습니까? 컴파일 할 때 배열의 크기를 지정하면 메모리가 부족하거나 메모리가 너무 많이 할당 될 수 있습니다.

+3

스택에 물건을 푸시하고 다시 튕겨내는 테스트 앱을 작성하십시오. 제대로 작동합니까? 우리는 코드 테스터가 아닙니다. –

+3

불충분 한 메모리 또는 10000 int 포인터의 배열이 스택에 80 KB + 동적 할당의 오버 헤드 (모두 사용되는 경우)와 10000 int 배열이 가능할 가능성이 40 KB 인 것으로 생각하면 메모리가 충분하지 않거나 과도하게 할당 된 메모리에 대해 언급하는 것이 재미 있습니다. 스택에 모든 것이 있습니다. – chris

+0

@chris 맞아요.하지만 규칙적인 int 대신 클래스의 객체가 있다면 어떻게 될까요? –

답변

1

예, 스택을 구현하는 한 가지 방법입니다. 스택을 정의하는 중요한 것은 LIFO (마지막 인, 맨 처음)입니다. 따라서 상단에 추가하고 제거하는 동안에는 스택입니다. 그것을 접시 더미로 생각하십시오. 10 가지 접시가 하나씩 스택에 담긴 다음 스택에서 하나씩 꺼내 진 경우 첫 번째 접시는 마지막 접시가 제거됩니다. 위의 모든 요리에 의해 덮여 있기 때문에 상단에없는 요리는 제거 할 수 없습니다. 스택 데이터 구조에서도 마찬가지입니다.

실제로 구현은 스택입니다.