Stack과 Queue는 자료구조를 공부 했다면 100% 이해를 하고 넘어가야한다.


스케줄링, 알고리즘 등 많은 곳에서 쓰이는데 일단 개념부터 살펴보자.



Stack과 Queue는 뭘까?


두 자료구조 모두 데이터가 쌓이는 방식, 혹은 구조를 뜻한다.

역시나 글로는 이해가 잘 안될 것 같아 아래에 각각에 대한 설명과 사진을 첨부 했다.



1. Stack, 스택


Stack. 채우다. 쌓다 라는 뜻을 가진 단어이다.

자료구조에서도 마찬가지로 데이터를 순차적으로 쌓아준다.

또한 데이터를 빼낼 때는 마지막에 들어온 데이터부터 내보낸다.

즉, 후입선출( 혹은 선입후출 )의 구조를 지니게 된다.


쌓는 과정을 push, 빼내는 과정을 pop이라고 한다.





단점을 살펴보자면 Low level(먼저 들어온 데이터)의 데이터를 가져가려고 하면 

위에 존재하는 High level(나중에 들어온 데이터)의 데이터를 다 빼야지 가져갈 수 있다.


또한 스택의 크기를 동적으로 변경하지 않는 한 Overflow( 데이터가 들어갈 공간이 모자른 현상 )이 일어날 수 있다.


2. Queue, 큐

앞에서 봤던 Stack은 출구와 입구가 같다면, Queue는 출구와 입구가 별도이다.

따라서 들어왔던 것은 입구로 나가지 못하므로 늦게 들어오면 늦게 들어올 수록 나가는 속도는 늦어진다.

즉, 선입선출( 혹은 후입후출 )의 구조를 가지게 된다.


데이터를 넣는 것을 Enqueue, 데이터를 제거하는 것을 Dequeue라고 한다. ( 책마다 다를 수 있다. )



단점을 찾아보자면

Queue는 Dequeue를 실행하면 데이터를 당겨와야한다.

1->2->3->4 순으로 데이터가 들어왔다고 하면 Queue의 상태는 아래와 같다.


rear [4]-[3]-[2]-[1] front


이 때 Dequeue를 실행한다면 아래와 같이 변경 된다.


rear [4]-[3]-[2]-[null] front


만약 재배치를 해주지 않는다면 Dequeue를 충분히 많이 실행 했을 시

Enqueue를 하면 Overflow가 나타나게 된다.


rear [4]-[null]-[null]-[null] front


위와 같은 Queue가 구성되면 rear쪽이 비어있지 않다고 판단하여 Overflow를 내뱉는다.

실제로는 3 size나 비어있는데도.


따라서 재배치가 필요하다.


위와 같은 queue를 선형 큐라고 하고, 이 단점을 보완한 것이 원형 큐, 환영 큐 라는 것이다.


남는 메모리 공간을 없애기 위해서 rear과 front를 가르키는 변수를 추가해서 활용도를 높이는 방식인데, 

단점이라면 10 size를 가진 원형 Queue는 실제로 11 size을 지녀야되서 1 size가 낭비된다. ( full 과 empty를 구분하기 위한 공간 )


1size는 mod연산을 하면서 남는 공간이라고 생각하면 된다.


큐가 꽉 차있는 것을 판별하려면 

(rear+1) % Queue_Size == front 이용하면 된다.


원형 큐에 대한 내용은 따로 포스팅 해야겠다.


여기 가면 설명이 잘 되있으므로 참고해도 좋을 듯 하다.






사진 출처 : 나무위키(큐)








'Algorithm' 카테고리의 다른 글

자료구조. 순회(전위 중위 후위)  (0) 2018.03.19
자료구조 트리. Tree  (0) 2018.02.21
자료구조. Linked List  (0) 2018.02.18
Horner's role  (0) 2017.03.15
다익스트라 알고리즘  (0) 2016.11.14

정리를 하기 위해 포스팅을 한다.



Linked List에서는 크게 3가지 유형이 존재한다.


1.  Single

2. Double

3. Circle




첫 번째로 Single Linked List


n번 째 블럭이 n+1번 째 블럭을 찾을 수 있는 Link를 가지고 있는 Node의 집합체이다.

Single인 이유는 n+1번 째 블럭은 n 번 째 블럭을 찾을 수 있는 Link가 없기 때문이다.

네트워크로 따지면 단방향이라고 볼 수 있다.



두 번째로 Double Linked List


Signle과 다른 점은 n 번 째 블럭은 이웃한 블럭을 찾을 수 있는 Link를 지니고 있다.

네트워크로 따지면 양방향이다.



세 번째로 Circle Linked List


앞에서 본 Single, Double은 모두 Head와 Tail이 존재한다.(시작과 끝)

하지만 Circle Linked List는 Head와 Tail이 연결 되어있는 순환구조이다.






사진 출처 : https://ko.wikipedia.org/wiki/연결_리스트







'Algorithm' 카테고리의 다른 글

자료구조. 순회(전위 중위 후위)  (0) 2018.03.19
자료구조 트리. Tree  (0) 2018.02.21
자료구조. 스택(stack)과 큐(queue)  (0) 2018.02.20
Horner's role  (0) 2017.03.15
다익스트라 알고리즘  (0) 2016.11.14

젠킨스(Jenkins) ? 


이번에 동아리 선배랑 같이 프로젝트를 하면서 젠킨스라는 것을 사용하기로 했다.


젠킨스는 자동적으로 배포를 도와주는 툴이라고 설명이 되어있다. ( 젠킨스에 대한 설명이 적힌 링크 )

젠킨스는 Docker와 연관이 많은데 Docker에 대해서는 따로 정리를 할 예정이다. ( docker 모르면 해당 링크 참조 )






설치 OS는  ubuntu 64bit로 아마존 AWS를 사용하였다.


jenkins를 설치하려면 우선 docker가 설치되어야 한다.

따라서 docker를 먼저 설치하면 된다.


1
curl -fsSL https://get.docker.com/ | sudo sh
cs


root 권한을 요청 할 수도, 요청하지 않을 수도 있다.


다음으로는 root가 아닌 다른 user에게 docker를 실행 할 수 있는 권한을 넘겨줘야 한다.


1
sudo usermod -aG docker $USER 
cs

짜잔! 이러면 docker를 설치 및 권한까지 부여해주었다!


이제 Jenkins를 설치할 차례이다.

1
docker pull jenkins

cs


아래와 같이 입력했을 때 오류가 난다면 위에서 user에게 권한을 준 뒤 재 로그인을 하지 않았기 때문이다.

다시 로그인을 해주면 설치가 될 것이다.


Jenkins를 무사히 설치 했다면 이제 실행을 해볼 차례!


1
$ docker run -d -p 8080:8080 -v /jenkins:/var/jenkins_home --name jenkins -u root jenkins
cs

위와 같은 명령어를 치면 실행이 된다. ( 각 옵션은 아직 공부를 안해서. 더 공부한 뒤 옵션에 대한 세부 내용을 작성해야겠다. )


- 작성중




'Web' 카테고리의 다른 글

React와 Express 연동하기(1)  (0) 2020.09.11
IntelliJ에서의 Servlet 프로젝트 설정 방법  (0) 2019.09.19
Servlet 기초(2)  (0) 2016.11.11
Servlet 기초(1)  (0) 2016.11.11

+ Recent posts