자료구조란?
자료구조의 정의 및 필요성
자료구조란?
데이터의 인터페이스를 추상적으로 정의한 것, 어렵죠잉~
쉽게 말해서 데이터를 효율적으로 활용하기 위해 저장하는 방법이라고 생각하면 편할꺼에요.
자료구조가 왜 필요할까?
프로그래밍을 하다 보면 데이터를 처리할 때마다 새로운 변수를 선언해서 처리하기에는 양이 너무 방대하죠.
또한, 데이터 마다 변수 이름을 기억하고 활용하기가 불가능합니다.
이런 문제점을 보완하기 위한 것이 자료구조 입니다.
자료구조를 통해 데이터를 검색, 추가, 삭제 등 활용하기 쉽게 정리하여 프로그램의 성능(시간적, 공간적)을 높이는 것입니다.
자료구조의 특징
- 추상화
추상화란 단어 정말 많이 쓰이는데 정확한 뜻을 알기 쉽지않죠.
현실 세계의 개념이나 구조를 프로그램에서 새로 자료구조로 표현하는 것 대략 이런 느낌으로만 알고 있으면 충분합니다.
이러한 자료구조는 그 내용과 작동원리에 대해 다른 사람들도 쉽게 알아보고 활용할 수 있게 표현합니다.
예를 들어, name_stack은 사람들의 이름을 스택(stack)이라는 자료구조를 통해 표현하는 것이죠. name_stack의 내용은 사람 이름이고 작동원리는 스택(stack)의 push, pop 또는 LIFO 가 되겠네요.
- 최적화
말 그대로 성능을 최대한 높일 수 있는 최적의 자료구조를 선택하는 것입니다.
프로그램 동작의 효율성을 높이기 위해 상황에 맞는 적합한 자료구조를 선택해야 합니다.
예를 들어, 선착순에 적합한 자료구조는 큐(queue)인데 스택(stack)을 활용하면 안된다는 것입니다.
분류
- 선형구조
선형구조는 쉽게 말해서 일렬로 저장되어 순서가 있는 것입니다. 자료마다 자기 뒤에 0개 또는 1개의 자료가 있는 구조라고 생각하시면 쉽습니다.
- 배열
- 연결 리스트
- 스택
- 큐
- 비선형구조
비선형 구조는 선형구조처럼 일렬이 아니라 특이한 형태를 갖는 자료구조입니다. 정해진 순서 없이는 따로 순서가 없고 뒤에 0개 또는 1개의 자료만 있는 것이 아니라 랜덤으로 자료가 붙을 수 있습니다.
- 트리
- 그래프
이제 선형구조(배열, 리스트, 스택, 큐)와 비선형 구조(트리, 그래프)에 대해서 자세히 알아보겠습니다.
의견이 있으시거나 수정해야할 부분이 있으면 편하게 공유 부탁드립니다!