-
2일찬데 왜 벌써 한달은 한 것같은 느낌일까
챌린지 이렇게 하는게 맞는건진 모르겠지만
일단은 Go!
자, 오늘은
Part1. 딥러닝을 시작하기전에
CH02-05. 스택(Stack)
&
CH02-06. 큐(Queue)
CH02-05. 스택(Stack)
그래픽스를 공부할 때 파이프라인을 공부하게 되는데, 이때 스택과 큐에 대한 공부를 잠깐 했었던 것 같다.
교수님께서는 에전에 택시에서 동전을 취급하는 장치? 를 늘 비유하셔셔 얘기해주셨었는데,
자, 오늘은 어떻게 설명을 하실려나.
스택자료구조란?
"다양한 알고리즘과 프로그램에서 사용되므로 반드시 알아둬야합니다."
스택: 먼저 들어온 데이터가 나중에 나가는 자료구조
흔히 박스가 쌓인 형태를 말한다고 한다.(수불관리가 안되는....먼저 들어온 박스는 계속 짱박아두고 새로 입고된 박스부터 쓴다는 말...)
한가지 헷갈렸던 점은... 머리(head) = 최상위 원소다.
즉, 데이터가 왼쪽에서 들어가서 오른쪽에 점점 쌓여져 가는 방법인데 문득 든 생각..
(일본도 이 방향으로 공부를할까? 책을 오른쪽에서 왼쪽으로 읽는데 방향이 반대로 설명되지 않을까 싶다. 잡소리였다.)스택의 연산?
어제 배운 리스트처럼 스택은 여러가지 연산을 제공한다.
1. 삽입(Push) / 스택에 원소를 삽입하는 연산
2. 추출(Pop) / 스택에서 원소를 추출하는 연산(제거용)
3. 최상위 원소(Top) / 스택의 최상위 원소(맨마지막에 들어온 원소)를 확인하는 연산
(★ 제거하는 것이 아니라 보기만 하고 그대로 반환하는 거시다, 스택의 상태변경 無)
4. Empty / 스택이 비어있는지 확인하는 연산
파이썬의 리스트자료형이 이런 기능을 제공하는데, 스택에서의 삽입연산과 동일하다....!
→ 리스트 자료형으로 이 스택을 구현하기에 아주 간단하다는 것이 특징이다.
파이썬에서 스택을 구현하는 방법 ①리스트 자료형
append()메서드 : 마지막 위치에 원소를 삽입
pop()메서드 : 마지막 위치의 원소를 추출
한가지 헷갈렸던 점은... 머리(head) = 최상위 원소다.
즉, 데이터가 왼쪽에서 들어가서 오른쪽에 점점 쌓여져 가는 방법인데 문득 든 생각..
(일본도 이 방향으로 공부를할까? 책을 오른쪽에서 왼쪽으로 읽는데 방향이 반대로 설명되지 않을까 싶다. 잡소리였다.)
내가 설정한 arr은 [8,4,2,3,7,5,1,9] 인데, 보면 마지막에 넣은 9부터 꺼낸다. 8은 맨 마지막에 깔린 박스다.
파이썬에서 스택을 구현하는 방법 ②연결리스트
연결리스트에서는 아래와 같은 순서를 따른다.
① 데이터를 삽입하고 싶다
1. 새롭게 데이터를 3 왼쪽으로 넣는다.(새로운 데이터를 8이라고 가정)
2. 8이라는 데이터에서 기존의 헤드(3)으로 포인터를 연결해주고,
3. 머리 포인터(왕관)을 새로운 데이터(8)로 갈아껴주면 끝.
② 데이터를 삭제하고 싶다
1. 머리(head) 왕관을 그냥 다음 데이터를 가리키만 하는 것으로 기존의 맨 앞 데이터는 사실상 삭제가 된것으로 간주


이부분 헷갈려 죽겠다... 주소를 참조하는 것인데, 후.. CH02-06. 큐
먼저 삽입된 데이터가 먼저 추출되는 자료구조.(중요한 특성)
큐: 먼저 대기표를 뽑은 사람이 먼저 서비스를 받는다.
연결리스트를 이용하여 큐 구현하는 것이 가장 일반적이다.
연결리스트로 구현할 때는 머리(head), 꼬리(tail) 로 구성된다.
삽입할 때는 꼬리(tail) 위치에 데이터를 넣는다. / 삭제할 때는 머리(head) 위치에서 꺼낸다.!!(공부를 하면서 느꼈는데, 가로로 데이터를 시각화 하기 보다는 세로로 시각화 하는게 난 개인적으로 더 이해가 잘된다.)

스택과 유사한데, 자 다시 한번 잘 보면,
5라는 데이터 뒤에 8이라는 데이터를 넣고싶다면
5라는 데이터에서 새로 추가된 8이라는 데이터를 가리키는 포인터를 통해 두 데이터를 연결해주고,
꼬리를 나타내는 포인터를 이제 8이라는 데이터로 갖고오면 된다.
반대로, 데이터를 삭제허려면 앞에 3이라는 데이터에 붙어있는 head 포인터를 2에다가만 붙히면 끝.
(정말 말로만 이렇게 쉬우면 좋겠다만 코딩을 하면 머리가 조금 빠개진다)
연결 리스트와 리스트간 시간차이가 많이 난다. 연결리스트 vs 배열기반 리스트
1. 연결리스트는 꼬리로 데이터가 들어가고 머리로 데이터가 빠져나가기 때문에
입력시, 기존의 데이터를 새 데이터로 포인터 연결
삭제시, 헤드 포인터를 두번째로 옮기면 되지만,
2. 배열기반 리스트는 첫번 째 요소를 제거할 때 나머지를 옆으로 다 한칸씩 옮겨야하기 때문에
시간이 오래걸린다.
2일차 끝.
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
'패스트캠퍼스 챌린지' 카테고리의 다른 글