본문 바로가기

STUDY/자료구조

(6)
스택 (Stack) 들어가며 대학교 수업에서 처음 스택에 대해서 배울 때 대체 저런 자료구조가 어디에 쓰일지 궁금했다. 이내 교수님께서 웹페이지에서 뒤로가기를 설명하시면서 스택에 대한 예시를 들어주셨을 때 단번에 이해할 수 있었다. 개념만 들었을 때 조금 독특하지만 사실 컴퓨터 곳곳에 쓰이는 자료구조라 지금은 너무도 친숙한 자료구조가 되어버렸다. 개념 및 특징 자료를 차곡차곡 쌓고 뺄때는 제일 최근에 쌓은 거부터 빼내는 일명 FILO 구조이다. 배열과 리스트 두가지 자료구조를 활용하여 구현할 수 있어 둘 다 구현해보았다. 이번 구현에서는 이전에 구현한 단일 연결 리스트 구현을 활용했는데 특별히 make 파일을 만들어 컴파일해보았다. 코드 https://github.com/yell0w-bear/data-structure/tr..
이중 연결 리스트 (Double Linked List) 들어가며 작심삼일, 벌써 자료구조공부를 시작한지 3일이 되간다. 이번에는 꾸준히 공부해서 자료구조를 전체적으로 한번 공부하는 기회가 됬으면 한다. 개념 및 특징 노드가 prev 포인터를 추가로 가진다는 점을 제외하고는 단일 연결 리스트와 거의 유사하다. 한 노드에서 앞뒤 노드의 정보를 바로 얻을 수 있기 때문에 오히려 구현은 단일 연결 리스트보다 단순했던 거 같다. tail을 구현할지말지 고민을 했지만, 책에서 tail에 대한 언급은 없어서 일단 tail 구현은 하지 않았다. 코드 https://github.com/yell0w-bear/data-structure/tree/main/double_linked_list 마무리 연결 리스트들은 그래도 이전에 밤새가며 구현했던 경험들이 있어서인지 조금은 수월하게 ..
원형 연결 리스트 (Circular Linked List) 들어가며 구현은 어제 해두고 글을 작성하지 않았다는 것을 발견했다. 역시 전문 블로거가 되려면 아직 한참 멀었다. 개념 및 특징 단일 연결리스트와 구현이 거의 동일한데, 한 가지 큰 차이점은 마지막 tail의 next가 첫번째 노드가 된다는 점이다. 코드 https://github.com/yell0w-bear/data-structure/tree/main/circular_linked_list 마무리 2일차! 구현 난이도가 아직 어렵지는 않지만 그래도 꾸준히 공부를 해나가고 있다는 점에 의의를 둔다.
단일 연결 리스트 (Single Linked List) 들어가며 처음 자료구조를 배울 때 연결 리스트는 나에게 정말로 복잡하고 어려운 구현이었다. 지금은 내가 가야하는 길의 30% 정도 왔다고 생각하는데 이 시점에서 모든 공부들을 한번 정리해보고 가고자 한다. 정리의 첫 걸음을 자료구조로 시작해보고자 하는데 그 중에서도 연결리스트 구현으로 첫 걸음을 떼보고자 한다. 아직 가야할 길이 많이 남았지만 지금은 나에게 연결 리스트 구현은 크게 어려운 과제가 아니라 느껴짐에 새삼 감사함을 느낀다. 개념 및 특징 노드가 한쪽 방향으로 연결된 형태를 가지는 리스트이다. 코드 https://github.com/yell0w-bear/data-structure/tree/main/single_linked_list 마무리 코딩이 너무 오랜만이라 생각보다 시간이 걸렸다.... 오늘..
02) 스택(Stack)의 개념 및 구현 들어가며 과외를 시작했다. 편입을 준비하는 학생인데 내가 사실 컴퓨터 분야 과외는 처음이고 편입 과외는 더더욱 처음이라, 뭐부터 시작해야할지 잘 모르겠다. 과외를 빌미삼아 자료구조랑 알고리즘을 더 열심히 정리하는 기회로 삼아야겠다. 오늘은 자료구조 중에 가장 기초라할 수 있는 스택(stack)에 대해 포스팅 해보고자 한다. 스택을 공부하면서 나에게 가장 어려웠던 점은, 이 스택이라는 용어를 너무 여기저기 쓴다는 점이었다. 자료구조에도 나오고 프로세스 구조에도 나오고 심지어는 C++ STL에서도 등장한다. 여기서 주목할 점은 스택은 LIFO의 방식으로 데이터를 처리하는 자료구조인데 이러한 자료구조를 따르는 모든 아키텍처에 스택이라는 이름을 붙여놨다는 점이다. 이 점만 기억하면 스택은 정말 쉬운 개념이다. ..
01) 힙(Heap)의 개념 및 구현 들어가며 알고리즘 카테고리의 정렬(sorting)에 대한 포스팅을 하고 있다. 오늘은 힙 정렬(heap sorting)에 대해 포스팅 하려고 했는데 이를 위해서는 힙(heap)에 대해 먼저 공부해야 했다. 따라서 오늘은 힙(heap)에 대해 포스팅 해보고자 한다. 개념 및 특징 완전 이진 트리 우선순위 큐를 위해 만들짐 최댓값이나 최솟값을 빠르게 찾기 위해 만들어짐 반정렬(느슨한 정렬) 상태 부모 노드의 키 값이 자식 노드의 키 값보다 크거나(혹은 작거나) 같은 이진 트리 중복 값을 허용 종류 최대 힙(max heap) 부모 노드의 키 값이 자식 노드의 키 값보다 크거나 같은 완전 이진 트리 최소 힙(min heap) 부모 노드의 키 값이 자식 노드의 키 값보다 작거나 같은 완전 이진 트리 구현 보통 배..