Stack, Queue, Linked List
2019. 7. 24. 21:37ㆍjavascript/data structure
1. stack
- 데이터를 한쪽 끝에서만 넣고 뺄 수 있는 LIFO(Last In First Out) 형식의 선형 자료형이다.
- 스택의 연산
- pop() : 스택 가장 위의 항목 제거
- push(item) : item 하나를 스택의 가장 윗부분에 추가한다.
- peek() : 스택의 가장 위에 있는 항목을 반환한다.
- 스택의 특징
- 배열과 달리 스택은 상수 시간에 i 번째에 접근할 수 없다.
- 데이터 추가 삭제 연산에서는 상수 시간에 접근이 가능하다.
- Pseudo Code
- Stack 함수를 생성
- 데이터를 담을 배열을 생성
- 배열 마지막에 값을 추가하는 함수를 만든다. (push)
- 배열 마지막에 값을 제거하는 함수를 만든다. (pop)
- 배열 마지막 값을 반환하는 함수를 만든다. (peek)
2. Queue
- 앞부분부터 삭제가 되고 끝 부분부터 데이터가 입력되는 선입선출 FIFO (Firest In First Out) 구조이다.
- tree의 깊이 우선 탐색이나 sliding window 등 주로 순서 처리의 시스템에 쓰인다.
- 큐의 연산
- enqueue() : 큐에 요소를 추가(끝 부분 / push)
- dequeue() : 큐에서 요소를 삭제 (첫 부분 / shift)
- front() : 큐의 앞부분에 저장된 요소 반환
- back() : 큐의 끝 부분에 저장된 요소 반환
- Psuedo Code
- Queue 함수를 생성
- 배열을 생성
- 배열의 끝부분에 요소를 추가하는 함수를 만든다. (push)
- 배열의 첫 부분을 제거하는 요소를 만든다. (shift)
- 배열의 첫 부분에 저장된 요소 반환 하는 함수를 만든다.(front)
3. Linked List
Node 는 마디, 거점이란 뜻이고 Vertex는 정점, 꼭짓점이라고 하는데 둘 다 연결이란 의미를 가지고 있다고 말할 수 있다.
즉 사각현으로 묶여진 부분이 하나의 노드라고 할 수 있고 위의 그림에선 4개의 노드가 존재하고 있다.
노드 안에는 2개의 필드(변수)가 있다.
- Data field : 저장되는 실제 값
- Linked field : 다음 구성 요소(노드)를 가지고 있다.
Linked list는 순서가 있는 데이터 조합으로 이것을 이용하기 위해서는 첫 번째 노드가 무엇인가를 알 수 있어야 한다. 왜냐하면 첫 번째 노드를 찾아서 링크필드를 이용하여 다음 코드들을 찾아갈수 있기 때문이다. 즉 첫번째 노드가 무엇인지를 의미하는 정보를 HEAD 필드에 적는다 이 필드도 변수이고 첫번째 값이 무엇인가를 가리키고 있다.
Linked list 특징
- 인풋사이즈를 모를 때 메모리 할당 효율이 좋다.
- 데이터 하나당 추가적으로 소모되는 메모리 양이 (Array List)보다 많다.
- 중간 데이터 추가,삭제의 효율성이 좋다.
Pseudo Code
현재 자신의 값과 다음 노드(변수)의 값을 가지고 있는 노드(변수)를 생성하는 생성자 함수를 만든다.
노드를 앞에 추가하는 함수
- 생성자 함수로 추가할 값을 가진 노드를 만든다.
- 생성된 노드의 linked filed에 head 값을 할당 해준다.
- head 값에 생성된 노드를 할당 해준다.
노드의 중간에 값을 추가하는 함수
- 헤드 즉 첫번째 값을 담을 변수를 만들고 첫번째 값을 변수에 할당한다.
- 추가하려고 하는 자리값을 빼주어서 0이 아닐때 까지 돌아가는 while문을 만든다.
- 와일문이 돌아 갈때마다 첫번째 값을 담은 변수에 다음 노드값을 할당 해준다.
- 와일문이 종료된 뒤 첫번째 값을 담은 변수의 다음 노드값을 참조 하는 새로운 변수를 만들어 준다.
- 새로운 값이 들어갈 변수를 만들어 준다.
- 헤드값의 linked filed에 새로운 값이 들어간 변수를 할당해준다.
- 새로운 값이 들어간 변수의 linked filed에 헤드값의 다음 노드값을 참조하는 변수를 할당해 준다.
노드의 값을 삭제하는 함수
- 헤드값을 가진 변수 curr을 만든다.
- 삭제하려는 자리값을 빼주어서 0이 아닐때 까지 돌아가는 while문을 만든다.
- 와일문이 종료될 때 까지 curr에 헤드값 다음의 변수를 할당해준다.
- curr의 linked filed 값(즉 curr의 다음 노드 값)을 가진 delete를 만든다.
- curr의 linked filed에 curr의 다음다음 값을 할당 해준다.
- delete를 삭제한다.
'javascript > data structure' 카테고리의 다른 글
Hash Table (0) | 2019.07.28 |
---|---|
Tree (0) | 2019.07.25 |