본문 바로가기

자료구조11

자료구조(6) 큐 큐는 "선입선출" 구조의 자료구조이다. 때문에 FIFO(First-in , First-out) 구조의 자료구조라 불린다. 큐 역시 스택과 마찬가지로 배열을 기반으로, 그리고 연결 리스트를 기반으로도 구현이 가능하다. 처음 큐를 접하면 다음과 같이 생각하는 것이 보통이다. "스택과 큐의 차이점이 앞에서 꺼내느냐 뒤에서 꺼내느냐에 있으니, 이전에 구현해 놓은 스택을 대상으로 꺼내는 방법만 조금 변경하면 큐가 될 것 같다" 하지만 큐의 구현모델을 알게되면 이보다는 큰 차이가 있다고 느낄 것이다. 큐의 배열 기반 구현 F를 참조하여 dequeue 연산을 하고, R을 참조하여 enqueue연산을 한다 (F=머리, R=꼬리) "뒤로 넣고 앞으로 빼는 자료구조" // 이것만 외워도 큐의 원리가 쉽게이해된다. 잘못된 .. 2022. 3. 16.
자료구조(5) 스택 스택은 나중에 들어간것이 먼저 나오는 구조다 보니 "후입선출" 방식의 자료구조라고도 불리고 LIFO(Last-in, First-out)구조의 자료구조라고도 불린다. 스택자체는 어려운것 아니나, "스택의 활용", "스택 기반의 알고리즘"과 관련된 전통적인 예가 하나 있는데, 이것이 의외로 간단하지 않다. 오히려 스택을 공부하는 것보다 이것을 경험하는데 더 많은 노력이 필요할것이다. 스택은 배열을 이용해서도 구현이 가능하고, 또 연결 리스트를 이용해서도 구현이 가능하다. 사실 배열구조도 자료구조이다. 그럼에도 불구하고 리스트의 구현의 도구로 사용하지 않는가? 마찬가지로 연결리스트도 하나의 자료구조이만 다른 자료구조의 구현에 사용되는 중요한 도구이기도 하다. 어찌 보면 연결리스트는 다른 자료구조의 구현에 사용.. 2022. 3. 16.
자료구조(4) 양방향 연결리스트(이중연결리스트) + 머리추가 이름이 의미하듯 노드가 양쪽 방향으로 연결된 구조의 리스트이다. 즉, 왼쪽 노드가 오른쪽 노드를 가리킴과 동시에 오른쪽 노드가 왼쪽 노드를 가리키는 구조다. 양방향 연결리스트가 복잡해서 구현하기 부담스러울꺼같지만, 이는 그림상에서 느껴지는 복잡함 때문에 발생 오해이다. 실제로 코드를 비교해보면 상대적으로 더 복잡하지 않음을 알 수 있다. 양쪽 방향으로 이동할 수 있기 때문에 단방향 연결 리스트에서는 어렵게 구현했던 것이 쉽게 구현되기도 한다. 때문에 오히려 단순하게 느껴지는 측면도 있다. 포인터 변수 before의 용도를 기억하는가? 이는 리스트가 한쪽 방향으로만 조회가 가능하기 때문에 유지해야 하는, 삭제의 과정을 위해 유지해야 하는 멤버이다. 하지만 양방향 연결리스트는 양방향으로 얼마든지 조회가 가능.. 2022. 3. 16.
자료구조(3) 원형 연결리스트 + tail로 머리추가, 꼬리추가 (더미 x) 바로 전에 배운 더미, 머리 연결 리스트의 마지막 노드는 Null을 가르켰다. 바로 이 마지막 노드가 첫 번째 노드를 가리키게 하면 이것이 바로 "원형 연결 리스트"가 된다. 원본 : (head) 2-3-4-5 (tail) 머리추가 : head->1-2-3-4-5 // 1->2->3->4->5 꼬리추가 : head->2-3-4-5-1 tail // 1->2->3->4->5 // 꼬리부터 1,2,3,4,5로 볼수있다 "두 연결 리스트 모두 5가 저장된 노드는 1이 저장된 새 노드를 가리키고, 1이 저장된 새 노드는 2가 저장된 노드를 가르킨다" 위의 원형 연결 리스트의 특성 때문에 머리와 꼬리의 구분이 없다고 이야기한다. 실제로 두 연결 리스트의(머리,꼬리) 유일한 차이점은 포인터 변수 head가 무엇을 .. 2022. 3. 16.
자료구조(2) 연결리스트 + 더미, 머리추가, 정렬기준 함수 정의 필요할 때마다 바구니의 역할을 하는 구조체 변수를 하나씩 동적 할당해서 이들을 연결한다 (메모리 공간을 마련하는 유일한 방법은 malloc 또는 그와 유사한 성격의 함수) 참고로 자료구조는 코드를 통해서 공부하는 과목이 아니라, 코드를 통한 학습 이전에, 그림으로 설명하고 이해해야 하는 과목이다. ADT의 정의는 어렵지 않으니 별 것 아니라고 생각할 수 있다. 하지만 신경쓰지 않으면 자료구조에 대한 잘못된 이해를 갖게될수도있다. 따라서 가급적 다음 세가지 순서는 계속 상기시켜야한다 자료구조의 ADT 정의 정의한 ADT의 구현 구현이 완료된 자료구조의 활용 위의 과정을 모두 밞지않으면, 특히 ADT의 정의를 생략하면 구현도 활용도 이상한 형태로 흘러가기 쉽다. head가 가리키는 노드를 그냥 삭제해 버리면.. 2022. 3. 16.