Stack Queue

1. 스택

Last In First Out으로 최근에 추가한 항목이 가장 먼저 제거되는 데이터 방식


1) 함수

  • pop() : 스택에서 가장 위에 있는 항목을 제거
  • push() : item하나를 스택의 가장 윗 부분에 추가
  • peek() : 스택의 가장 위에있는 항목을 제거없이 값만 반환
  • isEmpty() : 스택이 비었는지 검사

2) 사용 예

  • 재귀 알고리즘
  • 웹 방문기록
  • 실행 취소

연결 list를 이용한 코드 예(C 언어)



2. 큐

First In First Out으로 가장 먼저 추가한 데이터가 먼저 제거되는 데이터 방식


1) 함수

  • add(inQueue)() : 큐의 끝 부분에 데이터 추가
  • remove(deQueue)() :큐의 첫번째 항목을 제거
  • peek() : 큐의 가장 위에있는 항목을 제거없이 값만 반환
  • isEmpty() : 큐가 비었는지 검사

2) 사용 예

  • 프로세스 관리
  • 너비 우선 탐색(BFS)
  • 캐시 구현
  • 우선순위 큐

연결 list를 이용한 코드 예(C 언어)



3. 우선순위 큐 ( Priority Queue )

우선순위의 개념을 큐에 도입한 자료 구조.

일반적인 큐는 FIFO의 규칙으로 먼저 들어온것이 나가게 되나 우선순위 큐는 우선순위가 높은 순서대로 나가게 된다.


1) 구현 방법

  • 배열
  • 리스트
  • 힙(Heap)
표현 방법삽 입삭 제
순서 없는 배열 / 리스트O(1)O(n)
정렬된 배열 / 리스트O(n)O(1)
O(logn)O(logn)



4. 덱 ( Deque )

Double-ended queue의 약자로 양 끝에서만 자료를 넣고 뺄 수 있는 자료구조이다.

일반 큐와의 차이점은 push,pop 할 수 있는 방향이 양방향이라는 것이 차이점이다.

Related Posts

Slice

Slice

컴파일타임에 데이터 크기가 고정되어 런타임에 변경이 되지 않는 일반 배열과 달리 변경이 가능한 동적 배열 타입을 slice라고 한다. 정확하게 얘기하면 go에서 제공하는 배열을 가리키는 포인터 타입이다. 1. 선언 방법 var a []int //길이가 0인 slice fmt.Println(len(a)) //0 b := []int{1,2,3} //길이가 3인 slice fmt.Println(len(b)) //3 var c = []int{1, 5:2, 9:3} //길이가 10인 slice fmt.Println(c) //[1 0 0 0 0 2 0 0 0 3] 배열선언방...

Read More
Intellij 시작시 바로 꺼지는 Error

Intellij 시작시 바로 꺼지는 Error

  • Error
  • 2021년 4월 15일

윈도우로 작업을 위해 IDE를 실행시켜보면 아래와 같은 에러가 발생하며 IntelliJ뿐만 아니라 Jetbrain사의 모든 IDE들이 실행이 안되는데 매번 어떻게 해결했더라 기억을 되짚고 그때마다 여러 글을 뒤져보는게 힘들어 기록을 위해 작성한다. Internal error. Please refer to https://jb.gg/ide/critical-startup-errors java.util.concurrent.CompletionException: java.net.BindException: Address already in use: bind at java.base/java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:314) at java.base/java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:319) at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1702) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:668) at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:665) at java.base/java.security.AccessController.doPrivileged(Native Method) at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1.run(Executors.java:665) at java.base/java.lang.Thread.run(Thread.java:834) Caused by: java.net.BindException: Address already in...

Read More
함수

함수

1. 함수 생성 방법 package main func main(){ a := 1 say(a) } func say(a int) { println(a) } func키워드를 이용해서 함수를 선언할 수 있고 가장 기본적으로 만드는 main도 함수 이다. 2. 매개변수(인자) 1) 전달 방식 Java처럼 primitive자료형은 pass by value, reference자료형은 pass by refernece가 아닌 go는 C처럼 *을 이용해서 value인지 refer...

Read More