[TIL 15][Data Structure] Linked List, Stack, Queue
7042 단어 TILdata structureTIL
Linked List (연결리스트)
- 정의되지 않은 갯수의 데이터를 관리하기 위해 리스트를 사용한다.(<-> 배열)
- 보통 데이터의 삽입과 삭제가 많이 이뤄지는 환경에서 유용함
그림 그릴때 다음 Node 주소 공간이라고 써야했는데, 데이터라고 써버렸다..
- 연결리스트에는 단방향과 양방향이 있는데, 단방향은 위 그림처럼 자신의 한 부분은 다음 Node의 주소공간을 가지고 있고, 양방향은 이전 Node 주소공간과 다음 Node의 주소 공간을 가지고 있다.
- 연결리스트에서 중간에 Node를 삽입 시 자신의 이전 Node가 가지고 있던 다음 Node의 주소값을 자신이 갖고 이전 Node에게는 자신의 주소값을 가지게 한다.
- 삭제는 삽입의 역으로 삭제되는 Node의 다음 Node의 주소값을 삭제되는 Node의 이전 Node에게 전해준다.
Stack
- 스택은 뜻 그대로 쌓는다는 개념이다.
- 스택은 먼저 들어간 데이터가 나중에 나오는 구조이고 LIFO(Last In Last Out)라고 불린다.
- 스택에 데이터를 삽입할 때는
push()
제거할 때는pop()
을 사용해서 처리할 수 있다.
class Stack {
constructor(){
this.arr = [];
this.idx = 0;
}
push(value){
this.arr[this.idx++] = value;
}
pop(){
if (this.idx === 0) return null;
else {
// 잘 안되서 고민중
// 1. 데이터 하나를 추출하니 idx값이 줄어든다
// 2. 추출 후의 arr 배열 선언?흠..
}
}
peek(){
return this.arr.slice(-1);
}
isEmpty(){
return this.arr.length === 0
}
}
- 스택이 지원하는 4가지 기능이 있다해서 구현해봤다
- pop()
- push()
- peek(): 스택의 top에 위치하는걸 반환하는것이라고 해서 slice를 이용했는데, 저렇게 해도 될지는 모르겠네..
- isEmpty(): 스택에 데이터가 존재하는지 여부
코드를 짜본 뒤 다른 사람들은 어떻게 짯는지 검색을 해보니까 직접 만든 pop이나 push안에 또 pop이나 push를 써서 만들었던데.. 그 메소드들을 재사용하면 직접 만든 의미가 있는건가..?
Queue
- 큐는 양쪽이 뚫린 파이프에 데이터를 집어넣는다고 생각하면 된다.
- 큐는 스택과 다르게 먼저 넣은 데이터가 먼저 출력이 되는 FIFO(First In First Out) 형식이다.
- 데이터를 집어넣는 것을 enqueue, 데이터를 추출하는 것을 dequeue라고 한다.
Class Queue {
constructor(){
this.arr = [];
}
enqueue(value){
this.arr.push(value);
}
dequeue(){
this.arr.shift();
}
}
이번엔 메소드를 사용해서 만들어보았다
출처
개념 이해: 엔지니어대한민국(유튜브)
Author And Source
이 문제에 관하여([TIL 15][Data Structure] Linked List, Stack, Queue), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@devpark_0x1c/TIL-15Algorithm-Linked-List-Stack-Queue저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)