[c++] 배열과 포인터를 사용한 데이터 구조 구현

이번에는 C++을 사용하여 배열과 포인터를 활용하여 간단한 데이터 구조를 구현하는 방법에 대해 알아보겠습니다.

배열을 사용한 데이터 구조 구현

배열은 동일한 자료형의 요소들을 연속적으로 저장하는 데 사용됩니다. 예를 들어, 정수형 배열을 선언하고 값을 할당하는 방법은 다음과 같습니다.

int arr[5];  // 길이가 5인 정수형 배열 선언
arr[0] = 1;  // 첫 번째 요소에 값 할당
arr[1] = 2;  // 두 번째 요소에 값 할당
// 나머지 요소에 값 할당

포인터를 사용한 데이터 구조 구현

포인터는 다른 변수의 메모리 주소를 저장하는 변수로, 동적 메모리 할당 및 배열과 연관된 작업에 사용됩니다. 예를 들어, 정수형 포인터를 사용하여 배열을 동적으로 할당하는 방법은 다음과 같습니다.

int* ptr;  // 정수형 포인터 선언
int size = 5;  // 배열 길이
ptr = new int[size];  // 메모리 동적 할당

ptr[0] = 1;  // 첫 번째 요소에 값 할당
ptr[1] = 2;  // 두 번째 요소에 값 할당
// 나머지 요소에 값 할당

데이터 구조 구현 예제

아래는 배열과 포인터를 사용하여 간단한 스택(Stack) 구조를 구현하는 예제 코드입니다.

#include <iostream>
using namespace std;

class Stack {
private:
    int* arr;  // 배열을 나타내는 포인터
    int size;  // 스택 크기
    int top;  // 스택의 맨 위 요소의 인덱스

public:
    Stack(int s) {
        size = s;
        arr = new int[size];  // 배열 동적 할당
        top = -1;  // 초기화
    }

    void push(int value) {
        arr[++top] = value;  // 요소 추가
    }

    int pop() {
        return arr[top--];  // 요소 제거 및 반환
    }
};

int main() {
    Stack stack(5);  // 크기가 5인 스택 생성
    stack.push(1);
    stack.push(2);
    cout << stack.pop() << endl;  // 스택에서 요소 제거 및 출력
    return 0;
}

이를 통해 배열과 포인터를 사용하여 데이터 구조를 간단히 구현하는 방법에 대해 알아보았습니다. 이러한 구현 방식은 메모리를 효율적으로 활용하고, 동적으로 크기가 변할 수 있는 데이터 구조를 만드는 데 유용합니다.

참고문헌: