🧐 알고리즘

[자료구조] 스택 , 큐 , 덱

콩드로이드 2022. 7. 17. 16:40

각 자료구조들의 이론과 사용되는 함수에 대해 다뤄보고자 합니다 

 

📌  스택

쉽게 말해 쌓이는 자료 구조로 , LIFO(Last In First Out)을 따릅니다

즉 가장 마지막에 넣는 아이템이 가장 먼저 빼지는 형태입니다

 

🛠 스택의 함수 

• push(아이템) : 아이템을 스택에 삽입

var stack = Stack<String>()
stack.push("A")
stack.push("B")
stack.push("C")

 

pop(): 스택 가장 위에 있는 아이템을 제거

stack.pop()
stack.pop()

 

peek(): 스택의 가장 위에 있는 아이템을 반환

stack.peek() 
//return "A"

 

size: 스택의 사이즈를 반환

add(idx, item) : idx에 item 삽입

stack.add(0, "B")

• search : if(스택에 찾을 원소 존재) TOP에서 부터 원소가 나갈 순서 반환 else -1 을 반환

stack.search("B") // return 1

 


📌 큐

FIFO(First In First Out), LILO (Last In Last Out) 원칙을 따르는 구조입니다

아이템을 삽입하는 연산을 queue라고 하고, 아이템을 삭제하는 연산을 dequeue라고 합니다

Queue는 인터페이스므로, 이를 구현하는 ✅ LinkedList 형태로 선언합니다

 

🛠 큐의 함수 

 

• offer(아이템),  add(아이템) : 아이템을 큐에 삽입

val queue = LinkedList<String>()
queue.offer("A")
queue.offer("B")
queue.offer("C")
println(queue.joinToString { it })

• poll(), remove() : 가장 먼저 삽입된 값을 삭제하고, 반환합니다 

   poll : 값이 없다면 null 반환 / remove : 값이 없다면 exception

• peek(),element() : 가장 먼저 삽입된 값을 반환합니다 

   peek : 값이 없다면 null 반환 / element : 값이 없다면 exception

 


📌 덱/디큐(Double Ended Queue)

양쪽에서 모두 삽입, 삭제가 가능한 자료구조 형태

Stack처럼 혹은 Queue처럼 사용할 수 있으며 두 개의 형태를 모두 띄는 자료구조입니다 

ArrayDeque형태 / LinkedList 로 사용합니다

 

🛠 덱의 함수

• add(아이템) : 값을 삽입합니다

• addFirst(아이템) : 첫번째에 값을 삽입합니다

• addLast(아이템) : 마지막에 값을 삽입합니다

• first() : 첫번째 값을 반환합니다

• last() : 마지막 값을 반환합니다

• removeFirst() : 첫번째 값을 삭제합니다

• removeLast() : 마지막 값을 삭제합니다

 

 


오늘은 3가지 자료구조에 대해 알아보았습니다 

더 많은 함수들이 있겠지만, 생성과 삭제에만 초점을 맞췄습니다 :) 

궁금하신 점이나 의견이 있으시면 댓글 부탁드립니다 감사합니다 😊