코드스테이츠 AI 부트캠프/Section 5

AIB_521_복습정리 : 자료구조(Data Structure) - 연결 리스트, 큐, 스택

yourhm 2022. 3. 2. 15:12
section5 최종 목적은 자료구조와 알고리즘을 이해하며 프로그래밍하는 것이다.
521 - 524 목적은 프로그램의 기반이 되는 자료구조와 알고리즘을 반복해서 학습하는 것이다.

 

학습목표

  • 자료구조의 코어가 되는 추상자료형(ADT)과 함께 연결리스트, 큐, 스택의 설계에 대해 익혀야 한다.

 

핵심 키워드

  • 문제해결 & 컴퓨팅 사고력
  • 자료구조 (Data Structure)
  • 추상자료형 (Abstract Data Type: ADT)
  • 연결리스트, 큐, 스택
  • 파이썬 내장함수

자료 구조의 미션

  • 현실을 프로그래밍적으로 표현하기
  • 큰 데이터효율적으로 관리하기 (메모리의 효율적인 사용)

적은 양의 데이터로는 자료 구조의 힘을 체감할 수 없다. 그렇기 때문에 나처럼 이제 막 공부를 시작하는 사람은 공감도 안되고 이해하기도 어려울 수 있다. 경험이 어느 정도 쌓여야 자료 구조의 필요성을 체감하고 이해도 될 것이다. 

 

 

자료 구조 vs. 추상 자료형 ?

추상 자료형

  • 기능의 구현 부분을 나타내지 않고 순수하게 기능이 무엇인지 나열한 것이 => 추상 자료형
  • 추상 자료형은 객체 지향 언어의 클래스 개념과 같다.
  • 추상 자료형은 마치 사용설명서의 개념과 같다.
  • 추상 자료형은 구현자와 사용자를 분리해 준다.
  • 추상 자료형은 정해진 것이 아니다. 많이 사용되고 있는 형태들은 있지만 자신의 구현 목적에 따라서 추상 자료형은 얼마든 달라질 수 있다.

 

자료 구조

  • 추상 자료형에 구현이 들어가는 순간, 그 구현체를 칭하는 것이 => 자료 구조
  • 프로그램에서 자료들을 정리하는 여러가지 구조
  • 프로그램은 이러한 자료구조와 문제를 해결하는 절차인 알고리즘으로 구성된다.

 

 

연결 리스트

출처: 생활코딩 YouTube (https://youtu.be/LRfLzM5uVDg)

 

출처: 생활코딩 YouTube (https://youtu.be/LRfLzM5uVDg)

 Add  psuedo code

▶ Add a value to the head (addFirtst)

STEP 1) 임시변수 temp 에 새로운 숫자 입력값을 할당

temp = input new number(n)

 

STEP 2) temp 의 next 값으로 기존 head 값을 할당. (포인터 변경)

temp.next = head

 

STEP 3) head 에 임시변수 temp 값을 할당 (head 교체)

head = temp

 

Add a value to the middle (addMiddle)

STEP 1) head 값을 임시변수 pre 에 할당

pre = head

 

STEP 2) pre 에 현재 pre 의 next 인 값을 할당 (pre 교체: head 값 -> add될 숫자 앞 위치의 값)

for문 또는 while (--k != 0):
    pre = pre.next

 

STEP 3) after 에 pre 의 next 인 값을 할당

after = pre.next

 

STEP 4) new 에 새로운 숫자 입력값을 할당

new = input new number(n)

 

STEP 5) pre 의 next 값으로 new 값을 할당 (포인터 변경)

pre.next = new

 

STEP 6) new 의 next 값으로 after 값을 할당 (포인터 변경)

new.next = after

 

Add a value to the tail (addLast)

STEP 1) 임시변수 temp 에 새로운 숫자 입력값을 할당

temp = input new number(n)

 

STEP 2) 기존 tail 의 next 값으로 임시변수 temp 값을 할당 (포인터 변경)

tail.next = temp

 

STEP 3) tail 에 임시변수 temp 값을 할당 (tail 교체)

tail = temp

 

 Remove  psuedo code

STEP 1) head 값을 임시변수 cur 에 할당

cur = head

 

STEP 2) cur 에 현재 cur 의 next 인 값을 할당 (cur 교체: head 값 -> remove될 숫자 앞 위치의 값)

for문 또는 while (--k != 0):
    cur = cur.next

 

STEP 3) del 에 cur 의 next 인 값, 즉 remove될 값을 할당

del = cur.next

 

STEP 4) cur 의 next 에 cur의 next, next 인 값을 할당 (포인터 변경: remove될 숫자 다음 위치의 값으로)

cur.next = cur.next.next

 

STEP 5) del 값을 삭제

delete del

 

 

 

 

[참고자료]
비쥬얼고

https://visualgo.net/en

데이터 구조 기초

https://ehrn35.tistory.com/2

https://dev-emmababy.tistory.com/87

https://velog.io/@jha0402/Data-structure-%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%9D%BC%EB%A9%B4-%EA%BC%AD-%EC%95%8C%EC%95%84%EC%95%BC-%ED%95%A0-7%EA%B0%80%EC%A7%80-%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0

생활코딩 - 유투브 data structure

https://youtube.com/playlist?list=PLuHgQVnccGMDsWOOn_P0EmAWB8DArS3Fk 

생활코딩 - 블로그 linked list

https://opentutorials.org/module/1335/8857

연결리스트/배열 - 시간복잡도

https://m.blog.naver.com/raylee00/221944085465

과제도움

https://daimhada.tistory.com/107

https://d9249.tistory.com/40