여러 데이터들의 묶음을 저장하고, 사용하는 방법을 정의해준것.
선형구조(스택, 큐) : 데이터를 일렬로 저장하는 방식
비선형구조(트리, 그래프) : 데이터를 일렬로 저장하지 않음
데이터를 순서대로 쌓는 구조.
가장 먼저 들어간 데이터는 가장 나중에 나장 나중에 나갈 수 있다.
LIFO(last in first out) 또는 FILO 라고도 말한다.
ex) 브라우저의 뒤로가기,앞으로가기,새창열기
1. 새로운 페이지로 접속할 때, 현재 페이지를 Prev Stack에 보관합니다.
2. 뒤로 가기 버튼을 눌러 이전 페이지로 돌아갈 때에는,
현재 페이지를 Next Stack에 보관하고 Prev Stack에 가장 나중에 보관된 페이지를
현재 페이지로 가져옵니다.
3. 앞으로 가기 버튼을 눌러 앞서 방문한 페이지로 이동을 원할 때에는,
Next Stack의 가장 마지막으로 보관된 페이지를 가져옵니다.
4. 마지막으로 현재 페이지를 Prev Stack에 보관합니다.
//////////////////////////////
push();
pop();
데이터를 줄세우는 구조
가장 먼저 들어간 데이터가 가장 먼저 나갈 수 있다
FIFO LILO
ex) 프린트하는 과정
컴퓨터(출력 버튼)
-(임시 기억 장치의) Queue에 하나씩 들어옴
-Queue에 들어온 문서를 순서대로 인쇄
//컴퓨터와 프린터 처럼, 각 장치사이에 존재하는 처리속도(시간) 차이를 극복하기 위해,
//임시기억장치의 자료구조로 Queue를 사용한다 ===> Buffer버퍼.
1.CPU는 빠른 속도로 인쇄에 필요한 데이터(data)를 만든다.
2.이 데이터를 인쇄 작업 Queue에 저장하고 다른 작업을 수행합니다.
3.프린터는 인쇄 작업 Queue에서 데이터(data)를 받아 일정한 속도로 인쇄합니다.
////////////////////////
push();
shift();
그래프 : 여러개의 점들이 복잡하게 연결되어있는 관계를 표현한 자료구조
직접적인 관계라면, 두 정점을 이어주는 선이 존재하고,
간접적인 관례라면, 몇개의 점과 선에 걸쳐 이어지게 된다.
인접행렬
가장 빠른경로를 찾을때. 두 정점사이에 관계여부 확인
인접리스트
순서는 보통 중요하지 않다.(예외 존재) / 메모리의 효율적인 사용 가능
그래프의 여러 구조중 무방향으로 연결된 계층적 자료구조
데이터를 순차적으로 나열시키지 않았고, 하나의 데이터 뒤에 여러개 데이터가 존재하는비선형구조
루트라는 하나의 꼭짓점데이터를 시작으로 여러개의 데이터를 간선으로 연결함
이진트리는 자식노드가 최대 2개인 노드들로 구성되어있다.
이진탐색트리는 모든 왼쪽자식의 값이 루트나 부모보다 작고, 모든 오른쪽 자식의 값이 루트나 부모보다 큰 값을 가진다
let arr = [6,2,3,5,2,9,2,4];
let result = arr.findIndex((el) => {
return el > arr[0]
});
console.log(result); //5
//배열의 요소들을 순회하며, el이 arr[0]보다 크다면,
//해당 el의 인덱스를 반환한다.
//또한 해당값이 없다면 -1을 반환해준다.
const array1 = [1, 2, 3, 4];
// fill with 0 from position 2 until position 4
console.log(array1.fill(0, 2, 4));
// expected output: [1, 2, 0, 0]
// fill with 5 from position 1
console.log(array1.fill(5, 1));
// expected output: [1, 5, 5, 5]
console.log(array1.fill(6));
// expected output: [6, 6, 6, 6]
///////////////////////사용예시///////////////////
let newArr = Array(3).fill(0); // [0,0,0] 배열안에 3자리를 만들어서 모두 0으로 채움
자료구조는 데이터의 표현 및 저장방법을 말하고,
알고리즘은 자료를 대상으로 하는 문제의 해결방법을 말한다.
예를들어, 배열의 선언은 자료구조적인 코드,
배열에 저장된 요소의 합을 구하는 반복문의 구성은 알고리즘적인 코드이다.
즉, 자료구조가 결정되어야 그에 따른 효율적인 문제해결이 가능하기 때문에 둘은 매우 밀접하다고 한다......................
그리고 트리구조는 새 포스트로 따로 정리해야겠다.
이미지출처 by sehongpark