개발/알고리즘 & 자료구조 6

[자료구조 with JS] 연결 리스트(Linked List) (3) 반복문과 알고리즘

이전글: [자료구조 with JS] 연결 리스트(Linked List) (1) 개념과 클래스 [자료구조 with JS] 연결 리스트(Linked List) (2) 삽입, 검색, 삭제 연결 리스트의 반복문 for...of 반복문 *[Symbol.iterator]() { let node = this.head; while(node) { yield node; node = node.next; } } [Symbol.iterator]이 왜 사용되었는지 알고 싶다면 MDN의 Iteration Protocols를 확인하면 된다. 또한 yield 키워드는 제너레이터를 사용한 것이다. forEach 반복문 forEach(func) { let node = this.head; let counter = 0; while(node)..

[자료구조 with JS] 연결 리스트(Linked List) (2) 삽입, 검색, 삭제

이전 글: [자료구조 with JS] 연결 리스트(Linked List) (1) 개념과 클래스 연결 리스트의 메서드 삽입 insertFisrt(data) insertFirst(data) { this.head = new Node(data, this.head) } insertAt(data, index) //Solution 1 insertAt(data, index){ //연결 리스트에 노드가 하나도 없는 경우 if(!this.head) { this.head = new Node(data); return; } //사용자가 입력한 index가 연결 리스트의 크기보다 큰 경우, tail 노드로 추가한다. if(this.size() < index) { this.insertLast(data); return; } //사용..

[자료구조 with JS] 연결 리스트(Linked List) (1) 개념과 클래스

연결 리스트(Linked List) 연결 리스트는 순서가 있는 데이터의 집합으로, 여러 노드들이 들어있다. 각 노드는 정보를 담고 있으며 다른 노드를 가리킨다. 배열은 크기가 고정되어 있는 만면, 연결 리스트는 실행 시간에 메모리를 할당, 해제할 수 있다. 즉, 동적 자료 구조이다. 연결 리스트의 특징 1. 연결 리스트 내부의 노드의 순서는 항상 유지된다. 2. 모든 연결 리스트에는 두 개의 특수한 노드가 있다: 맨 처음 노드인 head, 맨 마지막 노드인 tail이다. 3. tail 노드를 알아볼 수 있는 방법: 다음 노드에 대한 참조가 없다. 4. 모든 노드에는 두 개의 부분이 있다. 데이터 파트와 다음 노드에 대한 참조 파트이다. 5. 어떠한 타입의 자바스크립트 데이터든 노드에 할당할 수 있다. 노..

[자료구조 with JS] 스택(Stack)

스택(Stack) 데이터가 들어오는 방향과 나가는 방향이 같은 자료구조이다. 마지막에 삽입된 항목만을 제거하고 접근할 수 있다. 상자 안에 그릇이 쌓여있는 것을 상상하면 쉽다. 그릇을 추가할 때에도 맨 위에만 추가할 수 있고, 제거할 때에도 맨 위에 있는 그릇만 제거할 수 있다. 스택의 특징 1. First In Last Out (FILO): 마지막에 들어온 정보가 먼저 나간다. 2. 스택의 삽입과 삭제는 각각 배열의 push(), pop() 메서드를 사용하여 구현할 수 있다. 3. 속도가 빠르다는 장점이 있다. 삽입(push), 삭제(pop), 들여다보기(peek) class Stack { constructor() { this.stack = []; } push(n) { this.stack.push(n)..

[자료구조 with JS] 큐(Queue)

큐(Queue) 데이터가 한쪽으로 들어와서 다른 쪽으로 나가는 자료구조. 사람들이 줄을 서서 입장을 기다리는 것을 생각하면 된다. 큐의 특징 1. First In First Out (FIFO): 먼저 들어온 정보가 먼저 나가는 구조이다. 2. 큐에 입력된 데이터는 그 순서가 계속 유지된다. 즉, 들어온 순서 그대로 나간다. 3. 큐의 삽입과 삭제는 각각 배열의 unshift & pop 또는 shift & push를 사용하여 구현할 수 있다. (두 방법은 줄 서는 방향의 차이이다. unshift & pop은 오른쪽부터 왼쪽으로 줄을 서고 shift & push는 왼쪽부터 오른쪽으로 줄 선다.) 삽입과 삭제 unshift & pop 사용 class Queue { constructor() { this.data..

728x90
반응형