- 자료구조란?
대량의 데이터를 효율적으로 관리할 수 있는 데이터의 구조를 의미
코드상에서 효율적으로 데이터를 처리하기 위해, 데이터 특성에 따라 체계적으로 데이터를 구조화해야 함

- 대표적인 자료구조
배열, 스택, 큐, 링크드 리스트, 해쉬 테이블, 힙 등

- 알고리즘이란?
어떤 문제를 풀기 위한 절차/방법
어떤 문제에 대해, 특정한 입력을 넣으면 원하는 출력을 얻을 수 있도록 만드는 프로그래밍

어떤 자료구조와 알고리즘을 쓰느냐에 따라, 성능이 차이가 많이 난다.

- 주피터 노트북 사용법

셀 추가 하는 방법)
셀 누르고 a 누르면 해당 셀 위에 새로운 셀 생성
셀 누르고 b 누르면 해당 셀 아래에 새로운 셀 생성

셀 삭제 방법)
셀 누르고 dd 누르면 해당 셀 삭제


셀에 코드를 작성할지 마크다운을 쓸지 선택은 셀 선택후 상단 탭에서 원하는 것을 선택하면 된다.

셀 실행 방법)
셀 선택 후 컨트롤 + 엔터


마크다운의 경우 셀을 더블클릭 하면 해당 내용이 어떻게 작성되었는지 볼 수 있고 수정 가능.



1. 배열


배열은 같은 종류의 데이터를 효율적으로 관리하기 위해 사용
같은 종류의 데이터를 순차적으로 저장

장점 : 빠른 접근 가능(인덱스 번호로 접근)
단점 : 데이터 추가/삭제의 어려움. 미리 최대 길이를 지정해야 함

1차원 배열, 2차원 배열, 3차원 배열 존재

2. 큐(Queue)



- 구조
가장 먼저 넣은 데이터를 가장 먼저 꺼낼 수 있는 구조 - FIFO 방식으로 데이터를 꺼낸다.

Enqueue : 큐에 데이터를 넣는 기능
Dequeue : 큐에서 데이터를 꺼내는 기능

Java에서는 
Enqueue 기능-> add 또는 offer라는 메서드 사용
Dequeue 기능-> remove 또는 poll이라는 메서드 사용

큐는 어디에 쓰일까?
멀티 태스킹을 위한 프로세스 스케쥴링 방식을 구현하기 위해 많이 사용됨

 

Queue를 구현하고 있는 클래스는 LinkedList가 있다.

다형성을 이용해 Queue 타입의 참조변수를 만들 수 있다.

 

 

ArrayList로 Queue의 기능 구현해보기)

import java.util.ArrayList;

public class MyQueue<T> {
    private ArrayList<T> queue = new ArrayList<T>();

    public void enqueue(T object) {
        queue.add(object);
    }

    public T dequeue() {
        if (queue.isEmpty()) {
            return null;
        }
        return queue.remove(0);
    }

    public boolean isEmpty() {
        return queue.isEmpty();
    }

    public static void main(String args[]) {
        MyQueue<Integer> q = new MyQueue<>();
        q.enqueue(1);
        q.enqueue(2);
        q.enqueue(3);

        System.out.println(q.dequeue());
        System.out.println(q.dequeue());
        System.out.println(q.dequeue());
    }
}

 

3. 스택(Stack)

가장 나중에 쌓은 데이터를 가장 먼저 빼낼 수 있는 데이터 구조 - LIFO 방식으로 데이터를 꺼낸다.

 

- 대표적인 스택의 활용

-> 컴퓨터 내부의 프로세스 구조의 함수 동작 방식(?)

 

- 주요 기능

push() : 데이터를 스택에 넣기

pop() : 데이터를 스택에서 꺼내기

 

- 스택의 장단점

장점)

구조가 단순해서, 구현이 쉽다.

데이터 저장/읽기 속도가 빠르다.

 

단점(일반적인 스택 구현시)

데이터 최대 갯수를 미리 정해야 한다.(최대 사이즈를 좀 크게 잡아야 하는듯)

따라서 저장 공간의 낭비가 발생할 수 있음

 

- Java에서 스택 자료 구조 사용하기

Stack 클래스를 사용하면 된다.

 

 

ArrayList로 Stack 기능 구현해보기)

import java.util.ArrayList;

public class MyStack<T> {

    private ArrayList<T> list = new ArrayList<>();

    public void push(T item) {
        list.add(item);
    }

    public T pop() {
        if(list.isEmpty()) {
            return null;
        }
        return list.remove(list.size()-1);
    }

    public static void main(String[] args) {
        MyStack<Integer> ms = new MyStack<>();
        ms.push(1);
        ms.push(2);
        ms.push(3);

        System.out.println(ms.pop());
        System.out.println(ms.pop());
        System.out.println(ms.pop());
    }
}

 

 

 

 

 

+ Recent posts