2022/02 37

이중 연결 리스트(Doubly Linked List)

이중 연결 리스트란?(What is Doubly linked list?) 이중 연결 리스트(doubly linked list)는 기존 단순, 원형 연결 리스트의 단점인 단방향 흐름을 2개의 링크 필드를 이용하여 양방향으로 움직일 수 있게 만든 것이 이중 연결 리스트이다. 원형 연결 리스트에 이중 연결 리스트를 결합하면 이중 원형 연결 리스트가 된다. 이중 연결 리스트는 양방향으로 움직일 수 있어 데이터 접근이 단순, 원형 연결 리스트보다 쉽고 삽입, 삭제 연산시 선행 노드에 대한 정보가 필요없다는 장점이 있다. 이중 연결 리스트의 노드는 다음과 같다. 이중 연결 리스트의 기본적인 연산은 다음과 같다. 리스트 생성 노드 삽입 노드 삭제 리스트 생성 리스트는 헤드 노드를 갖는 리스트를 생성한다. 리스트를 생..

자료구조 2022.02.25

원형 연결 리스트(Circular Linked List)

연결 리스트를 잘 모른다면 필자가 포스팅한 내용을 보고 온다면 이해하기 편하다. 원형 연결 리스트란?(What is Circular linked list?) 원형 연결 리스트(circular linked list)는 단순 연결 리스트의 단점을 보완한 리스트이다. 단순 연결 리스트는 한 방향으로 움직이면서 그 끝이 정해져 있기 때문에 리스트를 검색할 때 항상 리스트의 처음부터 접근해야하는 단점이 있다. 또한 리스트가 순환을 요구한다면 더더욱 불리하다. 이를 해결하기 위해 단순 연결리스트의 마지막 노드가 리스트의 처음 노드를 가리키도록 만든 것이 원형 연결 리스트이다. 원형 연결 리스트는 다음과 같은 형태를 가진다. 원형 연결 리스트는 다음과 같은 기본연산을 가지고 있다. 리스트 생성 노드 삽입 노드 삭제 ..

자료구조 2022.02.25

단순 연결 리스트(Singly Linked List)

연결 리스트란?(What is Linked List?) 연결 리스트(Linked list)란 링크로 원소들이 연결된 순차 리스트를 말한다. 연결 리스트는 순차 리스트의 삽입삭제 연산에서의 불리한 점을 보완하기 위해 만들어 졌다. 순차 리스트에서 삽입 연산을 하게 되면 중간에 데이터를 집어넣을 때 삽입될 데이터를 위해 공간을 만들어야 한다. 이때 공간을 만드는 과정에서 삽입되는 데이터 뒤에 데이터들이 자리를 옮기기 위한 연산을 취해야 하는데 이는 리스트가 가지고 있는 데이터가 크면 클수록 많은 시간이 걸린다. 삭제 연산도 삭제후 빈 공간을 채우기 위해 자리를 옮기는 과정이 필요하다. 이러한 문제점들을 해결하는 것이 연결 리스트이다. 연결 리스트를 이루는 기본적인 단위는 노드(node)이다. 노드는 데이터 ..

자료구조 2022.02.25

큐(Queue)

큐란?(What is Queue) 큐(Queue)는 데이터가 들어가는 곳과 나가는 곳이 한 곳으로 정해져있는 자료 구조를 말한다. 매표소에 사람들이 줄을 서 있으면 먼저 온 순서대로 표를 구매하게 된다. 큐는 먼저 온 데이터를 먼저 처리하는 형태를 띈다. 이를 FIFO(First-In-First-Out) 또는 LILO(Last-In-Last-Out)이라고 한다. 둘 다 맞는 표현이지만 FIFO를 더 많이 사용한다. 큐에서 데이터가 삽입되는 부분을 rear라고 하고 데이터가 삭제되는 곳을 front라고 한다. rear가 가리키는 데이터는 가장 최근에 삽입된 데이터이고 front가 가리키는 데이터는 가장 먼저 삽입된 데이터이다. 큐의 연산(Queue Operation) 큐의 기본 연산은 다음과 같다. Enq..

자료구조 2022.02.25

스택(Stack)

스택이란?(What is Stack?) 우리가 식당같은 곳에 가보면 다 먹은 음식의 접시나 그릇은 위로 차곡차곡 쌓아 올리는 모습을 볼 수 있다. 설거지를 할때는 위에서부터 하나씩 꺼내어 설거지를 하게 된다. 이것이 스택이다. 스택(Stack)이란 데이터 삽입, 삭제가 한 방향에서만 이루어지는 것을 말한다. 스택은 가장 먼저 들어온 데이터는 가장 나중에 나가고 가장 나중에 들어온 데이터는 가장 먼저 나가게 된는 성질을 가지고 있다. 이를 LIFO(Last-In-First-Out) 또는 FILO(First-In-Last-Out)이라고 한다. 둘 다 맞는 표현이지만 LIFO를 더 많이 사용한다. 스택은 top과 bottom이라는 2개의 포인터를 이용하여 삽입과 삭제를 제어한다. top포인터는 스택의 가장 위..

자료구조 2022.02.25

배열이란?(Array)

배열이란?(What is Array) 배열(array)또는 순차 리스트(sequential list)는 인덱스와 값의 쌍으로 이루어진 연속적인 메모리 위치의 집합이라고 정의할 수 있다. 배열은 인덱스와 값으로 이루어지는데 인덱스(index)는 어떤 값에 접근하기 위해 필요한 것이다. 값(value)는 배열 안에 실제로 들어가 있는 값을 의미한다. 만약 우리가 week[7] = {월, 화, 수, 목,금, 토, 일}이라는 배열을 선언한다면 요일은 배열의 값이 되고 '수'라는 값에 접근하고 싶으면 인덱스 2를 통해 접근할 수 있다. 이 부분은 c의 배열을 공부하면 배열이 어떤 식으로 작동하는지 알 수 있다. 배열은 값에 접근할 때 O(1)의 시간 복잡도를 갖는다. 즉, 배열은 어떤 값에 접근하던지 모두 동일한..

자료구조 2022.02.25

2022 02 23 나의 일기

오늘 나가기 싫어서 가지 말까했는데 그러면 너무 아까울 것 같아서 그냥 나갔다 왔다. 산에 갔다오면 공기가 맑아서인지 햇빛을 받아서인지 몸을 움직여서인지 뭔가 정신이 확 맑아지는 기분이다. 추워서 그런가? 하여튼 오늘은 오자마자 공부하려고 컴퓨터를 키고 책을 보고 있었는데 갑자기 게임얘기가 나와서 하다가 오전에 약간 게임을 했다. 하다가 정신차리고 오늘 공부안하면 안된다는 생각으로 공부를 했다. 자료구조는 구현하는 시간이랑 이해하는 시간이랑 글쓰는 시간이 너무 많이 들어간다. 안한다는 건 아니지만 지금까지 구현하는 시간이 많이 없어서 오늘은 책보기도 싫고 글쓰기도 싫어서 그동안 못했던 공부한 내용 실습을 했다. 이해를 했다고 생각했는데 막상 눈에 보이게 만들려니 잘 안됐다. 그래서 최대한 책을 안 보고 ..

나의 일기 2022.02.23

2022 02 21 나의 일기

공부를 하는데 속도가 안난다. 오늘 1개 이상의 포스팅을 하려고 했지만 코딩하는 속도가 너무 느려서 1개도 다 못했다. 사실 코딩이 느리기 보다는 너무 이론적인 것만 공부하니까 실제로 적용하는 방법을 모르고 있다. 그래도 다행이다. 지금이라도 취약점을 알았으니까 꾸준히 1시간이상 코딩을 해야겠다. 오늘은 아침에 산책도 하고 공부도 하고 상당히 유의미한 시간을 보냈다. 어제 내가 느낀 감정 그대로 공부에 몰입할 수 있었으면 좋겠다. 그리고 유이카라는 일본 유튜버인지 가수인지는 모르겠지만 그 분의 노래를 들었다. 머리도 아프고 하기도 싫고 해서 잠시 쉴겸 노래를 들었는데 간질간질한 목소리로 초반의 기분 좋은 느낌과 함께 후렴구에는 감정을 쏟아내는 듯한 느낌으로 부르는게 정말 인상깊었다. 노래를 들으니 며칠동..

나의 일기 2022.02.21