1. 자료구조
데이터(Data) : 문자, 소리, 숫자, 그림, 영상 등 실생활을 구성하는 모든 값. 분석하고 정리해 활용해야만 의미를 가짐.
=> 데이터의 특징을 파악하고 체계적으로 정리하면 데이터 활용하는데 유리함
자료구조는 여러 데이터의 묶음을 저장하고 사용하는 방법을 정의한 것이고, 자료구조에 대해 잘 알면 데이터에 적합한 자료구조를 빠르고 정확하게 적용하여 문제를 해결하고 데이터를 더 효율적으로 다룰 수 있다.
자료구조의 분류
선형 구조 : 데이터가 선의 형태로 순서를 갖고 줄지어 저장되는 형태. (스택, 큐)
비선형 구조 : 데이터가 일렬로 나열되지 않고, 자료의 순서도 불규칙적으로 저장되는 형태. ( 트리, 그래프)
💡 자료구조 시각자료 사이트
https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
Data Structure Visualization
www.cs.usfca.edu
visualising data structures and algorithms through animation - VisuAlgo
VisuAlgo is free of charge for Computer Science community on earth. If you like VisuAlgo, the only "payment" that we ask of you is for you to tell the existence of VisuAlgo to other Computer Science students/instructors that you know =) via Facebook/Twitte
visualgo.net
2. Stack
데이터(data)를 순서대로 쌓는 자료구조.
구조
동그란 원통에 차례대로 구슬이 들어간 모습을 생각해보기. (프링글스를 생각해도 좋음)
원통 - 자료구조 Stack
구슬 - data
입력과 출력이 하나의 방향, 즉 스택의 최상단에서만 이루어지는 제한적 접근.
LIFO(Last In First Out) 또는 FILO(First In Last Out)이라고 부른다.
PUSH : Stack에 데이터를 넣는것
POP : Stack에서 데이터를 꺼내는 것
특징
1. LIFO(Last In First Out) : 먼저 들어간 데이터는 제일 나중에 나온다. => 후입선출
이미지에서도 볼 수 있듯이, 스택에 데이터를 넣으면 1 - 2 - 3 순으로 아래에서 위로 쌓인다.
데이터를 빼낼때는 3 - 2 - 1 순으로 나오게 된다.
이런 특성으로 인해 스택 구조 내에서는 특정 데이터를 조회할 수 없고, 스택의 최상단에서만 데이터를 저장하거나 꺼낼 수 있다.
=> 저장 / 검색시 항상 스택의 최상단에서 행위가 이루어짐. 저장하거나 검색하는 프로세스가 매우 빠르다.
2. 하나의 입출력 방향을 갖고 있다.
데이터를 넣을때도 스택의 가장 최상단으로 넣고 뺄때도 스택의 가장 최상단으로 데이터를 뺄 수 있다.
3. 데이터는 하나씩 넣고 뺄 수 있다
Stack은 데이터를 넣고 빼는 경로가 스택의 최상단 한군데이기때문에 스택 내부에 데이터를 넣거나 뺄때 하나씩 최상단에서 처리할 수 있다. 한개씩 여러번 데이터를 넣어 스택 내부에 데이터를 여러개 쌓더라도, 데이터를 뺄때는 스택의 가장 최상단에서 한번에 하나의 데이터만을 뺄 수 있다.
예시
브라우저의 뒤로가기/앞으로가기
사용 순서
1. 새로운 페이지로 접속할 때, 현재 페이지를 Prev Stack에 보관
2. 뒤로 가기 버튼을 눌러 이전 페이지로 돌아갈 때 현재 페이지를 Next Stack에 보관하고 Prev Stack에 가장 나중에 보관된 페이지를 현재 페이지로 가져옴
3. 앞으로 가기 버튼을 눌러 앞서 방문한 페이지로 이동을 원할 때 Next Stack의 가장 마지막으로 보관된 페이지를 가져옴
4. 마지막으로 현재 페이지를 Prev Stack에 보관
3. Queue
Stack과 반대되는 개념. 먼저 들어간 데이터가 먼저 나오는 FIFO(First In First Out) 혹은 LILO(Last In Last Out)이 특징.
데이터의 입력은 큐의 끝인 tail에서, 데이터의 출력은 큐의 맨 앞인 head에서 진행된다. 데이터가 입력된 순서대로 처리되어야 할때 주로 사용한다.
Enqueue : Queue에 데이터 넣기
Dequeue : Queue에 데이터 꺼내기
특징
1. FIFO(First In First Out) : 먼저 들어간 데이터가 먼저 나온다 => 선입선출
이미지에서도 볼 수 있듯이, 큐에 데이터가 입력될때는 tail(rear로 표시되는 부분) 방향으로 입력된다.
출력될때는 가장 처음 부분인 head에서 출력된다.
2. 두개의 입출력 방향을 가진다.
데이터 입력은 큐의 맨 끝(tail)로만 가능하고 데이터 출력은 큐의 맨 앞(head)로만 가능하다.
즉, 데이터 입력과 출력하는곳이 각각 정해져있다. 따라서 입출력 방향이 같은 경우는 Queue 자료구조로 볼 수 없다.
3. 데이터는 하나씩 넣고 뺄 수 있다
Queue 자료구조는 처리시마다 한개의 데이터를 넣거나 뺄 수 있다.
즉, 큐에 한개씩 여러번 데이터를 넣어 큐 내부에 데이터가 여러개 쌓여있더라도 데이터를 뺄때는 큐의 맨 앞에서 한번에 한개의 데이터만을 뺄 수 있다.
예시
프린터에서 순서대로 인쇄하기
- 일반적으로 프린터는 속도가 느립니다.
- CPU는 프린터와 비교하여, 데이터를 처리하는 속도가 빠릅니다.
- 따라서, CPU는 빠른 속도로 인쇄에 필요한 데이터(data)를 만든 다음, 인쇄 작업 Queue에 저장하고 다른 작업을 수행합니다.
- 프린터는 인쇄 작업 Queue에서 데이터(data)를 받아 들어온 순서대로 일정한 속도로 인쇄합니다.
💡 버퍼(buffer)
컴퓨터 장치들이 데이터를 주고받을때 각 장치 사이에 존재하는 속도나 시간의 차이를 극복하기 위해 임시 기억장치의 자료구조로 Queue를 사용하고, 이것을 통틀어 버퍼라고 한다. 즉, 불규칙적으로 발생한 이벤트를 규칙적으로 처리하기 위해 사용하는 것이다.
✅ 스택(Stack)과 큐(Queue) 내용 정리
*********************************
[자료구조] 자료구조? 왜 그렇게 중요할까
자료구조란? 자료구조를 왜 알아둬야 할까? 자료구조는 컴퓨터과학에서 알고리즘과 함께 가장 중요한 기초이론이다. 왜 중요할까? 정의를 한번 살펴보면, 자료구조란 데이터에 편리하게 접근하
re-code-cord.tistory.com
https://www.programiz.com/dsa/stack
Stack Data Structure and Implementation in Python, Java and C/C++
Stack Data Structure In this tutorial, you will learn about the stack data structure and its implementation in Python, Java and C/C++. A stack is a linear data structure that follows the principle of Last In First Out (LIFO). This means the last element in
www.programiz.com
https://www.programiz.com/dsa/queue
Queue Data Structure and Implementation in Java, Python and C/C++
Queue Data Structure In this tutorial, you will learn what a queue is. Also, you will find implementation of queue in C, C++, Java and Python. A queue is a useful data structure in programming. It is similar to the ticket queue outside a cinema hall, where
www.programiz.com
'study > TIL' 카테고리의 다른 글
번들링과 웹팩(feat. 리액트) (0) | 2023.03.21 |
---|---|
23.03.15 - Tree, Graph (0) | 2023.03.15 |
23.03.13 - 기술면접 (0) | 2023.03.13 |
23.03.09 - OAuth (0) | 2023.03.09 |
23.03.08 - Token (0) | 2023.03.08 |