์•Œ๊ณ ๋ฆฌ์ฆ˜

[Data Structure] ๋ฐฐ์—ด(array) / ํ(queue) / ์Šคํƒ(stack)

jjingle 2024. 1. 26. 14:00

1. ๋ฐฐ์—ด (Array)

  • ๊ฐ™์€ ์ข…๋ฅ˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ
  • ๊ฐ™์€ ์ข…๋ฅ˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ €์žฅ
  • ์žฅ์  : ๋น ๋ฅธ ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • ๋‹จ์  : ๋ฐ์ดํ„ฐ์˜ ์ถ”๊ฐ€/ ์‚ญ์ œ์˜ ์–ด๋ ค์›€ <= ๋ฏธ๋ฆฌ ์ตœ๋Œ€ ๊ธธ์ด๋ฅผ ์ง€์ •ํ•ด์•ผํ•จ
# 1์ฐจ์› ๋ฐฐ์—ด
data_list = [1, 2, 3, 4, 5]

# 2์ฐจ์› ๋ฐฐ์—ด
data_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

02. ํ (Queue)

  • ์ค„์„ ์„œ๋Š” ํ–‰์œ„์™€ ์œ ์‚ฌ
  • ๊ฐ€์žฅ ๋จผ์ € ๋„ฃ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์žฅ ๋จผ์ € ๊บผ๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ => FIFO(First-In, First-Out)
  • ํ™œ์šฉ : ๋ฉ€ํ‹ฐ ํƒœ์Šคํ‚น์„ ์œ„ํ•œ ํ”„๋กœ์„ธ์Šค ์Šค์ผ€์ฅด๋ง ๋ฐฉ์‹ ๊ตฌํ˜„์— ์‚ฌ์šฉ
  • Enqueue : ํ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๋Š” ๊ธฐ๋Šฅ /  Dequeue : ํ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด๋Š” ๊ธฐ๋Šฅ

  • Queue() : ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ํ /  FIFO
import queue

data = queue.Queue()
data = put("apple")
data = put(3)

data.qsize() #2
data.get()   #์ธ๋ฑ์Šค๋ฅผ ์ž…๋ ฅํ•˜์ง€ ์•Š์Œ(FIFO) => 'apple'
data.qsize() #3
data.get()   #1
  • LifoQueue() : LIFO(Last-In, First-Out) /  ์Šคํƒ ๊ตฌ์กฐ
import queue

data = queue.LifoQueue()
data = put("apple")
data = put(3)

data.qsize() #2
data.get()   #3
  • PriorityQueue() : ์šฐ์„ ์ˆœ์œ„๋Œ€๋กœ ์ถœ๋ ฅ
import queue

data = queue.PriorityQueue()
data = put((10, "apple"))
data = put((5, 1))
data = put((15, "banana"))

data.qsize() #3
data.get()   #(5,1)
data.get()   #(10, 'apple')

 

03. ์Šคํƒ (Stack)

  • ๋ฐ์ดํ„ฐ๋ฅผ ์ œํ•œ์ ์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ => ํ•œ ์ชฝ ๋์—์„œ๋งŒ ์ž๋ฃŒ๋ฅผ ๋„ฃ๊ฑฐ๋‚˜ ๋บ„ ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ
  • ๊ฐ€์žฅ ๋‚˜์ค‘์— ๋„ฃ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์žฅ ๋จผ์ € ๋บ„ ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ => LIFO(Last-In, First-Out)
  • ํ™œ์šฉ : ์ปดํ“จํ„ฐ ๋‚ด๋ถ€ ํ”„๋กœ์„ธ์Šค ๊ตฌ์กฐ์˜ ํ•จ์ˆ˜ ๋™์ž‘ ๋ฐฉ์‹
  • push() / pop()
  • ์žฅ์ 
    • ๊ตฌ์กฐ๊ฐ€ ๋‹จ์ˆœํ•ด์„œ ๊ตฌํ˜„์ด ์‰ฝ๋‹ค
    • ๋ฐ์ดํ„ฐ ์ €์žฅ/ ์ฝ๊ธฐ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค
  • ๋‹จ์ 
    • ๋ฐ์ดํ„ฐ ์ตœ๋Œ€ ๊ฐฏ์ˆ˜๋ฅผ ๋ฏธ๋ฆฌ ์ •ํ•ด์•ผํ•œ๋‹ค(ํŒŒ์ด์ฌ์˜ ๊ฒฝ์šฐ ์žฌ๊ท€ํ•จ์ˆ˜๋Š” 1000๋ฒˆ๊นŒ์ง€๋งŒ ํ˜ธ์ถœ ๊ฐ€๋Šฅ)
    • ์ €์žฅ ๊ณต๊ฐ„์˜ ๋‚ญ๋น„๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค(๋ฏธ๋ฆฌ ์ตœ๋Œ€ ๊ฐฏ์ˆ˜๋งŒํผ ์ €์žฅ๊ณต๊ฐ„ ํ™•๋ณด ํ•„์š”)
    • => ์Šคํƒ์€ ๋‹จ์ˆœํ•˜๊ณ  ๋น ๋ฅธ ์„ฑ๋Šฅ์„ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋ฏ€๋กœ, ๋ณดํ†ต ๋ฐฐ์—ด ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•จ
stack_list = list()

def push(data):
	stack_list.append(data)
    
def pop():
	data = stack_list[-1]
    del stack_list[-1]
    return data
    
for index in range(10):
	push(index)
    
"""
range(start,stop,step)

range(5) : 0,1,2,3,4
range(1,6) : 1,2,3,4,5
range(0,6,2) : 0,2,4,6  
"""
    
pop() #9