728x90
728x90

JavaScrpt/자료구조 11

JavaScript Doubly Linked List - 이중 연결(링크드) 리스트 만들기 2, Data Structures

이어서 연결 리스트에서 데이터로 노드를 찾고 찾은 노드에 데이터를 추가하는 함수를 추가하겠습니다. 연결 리스트에서 노드의 데이터를 찾기 위해서는 앞(front, HEAD와 연결된 노드(Node) 객체) 또는 뒤(rear, TAIL과 연결된 노드(Node) 객체)부터 노드의 데이터를 비교하여 노드(Node) 객체를 찾고 리턴합니다. // 연결 리스트에서 데이터를 찾는 함수 this.findNode = function(data, findDirection) { if (data == undefined || typeof data == "undefined " || data == null) { return null; } var node = null; // findDirection - front (default) if..

JavaScript Doubly Linked List - 이중 연결(링크드) 리스트 만들기 1, Data Structures

이중 연결(링크드) 리스트(Doubly Linked List) 이중 연결 리스트(Doubly Linked List)란, 데이터와 2개의 포인터로 구성된 노드(Node)들을 연결하는 구조입니다. 노드는 2개의 포인터(이전 포인터(prev), 다음 포인터(next))를 이용하여 이전 노드와 다음 노드와 연결됩니다. 첫 번째 노드(Node)에 이전 포인터(prev)는 HEAD가 아닌 NULL입니다. function()으로 Node 객체를 선언하겠습니다. Node 객체는 데이터와 이전 노드, 다음 노드로 구성합니다. 이전 노드와 다음 노드는 Node 객체를 참조하게 됩니다. // 노드 객체 var Node = function(data) { // 데이터 this.data = data; // 이전 노드 this.p..

JavaScript Linked List - 연결(링크드) 리스트 만들기 2, Data Structures

이어서 연결 리스트의 맨 앞에 데이터를 추가하고 삭제하는 함수를 추가하겠습니다. 맨 앞에 노드를 추가하기 위해서는 HEAD와 연결된 노드(Node) 객체를 생성된 노드(Node) 객체의 다음 노드로 참조시킵니다. 그리고 HEAD에 생성된 노드(Node) 객체를 참조시킵니다. // 맨 앞에 데이터를 추가하는 함수 this.addFirstNode = function(data) { // 노드 객체 생성 var node = new Node(data); // HEAD가 NULL이면 연결된 노드(Node)가 없는 빈 상태(Empty)이므로 생성된 노드를 참조시킵니다. if (this.isEmpty()) { this.head = node; } else { // HEAD가 NULL이면 연결된 노드(Node)가 없는 빈..

JavaScript Linked List - 연결(링크드) 리스트 만들기 1, Data Structures

연결(링크드) 리스트(Linked List) ​ 연결 리스트(Linked List)란, 데이터와 포인터로 구성된 노드(Node)들을 연결하는 구조입니다. 노드(Node)는 포인터를 이용하여 다음 노드(Node)와 연결됩니다. 스택(Stack), 큐(Queue), 덱/데크(Deque, Double-Ended Queue), 원형 큐/환상 큐(Circular Queue)는 버퍼(배열)를 사용하기 때문에 버퍼(배열)에서의 위치 값으로 데이터를 추가하고 가져갑니다. 버퍼(배열)가 아닌 포인터로 연결된 연결 리스트(Linked List)에서는 버퍼(배열)의 위치 값이 아닌 시작 포인터를 가지고 있습니다. 시작 포인터를 HEAD라고 합니다. 시작 포인트가 NULL이면 연결된 노드(Node)가 없는 빈 상태(Empty..

JavaScript Deque(Double-Ended Queue) - 덱/데크 만들기, Data Structures

이전 원형 큐(Circular Queue - 또는 환상 큐)처럼 JavaScript의 Array 객체의 메서드를 사용하지 않고 덱/데크(Deque - Double-Ended Queue)를 만들어 보겠습니다. ​ 덱/데크(Deque - Double-Ended Queue)는 양쪽 모두에서 데이터를 넣고 가져오는 구조입니다. ​ 프로그램에서는 버퍼를 사용하기 때문에 방향의 개념이 없습니다. 그래서 큐의 뒤에서 데이터를 넣거나 가져오기 위해서 rear의 위치를 계산하여 처리하고 큐의 앞에서 데이터를 넣거나 가져오기 위해서 front의 위치를 계산하여 처리해야 합니다. front와 rear의 위치를 사용하여 데이터를 넣거나 가져옵니다. [파란색 화살이 front, 주황색 화살이 rear] ​ 큐의 뒤에 데이터를 ..

JavaScript Stack - 스택 만들기, Data Structures

이전 원형 큐(Circular Queue - 또는 환상 큐)처럼 JavaScript의 Array 객체의 메서드를 사용하지 않고 스택(Stack)을 만들어 보겠습니다. ​ 스택(Stack)은 한쪽으로 데이터를 쌓아 올리는 구조입니다. 프로그램에서 데이터의 위치를 top이라고 합니다. ​[파란색 화살이 top] ​ 스택에 데이터를 추가하기 위해서 top의 위치에 1을 더한 후 데이터를 추가합니다. 그리고 스택에서 데이터를 가져오기 위해서는 top의 위치에 데이터를 가져오고 top에서 1을 뺍니다. top이 -1이면 스택에 데이터가 없는 상태이고 top의 위치가 스택의 마지막 위치와 같으면 더 이상 스택에 데이터를 넣을 수 없는 포화 상태입니다. ​ 스택(Stack) 객체 생성하기 ​ JavaScript에서 ..

JavaScript Queue - 큐 만들기, Data Structures

이전 원형 큐(Circular Queue - 또는 환상 큐)처럼 JavaScript의 Array 객체의 메서드를 사용하지 않고 큐(Queue)를 만들어 보겠습니다. ​ 큐(Queue)는 한쪽으로 데이터를 넣고 다른 쪽으로 데이터를 가져오는 구조입니다. 그래서 데이터를 넣는 쪽을 rear라고 하고 데이터를 가져오는 쪽을 front라고 합니다. ​ 프로그램에서는 버퍼를 사용하기 때문에 방향의 개념이 없습니다. 그래서 데이터를 넣는 위치를 rear로 데이터를 가져오는 위치를 front로 사용합니다. 그리고 데이터를 넣는 것을 인큐(Enqueue), 데이터를 가져오는 것을 디큐(Dequeue)라고 합니다. [파란색 화살이 front, 주황색 화살이 rear] ​ 큐(Queue)가 생성되면 front와 rear의..

JavaScript Circular Queue - 원형 큐/환상 큐 만들기, Data Structures

지금까지 만든 스택(Stack), 큐(Queue), 덱/데크(Deque) 객체를 보면 아시겠지만 Array 객체로 모두 구현이 가능합니다. JavaScript의 Array 객체는 덱/데크(Deque)라고 생각하시면 됩니다. 그리고 크기 제한을 하지 않으면 사용할 수 있는 메모리만큼 사용할 수 있습니다. ​ 만약 JavaScript의 Array 객체의 메서드를 사용하지 않고 직접 큐(Queue)를 만들어서 사용하면 무슨 문제가 생길까요? ​ 바로 데이터 Push와 Pop에 따른 큐(Queue)의 비효율적인 메모리 사용 문제입니다. ​ 큐(Queue) 데이터를 넣는 위치(rear)와 데이터를 가져오는 위치(front)가 다릅니다. 그래서 데이터를 넣고 가져오기를 반복하다 보면 더 이상 데이터를 넣을 수는 상..

JavaScript Deque(Double-Ended Queue) - 배열 객체의 메서드로 덱/데크 만들기, Deque(Array - push,pop,shift,unshift), Data Structures

JavaScript에서 Array 객체의 push() 메서드, pop() 메서드, shift() 메서드, unshift() 메서드를 사용하여 덱/데크(Deque - Double-Ended Queue)처럼 사용할 수 있습니다. ​ ​ 덱/데크(Deque - Double-Ended Queue) ​ 덱/데크(Deque - Double-Ended Queue)이란, 양쪽 모두에서 데이터를 넣고 가져오는 구조입니다. 덱의 모양은 큐의 모양과 동일합니다. 빨대나 호스를 생각하시면 됩니다. Array 객체의 push() 메서드, pop() 메서드, shift() 메서드, unshift() 메서드를 사용하여 ​덱/데크(Deque)에 데이터 넣고 가져오기 var deque = []; console.log(deque); -..

JavaScript Queue - 배열 객체의 메서드로 큐 만들기, Queue(Array - push,shift), Data Structures

JavaScript에서 Array 객체의 push() 메서드와 shift() 메서드를 사용하여 큐(Queue)처럼 사용할 수 있습니다. ​ ​ 큐(Queue) ​ 큐(Queue)란, 한쪽으로 데이터를 넣고 다른 쪽으로 데이터를 가져오는 구조입니다. 큐의 모양을 빨대나 호스를 생각하시면 됩니다. ​ 데이터를 추가한 순서대로 데이터가 저장되고 추가한 순서대로 데이터를 가져오게 됩니다. 즉, 가장 먼저 추가한 데이터가 가장 먼저 나오는 것을 FIFO(First In First Out)라고 합니다. ​ 그리고 데이터를 넣는 쪽을 rear라고 하고 데이터를 가져오는 쪽을 front라고 하고 데이터를 넣는 것을 인큐(Enqueue), 데이터를 가져오는 것을 디큐(Dequeue)라고 합니다. Array 객체의 pus..

JavaScript Stack - 배열 객체의 메서드로 스택 만들기, Stack(Array - push,pop), Data Structures

JavaScript에서 Array 객체의 push() 메서드와 pop() 메서드를 사용하여 스택(Stack)처럼 사용할 수 있습니다. 스택(Stack) ​ 스택(Stack)이란, 데이터를 쌓아 올리는 구조입니다. 스택의 모양을 컵이나 바닥이 막혀있는 기둥을 생각하시면 됩니다. 그래서 데이터를 추가하면 맨 위에 쌓이고 데이터를 가져가면 맨 위에 쌓인 데이터를 가져가게 됩니다. 즉, 가장 마지막에 추가한 데이터가 가장 먼저 나오는 것을 LIFO(last in first out)라고 합니다. Array 객체의 push() 메서드를 사용하여 스택(Stack)에 데이터 넣기 var stack = []; console.log(stack); --> [] console.log(stack.length); --> 0 //..

728x90
728x90