티스토리 뷰

Programming

큐, 스택, 트리

s00oo 2023. 12. 11. 23:50

추상 자료형 ADT(Abstract Data Type)

- 기능의 구현 부분을 나타내지 않고 순수한 기능이 무엇인지 나열한 것

- 구현 방법을 명시하고 있지 않음.

- 예로는 큐, 스택, 연결 리스트(트리) 가 있다.

 

 


큐(Queue)

  • 선형(linear) 자료형.
  • FIFO(First In First Out) : 먼저 집어넣은 데이터가 먼저 나온다.
  • 데이터를 집어넣는 enqueue, 데이터를 추출하는 dequeue 등의 작업을 할 수 있다.

큐는 순서대로 처리해야 하는 작업을 임시로 저장해두는 버퍼(buffer)로서 많이 사용

class Queue {
  constructor() {
    this._arr = [];
  }
  enqueue(item) {
    this._arr.push(item);
  }
  dequeue() {
    return this._arr.shift();
  }
}

const queue = new Queue();
queue.enqueue(1);
queue.enqueue(2);
queue.enqueue(3);
queue.dequeue(); // 1

 


스택(Stack)

  • 선형(linear) 자료형.
  • LIFO(Last In First Out) : 나중에 집어넣은 데이터가 먼저 나온다.
  • 데이터를 집어넣는 push, 데이터를 추출하는 pop, 맨 나중에 집어넣은 데이터를 확인하는 peek 등의 작업을 할 수 있다.

스택은 서로 관계가 있는 여러 작업을 연달아 수행하면서 이전의 작업 내용을 저장해 둘 필요가 있을 때 사용

class Stack {
  constructor() {
    this._arr = [];
  }
  push(item) {
    this._arr.push(item);
  }
  pop() {
    return this._arr.pop();
  }
  peek() {
    return this._arr[this._arr.length - 1];
  }
}

const stack = new Stack();
stack.push(1);
stack.push(2);
stack.push(3);
stack.pop(); // 3

트리(Tree)

  • 여러 데이터가 계층 구조 안에서 서로 연결된 형태를 나타낼 때 사용

https://towardsdatascience.com/8-useful-tree-data-structures-worth-knowing-8532c7231e8c

  • 노드(node) : 트리 안에 들어있는 각 항목
  • 자식 노드(child node) : 노드는 여러 자식 노드를 가질 수 있다.
  • 부모 노드(parent node) : P는 Q와 R의 부모 노드
  • 뿌리 노드(root node) : 트리의 가장 상층부에 있는 노드. P
  • 잎 노드(leaf node) : 자식 노드가 없는 노드
  • 조상 노드(ancestor node) : 노드 A의 자식을 따라 내려갔을 때 노드 B에 도달할 수 있다면, 노드 A를 노드 B의 조상 노드라고 부른다.
  • 자손 노드(descendant node) : 노드 A가 노드 B의 조상 노드일 때, 노드 B를 노드 A의 자손 노드라고 부른다.
  • 형제 노드(sibling node) : 같은 부모 노드를 갖는 다른 노드.
class Node {
  constructor(content, children = []) {
    this.content = content;
    this.children = children;
  }
}

const tree = new Node('hello', [
  new Node('world'),
  new Node('and'),
  new Node('fun', [
    new Node('javascript!')
  ])
]);

function traverse(node) {
  console.log(node.content);
  for (let child of node.children) {
    traverse(child);
  }
}

traverse(tree);

'Programming' 카테고리의 다른 글

프론트엔드 테스트 종류  (0) 2024.03.19
[JavaScript] reduce()  (0) 2023.12.05
[JavaScript] Math 메소드 정리 + 예제  (2) 2023.12.05
[Sass project] 4. @mixin  (0) 2023.11.23
[Sass project] 3. CSS 유용한 사이트 모음  (0) 2023.11.23
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/06   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
글 보관함