본문 바로가기
반응형

Data Structure36

C LinkedList 만들기 (version 2 - Doubly LinkedList) C로 LinkedList 구현하기 Doubly LinkedList를 C로 구현해 보겠다. Doubly LinkedList는 Singly LinkedList의 단점을 보완해 만든 LinkedList로, Library에 있는 LinkedList는 Doubly LinkedList로써 구현되어 있다. Singly LinkedList의 단점으로는 크게 두가지가 있는데, add로 데이터를 추가할때, 맨 끝 노드에 값을 추가하기 위해 매번 traverse를 해줘야 한다는 점과 LinkedList를 traverse 하고자 할 때 정방향으로밖에 못한다는 점이 있다.(역순 traverse 불가) Doubly LinkedList나 Singly LinkedList나 전체적인 로직은 비슷하지만 몇가지 차이점이 있으니 한번 살펴.. 2023. 3. 30.
C++ LinkedList 만들기 (version 3 - Iterator 구현 및 사용) 이전에 만든 LinkedList에 Iterator를 추가하여 traverse하는 용도로 써보겠다. 먼저, C++의 STL에 대해 짚고 넘어가겠다. STL이란 표준 템플릿 라이브러리라고 하며, ISO C++위원회에서 specification을 정한다. ISO에서 특정 클래스의 명세를 결정해 발표하면 C++ 컴파일러를 만드는 vendor들이 알아서 template들을 구현한다. 이것은 알고리즘, 컨테이너, 함수자, 반복자의 네가지 구성 요소를 제공한다. 프로그래머가 자료구조와 알고리즘의 정확한 내부 구조를 모르더라도 사용할 수 있게 구현해놓았다. 간단한 STL 사용 예제를 보겠다. #include using namespace std; #include #include #include template ostre.. 2023. 3. 27.
C# LinkedList 만들기 (Generic type) C#으로 LinkedList 만들기 리스트의 type을 Generic화 시킨 LinkedList를 만들어 보도록 하겠다. 이전 글에서 C++로 LinkedList를 template화 하여 어느 타입의 데이터든 관리할 수 있도록 만들었는데 아래는 참고 링크이다. https://suldenlion.tistory.com/90 C++의 템플릿과 C#의 제네릭은 내용상 결이 같다. 다만 C++와 C#, Java의 템플릿/제네릭은 약간의 차이가 있는데 조금 정리해 보겠다. 완전하게 이해하지 못한 부분도 있고 웹 서칭을 참고하여 정리해 보는 것이므로 내용에 오류가 있을 수 있다. C++은 한번 컴파일이 되면 그 뒤로는 동일한 기계어 코드만 실행하게 된다 (컴파일 총 1번). 하지만 C# 같은 경우는 먼저 컴파일을 한.. 2023. 3. 26.
C++ LinkedList 만들기 (version 2 - LinkedList Template화 하기) C++의 template 제도와 사용에 대해서 알아보고 또 이전 버전의 LinkedList에 직접 적용시켜 구현해보도록 하겠다. C++의 template은 Java의 Generic과 같은 것으로 이해하면 된다. 우리가 어떤 Collection 객체를 갖다 쓰던지 실제 사용에 있어서 한 가지 변수 타입에 국한되지 않게 쓸 수 있어야 한다. 이전 버전의 LinkedList는 자료형의 리턴 타입이 전부 int형이었다. 하지만 Library에서 갖다쓰는 자료 구조들은 int 뿐만이 아닌 String, bool ... 혹은 객체가 됐든 어떠한 데이터도 담을 수 있다. 그래서 저번 버전의 LinkedList를 template화 시켜 다양한 자료형을 다룰 수 있게 해보겠다. int만 담을 수 있는 이전 버전의 Lin.. 2023. 3. 25.
C++ LinkedList 만들기 (version 1) C에 이어 C++로 LinkedList를 구현해 보도록 하겠다. LinkedList의 거의 모든 메서드의 동작 메커니즘은 아래 글에서 소개가 되어있다. https://suldenlion.tistory.com/88 약간의 추가된 요소나 메서드들, 그리고 C++로 파일을 나눠서 작성한 코드 방식 등을 포스팅 해보겠다. 바로 메인 함수 코드를 보면서 어떤 함수들을 사용했는지 보겠다. #include using namespace std; #include "LinkedList.h" void main() { LinkedList list1; LinkedList *list2 = new LinkedList(); list1.addFirst(10); list1.addFirst(20); list1.add(50); list1... 2023. 3. 24.
C LinkedList 만들기 (version 1) C로 LinkedList를 직접 구현해 보도록 하겠다. LinkedList는 배열 자료구조의 size 고정 문제를 해결하고, 데이터 삽입/삭제의 문제도 해결되었다는 특징이 있다. LinkedList의 대표 메서드로는 add()와 remove(), 또 특정 인덱스에 값을 갖다넣는 addAt()과 removeAt() 등이 될 것이다. Oracle의 API에서 LinkedList가 있는 부분을 참고하여 주요 메서드들을 구현해 볼 것이다. 만들어 볼 LinkedList는 Singly LinkedList로서 Data와 다음 노드를 가리킬 포인터 노드로 이루어진 Node 구조체와 맨 첫번째 Node를 가리키는 header와 총 노드수를 나타낼 count로 이루어진 LinkedList 구조체로 구성된다. 전체적인 주.. 2023. 3. 23.
반응형