본문 바로가기
etc.

[Java/Python] 문법 비교 정리 #5 자료구조 - Queue, Stack

by Lee David 2022. 11. 7.
반응형

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 성격을 띄고 있습니다. 마지막에 들어간 인자가 최상단에 위치합니다.

 

java #5 [Stack]

Stack 밑이 막힌 병에 블럭을 하나씩 쌓아가는 형태를 가진 자료구조입니다. LILO(Last In Last Out)이라는 성격을 띠고 있습니다. 내용 메서드 비고 주입 push(Object o) 가장 위에 값 주입 추출 pop() 가장

paciencia.tistory.com

메서드 설명
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

 

반응형