21.03.04

μ΄μ†Œμž„Β·2021λ…„ 3μ›” 4일
0

TIL

λͺ©λ‘ 보기
12/12

πŸ’‘

Stack

속성
topstack μ΅œμƒμœ„μ— μžˆλŠ” λ°μ΄ν„°μ˜ μœ„μΉ˜(index) κ°’. μƒˆλ‘œ μ‚½μž…λ˜λŠ” μžλ£ŒλŠ” top이 κ°€λ¦¬ν‚€λŠ” 자료의 μœ„μ— μŒ“μΈλ‹€.

λ©”μ†Œλ“œ
sizeμŠ€νƒμ— μΆ”κ°€λœ λ°μ΄ν„°μ˜ 크기(길이)λ₯Ό λ¦¬ν„΄ν•œλ‹€.
pushμŠ€νƒμ— 데이터λ₯Ό μΆ”κ°€ν•œλ‹€.
popκ°€μž₯ λ‚˜μ€‘μ— μΆ”κ°€λœ 데이터λ₯Ό μŠ€νƒμ—μ„œ μ‚­μ œν•˜κ³  μ‚­μ œν•œ 데이터λ₯Ό λ¦¬ν„΄ν•œλ‹€.
peekκ°€μž₯ λ‚˜μ€‘μ— μΆ”κ°€λœ 데이터λ₯Ό ν™•μΈν•œλ‹€.
  • μŒ“λ‹€, ν¬κ°œλ‹€. μ ‘μ‹œλ₯Ό μŒ“μ•„ 놓은 ν˜•νƒœμ™€ λΉ„μŠ·ν•œ 자료ꡬ쑰.

  • κ°€μž₯ λ§ˆμ§€λ§‰μ— 넣은 데이터가 κ°€μž₯ λ¨Όμ € λ‚˜μ˜¨λ‹€. LIFO(Last In First OUt)
    λ¨Όμ € λ“€μ–΄κ°„ 자료일수둝 λ‚˜μ€‘μ— λ‚˜μ˜¨λ‹€. FILO(First In Last Out)
    즉, μ‚½μž…κ³Ό μ‚­μ œκ°€ ν•œμͺ½ λμ—μ„œλ§Œ μΌμ–΄λ‚œλ‹€. (λ°”λ‹₯이 λ§‰νžŒ κΈ΄ κ΄€)

  • μ‹€μ‚¬μš© 예제: λΈŒλΌμš°μ €μ˜ λ’€λ‘œ κ°€κΈ°, μ•žμœΌλ‘œ κ°€κΈ° / 주둜 ctrl + Z둜 μ‚¬μš©ν•˜λŠ” Undo κΈ°λŠ₯
    1) μƒˆλ‘œμš΄ νŽ˜μ΄μ§€λ‘œ 접속할 λ•Œ ν˜„μž¬ νŽ˜μ΄μ§€λ₯Ό Prev Stack에 λ³΄κ΄€ν•œλ‹€.
    2) λ’€λ‘œ κ°€κΈ° λ²„νŠΌμ„ λˆŒλ €μ„ λ•Œ ν˜„μž¬ νŽ˜μ΄μ§€λ₯Ό Next Stack에 λ³΄κ΄€ν•˜κ³  Prev Stackμ—μ„œ λ§ˆμ§€λ§‰μ— λ³΄κ΄€λœ νŽ˜μ΄μ§€λ₯Ό κ°€μ Έμ˜¨λ‹€.
    3) μ•žμœΌλ‘œ κ°€κΈ° λ²„νŠΌμ„ λˆŒλ €μ„ λ•Œ ν˜„μž¬ νŽ˜μ΄μ§€λ₯Ό Prev Stack에 λ³΄κ΄€ν•˜κ³  Next Stackμ—μ„œ λ§ˆμ§€λ§‰μ— λ³΄κ΄€λœ νŽ˜μ΄μ§€λ₯Ό κ°€μ Έμ˜¨λ‹€.

  • Array의 push()둜 데이터λ₯Ό λ„£κ³ , pop()으둜 데이터λ₯Ό κΊΌλ‚΄λŠ” ν˜•μ‹μœΌλ‘œ Stackκ³Ό μœ μ‚¬ν•˜κ²Œ λ™μž‘ν•˜λ„λ‘ λ§Œλ“€ 수 μžˆλ‹€.

  • λ°°μ—΄λ‘œ κ΅¬ν˜„ν–ˆμ„ λ•Œμ˜ 단점

    • μŠ€νƒμ˜ 크기가 μ •ν•΄μ Έ μŠ€νƒμ˜ μš©λŸ‰μ„ μ΄ˆκ³Όν•˜λŠ” 연산은 λΆˆκ°€λŠ₯해진닀.

Queue

속성
frontQueue의 κ°€μž₯ μ•žμ— μžˆλŠ” λ°μ΄ν„°μ˜ μœ„μΉ˜(index) κ°’.
rearQueue의 κ°€μž₯ 뒀에 μžˆλŠ” λ°μ΄ν„°μ˜ μœ„μΉ˜(index) κ°’. μƒˆλ‘œ μ‚½μž…λ˜λŠ” μžλ£ŒλŠ” rearκ°€ κ°€λ¦¬ν‚€λŠ” 자료의 뒀에 μŒ“μΈλ‹€.

λ©”μ†Œλ“œ
size큐에 μΆ”κ°€λœ λ°μ΄ν„°μ˜ 크기(길이)λ₯Ό λ¦¬ν„΄ν•œλ‹€.
enqueue큐에 데이터λ₯Ό μΆ”κ°€ν•œλ‹€.
dequeueκ°€μž₯ λ¨Όμ € μΆ”κ°€λœ 데이터λ₯Ό μŠ€νƒμ—μ„œ μ‚­μ œν•˜κ³  μ‚­μ œν•œ 데이터λ₯Ό λ¦¬ν„΄ν•œλ‹€.
  • 쀄을 μ„œμ„œ 기닀리닀, λŒ€κΈ° ν–‰λ ¬. 티켓을 사렀고 쀄을 μ„œμ„œ κΈ°λ‹€λ¦¬λŠ” λͺ¨μŠ΅κ³Ό ν‘μ‚¬ν•œ 자료ꡬ쑰.

  • λ¨Όμ € λ“€μ–΄κ°„ μžλ£Œκ°€ λ¨Όμ € λ‚˜μ˜¨λ‹€. FIFO(First In First Out)
    λ‚˜μ€‘μ— λ“€μ–΄κ°„ μžλ£Œκ°€ λ‚˜μ€‘μ— λ‚˜μ˜¨λ‹€. LILO(Last In Last Out)

  • μ‹€μ‚¬μš© 예제: ν”„λ¦°ν„°μ—μ„œ λ¬Έμ„œλ₯Ό 인쇄 / μ½œμ„Όν„° 고객 λŒ€κΈ° μ‹œκ°„ λ“± 데이터가 μž…λ ₯된 μ‹œκ°„ μˆœμ„œλŒ€λ‘œ μ²˜λ¦¬λ˜μ–΄μ•Ό ν•  λ•Œ.
    컴퓨터 μž₯μΉ˜λ“€ μ‚¬μ΄μ—μ„œ 자료(data)λ₯Ό 주고받을 λ•Œ 각 μž₯μΉ˜λ“€ 사이에 μ‘΄μž¬ν•˜λŠ” 속도, μ‹œκ°„ 차이λ₯Ό κ·Ήλ³΅ν•˜κΈ° μœ„ν•œ μž„μ‹œ κΈ°μ–΅ μž₯치둜 Queueλ₯Ό μ‚¬μš©ν•œλ‹€. 이걸 톡틀어 버퍼(buffer)라고 ν•œλ‹€. 보톡 ν”„λ¦°ν„°λŠ” 속도가 느리고, μƒλŒ€μ μœΌλ‘œ CPUλŠ” 속도가 λΉ λ₯΄λ‹€.
    1) CPUκ°€ λΉ λ₯Έ μ†λ„λ‘œ 인쇄 자료λ₯Ό λ§Œλ“ λ‹€.
    2) 인쇄 μž‘μ—… Queue에 μ €μž₯ν•˜κ³  λ‹€λ₯Έ μž‘μ—…μ„ μˆ˜ν–‰ν•œλ‹€.
    3) ν”„λ¦°ν„°κ°€ 인쇄 μž‘μ—… Queueμ—μ„œ 자료λ₯Ό κ°€μ Έκ°€μ„œ μΌμ •ν•œ μ†λ„λ‘œ μΈμ‡„ν•œλ‹€.

  • Array의 push()둜 데이터λ₯Ό λ„£κ³ , shift()둜 데이터λ₯Ό κΊΌλ‚΄λŠ” ν˜•μ‹μœΌλ‘œ Queue와 μœ μ‚¬ν•˜κ²Œ λ™μž‘ν•˜λ„λ‘ λ§Œλ“€ 수 μžˆλ‹€.

  • λ°°μ—΄λ‘œ κ΅¬ν˜„ν–ˆμ„ λ•Œμ˜ 단점

    • 큐의 크기가 μ •ν•΄μ Έ 큐의 μš©λŸ‰μ„ μ΄ˆκ³Όν•˜λŠ” 연산은 λΆˆκ°€λŠ₯해진닀.
    • μ‚½μž… μ‚­μ œ 연산이 반볡적으둜 μΌμ–΄λ‚˜λ©΄ front와 rear의 μœ„μΉ˜κ°€ λ’€λ‘œ 점점 λ°€λ €λ‚˜λ©΄μ„œ μ•žμ—λŠ” 데이터가 λ“€μ–΄μ˜¬ 수 μžˆλŠ” 곡간이 μžˆμ§€λ§Œ rearκ°€ λ°°μ—΄ 인덱슀의 λ§ˆμ§€λ§‰μ„ 가리킀고 μžˆλ‹€λ©΄ 데이터λ₯Ό μ‚½μž…ν•  수 μ—†λŠ” λ¬Έμ œκ°€ 생긴닀.
    • μœ„ λ¬Έμ œμ μ€ μ„ ν˜•μ΄ μ•„λ‹Œ μ›ν˜•/ν™˜ν˜• 큐둜 κ΅¬ν˜„ν•  μ‹œμ—λŠ” ν•΄κ²°ν•  수 μžˆλ‹€.


γ€€

πŸ“

유λͺ…ν•œ Stack Overflow의 κ·Έ Stack을 λ°°μ› λ‹€! 이둠만 μ½μ—ˆμ„ λ•ŒλŠ” μ–΄? κ½€ μ‰¬μš΄λ°? ν–ˆλŠ”λ° μ‹€μ œλ‘œ μ•Œκ³ λ¦¬μ¦˜μ— μ μš©ν•΄ λ³΄λ‹ˆ 음...γ…Žγ…Ž 만만치 μ•Šλ‹€.

0개의 λŒ“κΈ€