연결 리스트에서 요소를 제거하는 것은 생각보다 매우 간단합니다. 핵심은 제거하려는 노드의 참조(reference)를 끊어버리는 것입니다. 즉, 해당 노드를 가리키는 링크를 없애면 자연스럽게 리스트에서 분리됩니다.요소를 제거할 때는 크게 세 가지 경우를 고려해야 합니다.연결 리스트에서 요소를 제거하는 세 가지 경우1. 헤드(Head)에서 요소 제거첫 번째 요소를 제거하는 경우에는 head = head.next로 간단히 할당해 주면 됩니다. 이렇게 하면 첫 번째 노드에 대한 참조가 사라지고, 헤드가 두 번째 요소를 가리키게 됩니다.2.
연결 리스트(Linked List)는 각 노드가 데이터와 다음 노드에 대한 참조(포인터)를 함께 저장하는 선형 자료구조입니다. 배열과 달리 요소를 삽입하거나 삭제할 때 나머지 요소를 한 칸씩 이동시킬 필요가 없으므로, 데이터의 동적인 추가와 삭제가 빈번한 상황에서 효율적으로 동작합니다. LinkedList 클래스 전체 구현 다음은 자바스크립트로 작성한 LinkedList 클래스의 완전한 구현 코드입니다. 리스트 초기화를 담당하는 생성자, 노드 삽입(insert), 노드 삭제(remove), 리스트 출력(display) 메서드와
이중 연결 리스트란?이중 연결 리스트(Doubly Linked List)는 모든 연산 측면에서 단일 연결 리스트(Singly Linked List)와 거의 동일하지만, 각 노드마다 하나의 추가 링크를 관리해야 한다는 점이 다릅니다. 단일 연결 리스트의 노드에는 next 링크만 존재하는 반면, 이중 연결 리스트의 노드에는 next(다음 노드)와 prev(이전 노드) 두 개의 링크가 있습니다.이러한 양방향 구조 덕분에 리스트를 앞에서 뒤로, 뒤에서 앞으로 모두 순회할 수 있다는 장점이 있습니다. 반면 각 노드가 포인터를 하나 더 저장해
이중 연결 리스트(Doubly Linked List)는 각 노드가 이전 노드(prev)와 다음 노드(next)를 모두 가리키는 자료구조입니다. 양방향 탐색이 가능해 삽입과 삭제가 유연하다는 장점이 있습니다. 이번 글에서는 자바스크립트로 이중 연결 리스트를 직접 구현해 보겠습니다.먼저 생성자에서 head(첫 번째 노드)와 tail(마지막 노드)을 null로 초기화하는 간단한 클래스를 정의하는 것부터 시작합니다. 그리고 DoublyLinkedList 클래스의 프로토타입에 연결 리스트의 각 노드를 나타내는 별도의 Node 구조체도 함께
이중 연결 리스트(Doubly Linked List)에서 주어진 위치에 데이터를 삽입하는 함수 insert(data, position)를 만들어야 합니다. 구현은 다음 단계로 진행됩니다. 새로운 노드(Node)를 생성합니다. 리스트가 비어 있는지 확인합니다. 비어 있다면 노드를 head와 tail에 연결한 후 반환합니다. 비어 있지 않다면 currElem을 사용해 삽입하려는 위치까지 순회합니다. 연결 리스트는 currElem을 currElem.next로 갱신해가며 탐색합니다. 원하는 위치에 도달했다면, 이제 포인터(링크)를 다음
큐(Queue)에 쌓인 모든 요소를 한 번에 비우고 싶다면, 내부 컨테이너 배열을 새로운 빈 배열로 재할당하는 것만으로 간단하게 처리할 수 있습니다. 별도의 반복문을 돌며 요소를 하나씩 제거할 필요가 없기 때문에 가장 효율적이고 직관적인 방법입니다.clear() 메서드 구현큐 클래스 내부에 다음과 같이 clear() 메서드를 정의하면 됩니다.clear() { this.container = []; }이 메서드가 호출되면 기존에 저장되어 있던 모든 요소가 제거되고, 큐는 완전히 빈 상태로 초기화됩니다.예제실제로 이 메서드가 정상
큐(Queue)는 FIFO(First In, First Out, 선입선출) 방식으로 동작하는 대표적인 선형 자료구조입니다. 먼저 들어온 데이터가 먼저 나가는 구조 덕분에 작업 대기열 처리, 이벤트 관리, BFS(너비 우선 탐색) 등 다양한 분야에서 널리 활용됩니다.아래는 자바스크립트 클래스 문법으로 작성한 큐의 완전한 구현 예제입니다. 최대 크기 설정부터 요소 추가·제거, 맨 앞 요소 확인, 초기화 기능까지 모두 포함되어 있습니다.큐 클래스 구현 예제= this.maxSize; } enqueue(element) {
우선순위 큐란 무엇인가?우선순위 큐(Priority Queue)는 일반적인 큐(Queue)나 스택(Stack)과 유사한 추상 자료형(ADT)이지만, 결정적인 차이점이 하나 있습니다. 바로 각 요소에 우선순위(priority)가 부여된다는 점입니다.일반적인 큐에서는 먼저 들어온 요소가 먼저 처리되는 FIFO(First In, First Out) 방식을 따르지만, 우선순위 큐에서는 우선순위가 높은 요소가 낮은 요소보다 먼저 처리됩니다.만약 두 요소의 우선순위가 같다면, 일반적인 큐와 마찬가지로 큐에 들어온 순서대로 처리됩니다.우선순위
우선순위 큐(Priority Queue)는 일반적인 큐와 달리 각 요소가 우선순위(priority)를 가지며, 우선순위가 높은 요소가 먼저 처리되는 자료구조입니다. 이번 글에서는 자바스크립트의 클래스와 배열을 활용해 우선순위 큐를 직접 구현하는 방법을 단계별로 살펴보겠습니다.우선순위 큐 클래스의 주요 메서드이번에 만들 PriorityQueue 클래스는 다음과 같은 기능들을 포함합니다.enqueue(element): 큐에 새로운 요소를 추가합니다.dequeue(): 큐에서 요소를 제거하고 반환합니다.peek(): 큐의 맨 앞에 있는
우선순위 큐(PriorityQueue)에 요소를 추가(enqueue)한다는 것은 각 요소의 우선순위 순서에 맞게 배열에 삽입하는 것을 의미합니다. 이 글에서는 숫자가 클수록 더 높은 우선순위를 가진다고 가정하겠습니다.동작 방식은 다음과 같습니다. 컨테이너(배열)를 처음부터 끝까지 순회하면서 새로 추가할 요소보다 낮은 우선순위를 가진 요소를 발견하면, 그 위치 바로 앞에 새 요소를 삽입합니다. 만약 끝까지 순회해도 적절한 위치를 찾지 못했다면, 해당 요소는 가장 높은 우선순위를 가지므로 컨테이너의 맨 끝에 추가하면 됩니다.이때 주의할
우선순위 큐(PriorityQueue)에서 디큐(dequeue)란 가장 높은 우선순위를 가진 요소를 제거하는 작업을 의미합니다.이 글에서 다루는 구현 방식에서는 우선순위가 가장 높은 요소를 배열의 맨 끝에 저장합니다. 따라서 자바스크립트의 pop() 메서드를 사용하면 간단하게 해당 요소를 꺼낼 수 있습니다.이를 바탕으로 dequeue 함수는 다음과 같이 구현할 수 있습니다.구현 예제dequeue() { // 큐가 비어 있는지 확인 if (this.isEmpty()) { console.log(Queue U
우선순위 큐(PriorityQueue)에서 엿보기(peek)란, 요소를 실제로 제거하지 않은 채 가장 높은 우선순위를 가진 값을 확인하는 동작을 의미합니다. 즉, 큐의 맨 앞에 있는 데이터가 무엇인지 살펴보기만 하는 기능입니다.이러한 peek 함수는 다음과 같이 간단하게 구현할 수 있습니다.peek() 구현 예제peek() { if (isEmpty()) { console.log(Queue Underflow!); return; } return this.container[this.con
우선순위 큐(PriorityQueue)를 구현하다 보면 저장된 모든 요소를 한 번에 삭제하고 큐를 초기 상태로 되돌려야 하는 경우가 종종 있습니다. 자바스크립트에서는 별도의 복잡한 로직 없이, 내부 컨테이너(container)를 빈 배열로 다시 할당하는 것만으로 간단하게 해결할 수 있습니다.clear() 메서드 구현큐 클래스 내부에 아래와 같이 clear() 메서드를 추가하면 됩니다.clear() { this.container = []; }이 방식이 동작하는 원리는 간단합니다. this.c
우선순위 큐(Priority Queue)란? 우선순위 큐는 일반적인 큐(FIFO, 선입선출)와 달리 각 요소가 우선순위(priority)를 가지며, 우선순위에 따라 처리 순서가 결정되는 자료구조입니다. 운영체제의 작업 스케줄링, 다익스트라 최단 경로 알고리즘 등 다양한 분야에서 활용됩니다. 자바스크립트는 우선순위 큐를 기본으로 제공하지 않기 때문에 필요하다면 직접 구현해야 합니다. 아래는 ES6 클래스 문법으로 작성한 PriorityQueue 클래스의 전체 구현 예제입니다. PriorityQueue 클래스 전체 코드 = this.m
연결 리스트(Linked List)란 무엇인가?연결 리스트(Linked List)는 여러 개의 데이터 구조가 링크(link)를 통해 서로 연결되어 있는 선형 데이터 구조입니다. 각 항목은 다음 항목에 대한 참조(reference)를 가지고 있어, 배열과 달리 물리적으로 연속된 메모리 공간에 저장되지 않고도 데이터를 순차적으로 관리할 수 있습니다.연결 리스트는 삽입과 삭제가 빈번하게 일어나는 상황에서 특히 유용하여, 실무에서 가장 널리 사용되는 데이터 구조 중 하나로 꼽힙니다.연결 리스트의 핵심 구성 요소자바스크립트에서 연결 리스트를
자바스크립트에서 스택(Stack)은 LIFO(후입선출, Last In First Out) 방식으로 데이터를 관리하는 가장 기본적인 자료구조 중 하나입니다. 이 글에서는 몇 가지 작은 헬퍼 함수를 포함한 스택 클래스를 살펴보고, 여기에 PUSH 연산을 직접 구현해 보겠습니다. 기본 스택 클래스 예제 = this.maxSize; } } isEmpty 함수는 컨테이너 배열의 길이가 0인지 검사하여 스택이 비어 있는지 판단합니다. isFull 함수는 컨테이너의 길이가 최대 크기(maxSize)보다 크거나 같은지 확인하여 스택이 가득
스택(Stack)은 LIFO(Last In, First Out, 후입선출) 방식으로 동작하는 대표적인 자료구조입니다. 마지막에 넣은 요소가 가장 먼저 빠져나오는 구조로, 함수 호출 관리나 실행 취소(Undo) 기능 등 다양한 곳에서 활용됩니다. 이번 글에서는 자바스크립트로 간단한 스택 클래스를 만들고, 여기에 팝(Pop) 연산을 추가해 보겠습니다.스택 클래스 예제먼저 생성자, 표시(display), 상태 확인 메서드, 그리고 푸시(push) 연산이 포함된 기본적인 스택 클래스입니다.class Stack { constructo
자바스크립트로 간단한 스택(Stack) 클래스를 구현해 보겠습니다. 스택은 LIFO(Last In First Out, 후입선출) 구조를 가지는 대표적인 자료구조로, 가장 나중에 삽입된 요소가 가장 먼저 제거되는 특징이 있습니다.스택 클래스 기본 구현= this.maxSize; } push(element) { // 스택이 가득 찼는지 확인 if (this.isFull()) { console.log(Stack Overflow!); return;
스택(Stack)은 마지막에 넣은 데이터가 가장 먼저 나오는 LIFO(Last In, First Out) 방식의 대표적인 자료구조입니다. 이 글에서는 자바스크립트로 구현한 간단한 스택 클래스를 살펴본 뒤, 저장된 모든 요소를 한 번에 삭제하는 clear 연산을 추가하는 방법을 알아봅니다.기본 스택 클래스 예제= this.maxSize; } push(element) { // 가득 찼다면 더 이상 추가하지 않음 if (this.isFull()) { console.log(Stack Ove
스택(Stack)은 LIFO(Last In, First Out, 후입선출) 방식으로 동작하는 대표적인 자료구조입니다. 가장 나중에 넣은 데이터가 가장 먼저 나오는 특성 때문에 실행 취소(Undo), 브라우저 방문 기록 관리, 재귀 호출 처리 등 다양한 분야에서 활용됩니다.아래는 자바스크립트의 클래스(class) 문법을 사용해 작성한 스택 클래스의 전체 구현 예제입니다.스택 클래스 전체 코드class Stack { constructor(maxSize) { // 최대 크기가 지정되지 않으면 기