본문 바로가기

CS/자료구조15

[자료구조] Queue Queue는 FIFO(First-In First-out, 선입선출) 원칙에 따라 element를 insert/remove 하는 자료구조이다. stack이 패스트푸트점 컵 놓는 곳이라면, queue는 놀이동산이나 카페의 줄을 생각하면 될 것이다. 실제로 모 학교의 교내 카페 이름이 queue라고 하던데, 우리 학교가 아니라 확실한지는 모르지만 재미있는 작명이라 생각한다. Queue는 다음 연산을 수행할 수 있어야 한다. Enqueue(e) : element를 queue의 맨 끝에 삽입. Dequeue(): 맨 앞의 element를 반환하고 제거. First(): 맨 앞의 element를 제거하지 않고 참조. Size()/isEmpty() : stack의 그것과 동일. 사실 stack과 마찬가지로, 코딩을 .. 2023. 9. 13.
[자료구조] Stack LIFO(Last-In First-Out, 후입선출법) 원칙에 따라 element를 삽입/제거하는 자료구조. 말 그대로 가장 늦게 들어간 element가 가장 먼저 뽑혀 나온다. 패스트푸트점에서 컵 반납하는 스프링 통을 생각하면 편할 것이다. 다음에 포스팅할 Queue와 마찬가지로 자료구조의 한 쪽 끝에서만 삽입/삭제 연산이 이루어지고, 이 최상위 노드의 위치를 가리키는 변수가 있어야 한다. 본 포스팅에서는 이를 'top'이라고 할 것이다. Stack에 사용되는 연산은 아래와 같다. 1. push(e): element e를 stack의 맨 위에 삽입. 2. pop(): 맨 위의 element를(=가장 늦게 삽입된 element)를 반환하고 제거 3. top() : 맨 위에 element를 '제거하지 않고.. 2023. 9. 11.
[자료구조] Circularly Linked List 2호선 내선순환선처럼, 'Circularly' 라는 표현 그대로 element들이 시작과 끝 지점이 없이 서로가 서로에게 연결되어 있는 자료구조이다. 즉, tail.next = head이다. 게임개발을 하면서, 오브젝트 풀링을 통해 생성해 둔 오브젝트들을 게임이 진행됨에 따라서 꾸준히 스폰해 줘야 할 일이 있었는데, 나는 이 때 array+index 를 활용했다. 즉 간략하게 쓰자면 void LocateObstacles(Vector3 targetPos) { _obstaclesArr[_obstacleIdx].SetActive(true); _obstacleArr[_obstacleIdx].transform.position = targetPos; _obstacleIdx++; if(_obstacleIdx>=_ob.. 2023. 9. 5.
[자료구조] Doubly Linked List *** 개인이 공부한 내용들을 간략하게 정리하고 참고하기 위한 포스팅입니다. 설명에 실수가 있을 수 있습니다. 지적해 주시면 정말 감사하겠습니다. *** Singly Linked List에서는 각 node가 바로 다음 node로의 link만 가지고 있기 때문에, 임의의 node에 선행하는 노드를 파악할 수 없었다. 이로 인해 임의의 중간 지점 혹은 맨 끝에 있는 node를 삭제하려 할 때 필연적으로 비효율이 발생하였다. Doubly Linked List는 각 node가 (이전 node로의 link, 값, 다음 node로의 link)로 이루어져 있으며, 맨 앞과 뒤에 각각 header, trailer라는 dummy node가 덧붙여져 있다.(sentinel, guard라고도 한다.) 이러한 구조로 인해 임.. 2023. 9. 4.