๊ด€๋ฆฌ ๋ฉ”๋‰ด

๋‚˜์˜ ๋ชจ์–‘

023 | Data Structure - Stack & Queue ๋ณธ๋ฌธ

SEB/TIL

023 | Data Structure - Stack & Queue

kexon 2022. 7. 25. 23:16

๐Ÿ’™ Data Structure

๐Ÿค ์ž๋ฃŒ๊ตฌ์กฐ

๋ฐ์ดํ„ฐ๋ž€?

  • ๋ฐ์ดํ„ฐ: ๋ฌธ์ž, ์ˆซ์ž, ์†Œ๋ฆฌ, ๊ทธ๋ฆผ, ์˜์ƒ ๋“ฑ ์‹ค์ƒํ™œ์„ ๊ตฌ์„ฑํ•˜๊ณ  ์žˆ๋Š” ๋ชจ๋“  ๊ฐ’
  • ๋ฐ์ดํ„ฐ๊ฐ€ ์˜๋ฏธ์žˆ์–ด์ง€๋ ค๋ฉด: ๋ถ„์„ → ์ •๋ฆฌ → ํ™œ์šฉ
  • ๋ฐ์ดํ„ฐ์˜ ์‚ฌ์šฉ: ํ•„์š” ๋ชฉ์ ์— ๋”ฐ๋ผ ํ˜•ํƒœ ๊ตฌ๋ถ„ → ๋ถ„๋ฅ˜

์ž๋ฃŒ๊ตฌ์กฐ๋ž€?

  • ์ž๋ฃŒ์˜ ํšจ์œจ์ ์ธ ์ €์žฅ๊ณผ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ์ž๋ฃŒ์˜ ๋ชฉ์ ์— ๋”ฐ๋ผ ๋ถ„๋ฅ˜ํ•˜์—ฌ ๊ตฌ์กฐํ™”ํ•œ ๊ฒƒ
  • ์ž๋ฃŒ๊ตฌ์กฐ์˜ ์ข…๋ฅ˜์™€ ๊ตฌ๋ถ„

๐Ÿ’™ Stack

๐Ÿค Stack ์ •์˜ & ๊ตฌ์กฐ

  • Stack: ์Œ“๋‹ค, ์Œ“์ด๋‹ค
  • ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์Œ“๋Š” ์ž๋ฃŒ๊ตฌ์กฐ
  • stack์— ๋ฐ์ดํ„ฐ
    • ๋„ฃ๊ธฐ: push()
    • ๊บผ๋‚ด๊ธฐ: pop()

๐Ÿค Stack ํŠน์ง•

LIFO(Last-In First-Out) - ํ›„์ž…์„ ์ถœ๊ตฌ์กฐ

  • ๋จผ์ € ๋“ค์–ด๊ฐ„ ๋ฐ์ดํ„ฐ๋Š” ์ œ์ผ ๋‚˜์ค‘์— ๋‚˜์˜ด
    • ๊ฐ€์žฅ ๋จผ์ € ๋“ค์–ด๊ฐ„ ํ”„๋ง๊ธ€์Šค๋Š” ์œ„์—๊บผ๊ฐ€ ๋‹ค ๋จนํžˆ๊ธฐ ์ „๊นŒ์ง€ ๋‚˜์˜ฌ ์ˆ˜ ์—†์Œ
public class Stack {
    // Integerํ˜• Stack ์„ ์–ธ
    Stack<Integer> stack = new Stack();

    // ์ฐจ๋ก€๋Œ€๋กœ ์Šคํƒ์— ๋„ฃ๊ธฐ 
    stack.push(1);
    stack.push(2);
    stack.push(3);
    stack.push(4);
    /* 1๋ฒˆ์ด ์ œ์ผ ๋จผ์ € ๋“ค์–ด๊ฐ€๊ณ  4๋ฒˆ์ด ๋งˆ์ง€๋ง‰์œผ๋กœ ๋“ค์–ด๊ฐ
    --------------------
    1 <- 2 <- 3 <- 4
    --------------------
    */

    // ์Šคํƒ์ด ๋นŒ ๋•Œ๊นŒ์ง€ ๋ฐ์ดํ„ฐ ๊บผ๋‚ด๊ธฐ
    stack.pop();
    stack.pop();
    stack.pop();
    stack.pop();
    /* ์ œ์ผ ๋งˆ์ง€๋ง‰์— ์žˆ๋Š” 4๋ถ€ํ„ฐ 3, 2, 1 ์ฐจ๋ก€๋กœ ๋‚˜์˜ด
    --------------------

    --------------------
    */
}

๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์”ฉ ๋„ฃ๊ณ  ๋บ„ ์ˆ˜ ์žˆ์Œ

  • ์•„๋ฌด๋ฆฌ ๋งŽ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์–ด๋„ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์”ฉ๋งŒ ๋„ฃ๊ณ , ๋บ„ ์ˆ˜ ์žˆ์Œ
  • ํ•œ๊บผ๋ฒˆ์— ์—ฌ๋Ÿฌ๊ฐœ ๋„ฃ๊ฑฐ๋‚˜ ๋นผ๊ธฐ ์•ˆ๋จ

ํ•˜๋‚˜์˜ ์ž…์ถœ๋ ฅ ๋ฐฉํ–ฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ

  • ์ž…์ถœ๋ ฅ์˜ ๋ฐฉํ–ฅ์ด ๋‹จ๋ฐฉํ–ฅ ⇒ ์ œํ•œ์  ์ ‘๊ทผ
  • ์ž…์ถœ๋ ฅ์˜ ๋ฐฉํ–ฅ์ด ์—ฌ๋Ÿฌ๊ฐœ์ด๋ฉด stack์ด ์•„๋‹˜

๐Ÿค Stack ์‚ฌ์šฉ ์˜ˆ์ œ

  • ๋ธŒ๋ผ์šฐ์ €์˜ ๋’ค๋กœ๊ฐ€๊ธฐ(←), ์•ž์œผ๋กœ๊ฐ€๊ธฐ(→)
    • ์ƒˆ๋กœ์šด ํŽ˜์ด์ง€ ์ ‘์† ์‹œ, ํ˜„์žฌ ํŽ˜์ด์ง€๋ฅผ ์ด์ „์Šคํƒ์— ๋ณด๊ด€
    • ๋’ค๋กœ๊ฐ€๊ธฐ ๋ฒ„ํŠผ์œผ๋กœ ์ด์ „ํŽ˜์ด์ง€๋กœ ๊ฐˆ ๋•Œ๋Š”
      • ํ˜„์žฌ ํŽ˜์ด์ง€๋ฅผ ๋‹ค์Œ์Šคํƒ์— ๋ณด๊ด€ํ•˜๊ณ 
      • ๊ฐ€์žฅ ๋‚˜์ค‘์— ๋ณด๊ด€๋œ ํŽ˜์ด์ง€๋ฅผ ์ด์ „์Šคํƒ์—์„œ ํ˜„์žฌํŽ˜์ด์ง€๋กœ ๊ฐ€์ ธ์˜ด
    • ์•ž์œผ๋กœ๊ฐ€๊ธฐ ๋ฒ„ํŠผ์œผ๋กœ ๋‹ค์ŒํŽ˜์ด์ง€๋กœ ๊ฐˆ ๋•Œ๋Š”
      • ๋‹ค์Œ์Šคํƒ์˜ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ๋ณด๊ด€๋œ ํŽ˜์ด์ง€๋ฅผ ๊ฐ€์ ธ์˜ด
    • ํ˜„์žฌ ํŽ˜์ด์ง€๋ฅผ ์ด์ „์Šคํƒ์— ๋ณด๊ด€

๐Ÿ’™ Queue

๐Ÿค Queue ์ •์˜ & ๊ตฌ์กฐ

  • Queue: ์ค„์„ ์„œ์„œ ๊ธฐ๋‹ค๋ฆฌ๋‹ค, ๋Œ€๊ธฐํ–‰๋ ฌ
  • ๋จผ์ € ๋“ค์–ด๊ฐ„ ๋ฐ์ดํ„ฐ๊ฐ€ ๋จผ์ € ๋‚˜์˜ค๋Š” ์ž๋ฃŒ๊ตฌ์กฐ
  • Queue์— ๋ฐ์ดํ„ฐ
    • ๋„ฃ๊ธฐ: enqueue
    • ๊บผ๋‚ด๊ธฐ: dequeue

๐Ÿค Queue ํŠน์ง•

FIFO(First-In First-Out) - ์„ ์ž…์„ ์ถœ๊ตฌ์กฐ (= LILO(Last-In Last-Out)

  • ๋จผ์ € ๋“ค์–ด๊ฐ„ ๋ฐ์ดํ„ฐ๊ฐ€ ์ œ์ผ ์ฒ˜์Œ์— ๋‚˜์˜ด

๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์”ฉ ๋„ฃ๊ณ  ๋บ„ ์ˆ˜ ์žˆ์Œ

  • ์•„๋ฌด๋ฆฌ ๋งŽ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์–ด๋„ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์”ฉ๋งŒ ๋„ฃ๊ณ , ๋บ„ ์ˆ˜ ์žˆ์Œ
  • ํ•œ๊บผ๋ฒˆ์— ์—ฌ๋Ÿฌ๊ฐœ ๋„ฃ๊ฑฐ๋‚˜ ๋นผ๊ธฐ ์•ˆ๋จ

ํ•˜๋‚˜์˜ ์ž…์ถœ๋ ฅ ๋ฐฉํ–ฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ

  • ์ž…์ถœ๋ ฅ์˜ ๋ฐฉํ–ฅ์ด ๋‹ค๋ฆ„
  • ์ž…์ถœ๋ ฅ์˜ ๋ฐฉํ–ฅ์ด ๊ฐ™์œผ๋ฉด queue๊ฐ€ ์•„๋‹˜

๐Ÿค Queue ์‚ฌ์šฉ ์˜ˆ์ œ

  • ํ”„๋ฆฐํ„ฐ
    • ๋ฌธ์„œ ์ž‘์„ฑ ํ›„ ์ถœ๋ ฅ์„ ๋ˆ„๋ฅด๋ฉด ํ•ด๋‹น ๋ฌธ์„œ๋Š” ์ธ์‡„ ์ž‘์—… Queue์— ๋“ค์–ด๊ฐ
    • ํ”„๋ฆฐํ„ฐ๋Š” ์ธ์‡„ ์ž‘์—… Queue์— ๋“ค์–ด์˜จ ๋ฌธ์„œ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์ธ์‡„

๐Ÿค ๋ฒ„ํผ(Buffer)

  • ์ปดํ“จํ„ฐ ์žฅ์น˜๋“ค ์‚ฌ์ด์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ๋•Œ ๊ฐ ์žฅ์น˜ ์‚ฌ์ด์— ์กด์žฌํ•˜๋Š” ์†๋„๋‚˜ ์‹œ๊ฐ„ ์ฐจ์ด๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด ์ž„์‹œ๊ธฐ์–ต์žฅ์น˜์˜ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ Queue๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ

 

โœ… Ref.

 

DS01 - ์ž๋ฃŒ๊ตฌ์กฐ์˜ ์ •์˜์™€ ๋ถ„๋ฅ˜

์ž๋ฃŒ๊ตฌ์กฐ๋ž€?    ์ž๋ฃŒ๊ตฌ์กฐ(Data struct)๋ž€ ์ปดํ“จํ„ฐ์—์„œ ์‚ฌ์šฉํ•  ์ž๋ฃŒ๋ฅผ ๋” ํšจ์œจ์ ์œผ๋กœ ์ €์žฅํ•˜๊ณ  ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์ž๋ฃŒ์˜ ํŠน์„ฑ๊ณผ ์‚ฌ์šฉ์šฉ๋„์— ๋”ฐ๋ผ ๋ถ„๋ฅ˜ํ•˜๊ณ  ์ •๋ฆฌํ•˜์—ฌ ๊ตฌ์กฐํ™” ํ•œ ๊ฒƒ์„ ๋œปํ•œ๋‹ค.  ์ž๋ฃŒ๊ตฌ

0verc10ck.tistory.com

'SEB > TIL' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

026 | Time Complexity  (0) 2022.07.28
024 | Data Structure - Tree, Graph  (0) 2022.07.26
019 | Java - I/O, Thread, JVM  (0) 2022.07.19
018 | Java - Enum, Annotation, Lambda, Stream  (0) 2022.07.18
017 | Java - ๐Ÿฅ Practical | Collection Framework  (0) 2022.07.16
Comments