본문 바로가기

리스트5

코틀린(17) - 컬렉션 객체, 리스트 리스트 리스트는 데이터를 모아 관리하는 Collection 클래스를 상속받는 서브 클래스중 가장 단순한 형태로 여러개의 데이터를 순서로 넣어 관리하는 데이터구조이다. 리스트에는 두 가지가 존재한다. List 일반 리스트 MutableList 뮤터블 리스트 *Mutable 변할 수 있는, 잘 변하는 두 클래스의 차이는 이름이 붙은 mutable이 말해주듯 일반 리스트의 경우 생성시에 넣은 객체를 대체, 추가, 삭제 할 수 없으며, 뮤터블 리스트는 이것이 가능하다. 사용법 일반 리스트 : listOf(1,2,3) 뮤터블 리스트 : mutableListOf("A" ,"B", "C") 뮤터블리스트 추가함수들 요소의 추가 add(데이터) add(인덱스, 데이터) // 중간에 삽입되면, 그 위치에있는 데이터는 뒤로.. 2022. 3. 23.
자료구조(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.