자료구조와 알고리즘

자료구조

  • 데이터를 효율적으로 관리할 수 있는 데이터구조
  • 대표적 자료구조: 배열, 스택, 큐, 링크드 리스트, 해쉬 테이블, 힙 

알고리즘

  • 어떤 문제에 특정한 입력을 넣으면 기대하는 출력을 얻을 수 있도록 만드는 프로그래밍

 => 어떤 자료구조와 알고리즘을 쓰냐에 따라 성능이 차이가 남

 

배열(Array)

데이터를 나열하고 각 데이터를 인덱스에 대응시킨 데이터구조

파이썬 에서는 리스트 타입이 배열을 대체

배열의 장단점

장점

  • 구현이 쉬움
  • 빠른 접근이 가능 : 인덱스를 통해 데이터에 바로 접근이 가능

단점

  • 데이터 추가 삭제가 어려움
  • 크기가 고정 되어있음

핵심연산

  • 인덱스를 통해 데이터를 읽을 수 있는것
  • 데이터를 수정할수 있는것(삭제없고 덮어쓰기)

연결 리스트(Linked List)

데이터와 데이터 사이를 화살표로 연결하여 관리하는 데이터구조

linked list 구성

노드(node)

  • 데이터가 저장되는 단위
  • [데이터값, 포인터] 로구성

포인터(pointer)

  • 다음 데이터의 주소를 담고 있는공간
  • 다음노드 혹은 이전 노드의 연결 정보를 가지고 있음

연결 리스트의 장단점

장점

  • 데이터 공간을 미리 할당하지 않아도됨
  • 삽입과 삭제가 빠름 ( 삽입 삭제가 빈번할때 사용)

단점

  • 데이터 구조표현에 소요되는 저장공간이 큼
    • 연결을위한 별도의 데이터 공간
  • 데이터를 찾는데 시간이 오래걸림
    • 인덱싱이 아닌 처음 원소부터 돌면서 찾아야함
  • 중간에 데이터 삭제시 앞뒤 데이터를 연결해야함

핵심연산

  • 현재위치의 값을 가져오기
  • 현재위치의 값 수정하기
  • 현재위치의 값 삭제하기
  • 현재위치에 값을 추가하기
  • 다음 위치로 이동하기

큐(Queue)

  • 가장 먼저 넣은 데이터를 가장 먼저 꺼낼수 있는 자료구조
  • FIFO( First-In, First-Out) 방식
  • head=front, tail=rear

Queue 활용

운영체제에서 멀티 태스킹을 위한 프로세스 스케줄링 방식을 구현

Queue 장단점

장점

  • 데이터의 삽입과 삭제가 빠름
    • 삽입 삭제 O(1)

단점

  • 정책에따라 가장 위쪽의 원소만 접근 가능
  • 탐색이 비효율적(다꺼내서 탐색)

Enqueue, Dequeue

enqueue: 큐에 데이터를 넣는 기능

deque: 큐에 데이터를 꺼내는 기능

=> Queue의 핵심연산

스택(Stack)

  • 스택은 한쪽 끝에서만 데이터를 넣거나 뺄 수 있는 구조
    • 데이터에 제한적으로 접근
  • 가장 나중에넣은 데이터를 먼저 추출할수 있는 구조
    • LIFO(Last-In, First-Out)

스택의 활용

  • 프로세스의 함수들이 동작하는 방식
  • 실행취소: 최근의 작업 부터 취소
  • 웹브라우저 뒤로가기 기능

스택 연산

push() : 데이터를 스택에 삽입(넣기)

pop() : 데이터를 스택에서 삭제(꺼내기)

stack underflow: 비어있는 스택에서 데이터를 꺼내려고 할 때 생기는 오류

stack overflow: 가득 차있는 스택에 데이터를 삽입하려고 할 때 생기는 오류

 

Reference

https://velog.io/@dsunni/자료구조-Array-Queue-Stack

https://lucaseo.github.io/posts/2021-01-27-python-datastructure-array-que-stack/

'자료구조' 카테고리의 다른 글

Python: Queue 구현하기  (0) 2024.04.30
Python: Stack 구현하기  (0) 2024.04.30
Python: linked list 구현하기  (0) 2024.04.30
Python: Array 구현하기  (1) 2024.04.30

+ Recent posts