분류 전체보기120 자료구조(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. 자료구조(1) 리스트 배열 추상자료형(ADT) : 구체적 능의 완성과정을 언급하지 않고, 순수하게 기능이 무엇인지를 나열한 것 (카드의삽입, 동전의 삽입, 지폐의 삽입 등등)을 가르켜 ADT라고한다.) 컴퓨터 공학적 측면에서 단순 구조체(데이터값만 있는)의 정의만으로 wallet이라는 자료형의 정의가 완성되는 것이 아니다. wallet을 기반으로 하는 연산의 종류를 결정하는 것도 자료형의 정의로 일부(지폐의 삽입같은 기능)로 보아야 하고, 이러한 연산의 종류가 결정되었을 때 자료형의 정의는 완성된다. 최소한 구조체 wallet의 의는 ADT에 포함시켜야하는가? ㄴㄴ 물론 필요하다면 포함시켜도 된다. 중요한 정보라면 무엇이든 추가할 수 있으며, 그 방법에는 제한이 없다. 하지만 불필요한 것을 포함시키는 것은 바람직하지 않다. wal.. 2022. 3. 16. 이전 1 ··· 20 21 22 23 24 다음