반응형
Java에서의 Queue, Stack
1. Queue
// queue 선언 방법 1
Queue queueLinkedList = new LinkedList();
queueLinkedList.add(1);
queueLinkedList.add(2);
queueLinkedList.add(5);
queueLinkedList.add(4);
queueLinkedList.add(3);
// FIFO 유지 : queueLinkedList -> 1,2,5,4,3
//-------------------------------------------------
// queue 선언 방법 2
Queue priorityQueue = new PriorityQueue();
priorityQueue.add(1);
priorityQueue.add(2);
priorityQueue.add(5);
priorityQueue.add(4);
priorityQueue.add(3);
// 자동 정렬 : priorityQueue -> 1,2,3,4,5
java에서는 LinkedList를 사용하여 Queue를 선언해야만 FIFO성격을 유지 할 수 있습니다.
PriorityQueue의 경우 추가되는 인자에 대하여 ASC 정렬을 기본적으로 제공하여 FIFO성격을 유지 할 수 없습니다.
Exception 리턴 | null 혹은 false 리턴 | |
주입 | add(e) | offer(e) |
추출 | remove() | poll() |
확인 | element() | peek() |
add, remove, element를 사용시에 오류 케이스에 Exception을 던지게 됩니다.
로직상 null, false 등이 return 되어 로직상 성격에 맞는 메서드를 기용해야 합니다.
2. Stack
// Stack 선언
Stack stack = new Stack();
stack.push(1);
stack.push(2);
stack.push(3);
Stack의 자료구조상 LIFO 성격을 띄고 있습니다. 마지막에 들어간 인자가 최상단에 위치합니다.
메서드 | 설명 |
empty() | 비어 있는지를 true/false로 전달합니다. |
peek() | 최 상단의 값을 보여줍니다. |
pop() | 최 상단의 값을 추출해 줍니다. |
push(e) | 최 상단 값으로 인자를 추가합니다. |
search(e) | e의 값이 stack에 포함하고 있는지 true/false로 전달합니다. |
Python에서의 Queue, Stack
1. Queue
# 1. List를 queue 형태로 사용하기
queue = [1,2,3,4,5]
queue.insert(0, 0) # 0 번째 인자에 0 추가
queue.pop() # List의 맨 마지막 인자 추출
print(queue) # 0 1 2 3 4
# ------------------------------------
# 2. deque를 사용하기
# 목적은 head에 있는 값 추출시에 속도가 배열의 길이만큼 늘어나서입니다.
from collections import deque # deque import 하기
queue = deque([1,2,3,4,5])
queue.append(6) # 마지막 인자에 6 추가
queue.append(7) # 마지막 인자에 7 추가
queue.popleft() # 첫번째 인자 추출 : 1
queue.pop() # 마지막 인자 추출 : 7
print(queue) # 2 3 4 5 6
queue의 FIFO 성격의 자료구조를 사용시에는 List를 사용해도 되지만 deque 자료 구조 또한 제공합니다.
2. Stack
# 1. List를 Stack 형태로 사용하기
queue = [1]
# 맨 마지막 인자로 추가
queue.append(2)
queue.append(3)
queue.append(4)
queue.append(5)
print(queue) # 1 2 3 4 5
# 맨 마지막 인자 추출
queue.pop()
print(queue) # 1 2 3 4
LIFO 성격을 유지하는 자료구조 형태를 제공 합니다.
Python에서는 java와 다르게 queue나 stack를 새로 선언하지 않더라도 List 자료 구조에서 제공하는 함수들로 커버가 처리가 가능합니다.
메서드 | 설명 | Exception 유무 |
append(e) | List 마지막에 e를 추가합니다. | x |
extend(list) | List에 또다른 iterator를 추가합니다. | x |
insert(i, e) | i 인덱스에 e를 추가합니다. | x |
remove(e) | 첫번째 찾은 e를 제거합니다. | o |
pop([e]) | [e]의 값이 없을경우 (pop()) 마지막 인자를 추출합니다. 대괄호는 e가 필수가 아닙니다. |
o |
clear() | List를 비웁니다. | x |
index(e[, start[, end]]) | e는 찾는 값의 인덱스를 반환합니다. start, end는 default 값으로 (0, 배열끝)를 제공합니다. |
o |
count(e) | e의 갯수를 출력합니다. | x |
sort(key=None,reverse=False) | key, reverse가 없는 경우 asc기준으로 정렬됩니다. | x |
reverse() | List를 뒤집습니다 | x |
copy() | List를 복사합니다. | x |
반응형
'etc.' 카테고리의 다른 글
[Java/Python] 문법 비교 정리 #7 자료구조 - HashMap(Dictionary) (0) | 2022.11.09 |
---|---|
[Java/Python] 문법 비교 정리 #6 자료구조 - Set (1) | 2022.11.08 |
[Java/Python] 문법 비교 정리 #4 자료구조 - List (2) | 2022.11.04 |
[Java/Python] 문법 비교 정리 #3 함수 선언 (0) | 2022.11.02 |
[Java/Python] 문법 비교 정리 #2 배열 (0) | 2022.10.28 |