자료구조라고 하면 어렵게 생각하는 분들이 꽤나 있는데 사실 어려운 개념이 아니다.
프로그래밍하면서 자료구조에 대해 살펴보는것도 나쁘지 않을것 같아 정리하니 행여나 자료구조론에 대해 공부하지 않더라도 알고는 넘어가도록 해야 나중에 Core 프로그래밍할때 개고생 하지 않는다.
자료구조를 한마디로 정의하자면 "데이터를 사용하는 방법"이라 하겠다.
어떻게 저장하고 어떻게 꺼내쓰느냐의 문제란 것이다.
먼저 메모리쪽의 자료구조를 보면 딱! 2개밖에 없다.
바로 Stack(스택)과 Heap(힙)
고정된 크기를 사용하는 것이 스택. 가변된 크기를 사용하는 것이 힙이다.
예를 들어 "int"형으로 선언한 변수와 같이 가변되지 않고 크기가 고정된 다시말해 -2,147,
483,648~2,147,483,648의 값을 가진것으로 고정된 변수는 스택영역을 사용한다.
또한 같은 고정된 변수를 저장하는 곳이 스택이다.
따라서 Heap과 비교하여 작은 크기로 존재하며 먼저 집어 넣은 놈보다 나중에 집어 넣은 놈을 먼저 가져올 수 있는 구조이다.
1step : [A] - A를 입력
2step : [A] [B] - B를 입력
3step : [A] [B] [C] - C를 입력
4step : [A] [B] - C를 출력
그러나 "string"과 같이 크기가 null이 될수도 있고 "abcdef"와 같이 6byte가 될 수도 있는 가변형의 자료는 어떻게 하는가? 이경우는 Heap이라는 자유메모리 공간에 저장되어 마음대로 썼다 지웠다 꺼냈다 한다. 따라서 상대적으로 많은 공간을 잡아둔 공간이다.
정해진 순서대로 처리되는 스택과 달리 힙은 마음대로 썼다(new) 지웠다(delete, dispose) 할 수 있다. 물론 이렇게 막 썼다고 지우기를 반복하면 공간의 빈틈이 생겨 비효율적인 동작을 하게되는데 (디스크 조각처럼 쪼각쪼각 나면 찾기 힘들어지고 링크를 사용하므로 메모리도 비효율적이 되는 원리) 이럴때 사용하라고 있는것이 가베지컬렉터(GC)이다.
뭐 암튼 IBM호환 PC는 모두 이런 구조로 되어 있다.
여기서 부터 출발하자.
프로그램밍에서는 스택, 연결고리, 큐 등으로 알고리즘과 함께 자료구조에 대해 설명하고 있는데 그냥 있는그대로 받아 들이면
스택은 위에서 설명한 방식대로 나중에 저장한넘부터 꺼내서 사용하는 구조이고
큐는 스택과 반대 개념이다. 먼저 집어 넣은놈을 먼저 실행한다.
1step : [A] - A를 입력
2step : [A] [B] - B를 입력
3step : [A] [B] [C] - C를 입력
4step : [B] [C] - A를 출력
연결고리는
[데이터|연결고리] [데이터|연결고리] [데이터|연결고리]... 순서로 되어 있는 구조이다.
데이터가 써지고나서 연결되는 데이터가 어디에 있는지 연결고리에 기록한후 그 지점에 계속해서 데이터를 써나가는 구조이다.
검색 중간에 자료를 쓰거나 지우는 것이 가능한 구조 되겠다. 그러나 길면 길수록 실행시간이 길어지는 단점이 있다.
이외에도 흔히 사용하는 노드구조도 있다.
Root - A - A1
- A2
- B - B1
- B2
탐색기에서 많이 본 구조 ^^;;





469486
143
234





