๐Ÿ’ฟ Data/๋ถ€ํŠธ์บ ํ”„

[TIL] 96. ์ถ”์ƒ ์ž๋ฃŒํ˜•(Abstract Data Type ; ADT)

Jayden1116 2022. 4. 4. 23:01

ํ‚ค์›Œ๋“œ

  • ADT(์ถ”์ƒ์ž๋ฃŒํ˜•)
  • ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ
  • ์Šคํƒ/ํ

์ถ”์ƒ์ž๋ฃŒํ˜•(ADT)

  • ํŒŒ์ด์ฌ์—๋Š” ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•์ธ ์ˆซ์ž, ๋ฌธ์ž์—ด, ๋ฆฌ์ŠคํŠธ, ๋”•์…”๋„ˆ๋ฆฌ ๋“ฑ์ด ์กด์žฌ
  • ADT๋Š” ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•์ฒ˜๋Ÿผ ๋กœ์ง์ด ๊ตฌ์„ฑ๋˜์–ด์žˆ๋Š” ์ž๋ฃŒ๊ฐ€ ์•„๋‹Œ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋งŒ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ๊ตฌํ˜„ํ•œ ๋กœ์ง
  • ์ถ”์ƒํ™” : ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ๋ฐœ์ „ํ•จ์— ๋”ฐ๋ผ ํ”„๋กœ๊ทธ๋žจ์˜ ํฌ๊ธฐ๋‚˜ ๋ณต์žก๋„๊ฐ€ ์ฆ๊ฐ€ํ•˜์˜€๊ณ  ์ด๋Ÿฐ ๋ถ€๋ถ„์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•ต์‹ฌ๋งŒ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ

์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ(Linked-list)

  • ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋Š” ๊ฐ ๋…ธ๋“œ๊ฐ€ 1. ๋ณธ์ธ์˜ ๊ฐ’, 2. ๋‹ค์Œ ๋…ธ๋“œ์— ๋Œ€ํ•œ ์ •๋ณด ๋ฅผ ๋‹ด๊ณ  ์žˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ๋•Œ๋Š” ํ—ค๋“œ ๋…ธ๋“œ๋ถ€ํ„ฐ ์ˆœ์ฐจ์ ์œผ๋กœ ๊ฑฐ์ณ์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฐ์—ด๋ณด๋‹ค ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ํฌ์ง€๋งŒ
    ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€/์ œ๊ฑฐํ•  ๋•Œ, ๋…ธ๋“œ ์‚ฌ์ด์˜ ๋งํฌ๋งŒ ๋ฐ”๊ฟ”์ฃผ๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋” ๋น ๋ฅด๋‹ค.(์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ์žฅ์ )
  • ๋‹จ๋ฐฉํ–ฅ, ์–‘๋ฐฉํ–ฅ, ํ™˜ํ˜• ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๊ฐ€ ์กด์žฌ

image

  • ๋ฐฐ์—ด๊ณผ ๋‹ฌ๋ฆฌ ์ฐธ์กฐ์˜ ๊ธฐ๋Šฅ์œผ๋กœ ๊ตฌํ˜„๋˜๊ณ  ๊ทธ์— ๋”ฐ๋ผ ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๋ฅผ ๋ณ„๋„๋กœ ์ง€์ •ํ•ด์ค„ ํ•„์š”๊ฐ€ ์—†์Œ

์˜ˆ์‹œ(๋‹จ๋ฐฉํ–ฅ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ)

class Node:
    def __init__(self, value):
        self.value = value
        self.next = None

class linked_list:
    def __init__(self, value):
        self.head = Node(value)


    def add_node(self, value):        
        if self.head == None:
            self.head = Node(value)
        else:
            node = self.head
            while node.next:
                node = node.next
            node.next = Node(value)


    def del_node(self,value):       
        if self.head == None:
            return None
        elif self.head.value == value:
            node = self.head
            self.head = self.head.next
            return node.value
        else:
            node = self.head
            while node.next:
                if node.next.value == value:
                    temp = node.next
                    node.next = node.next.next
                    return temp.value
                else:
                    node = node.next


    def ord_desc(self):        
        node = self.head
        arr = []
        while node:
            arr.append(node.value)
            node = node.next
        return arr


    def search_node(self,value):        
        node = self.head
        while node:
            if node.value == value:
                return node
            else:
                node = node.next

์Šคํƒ(stack)

  • ์ปต ์•ˆ์— ๊ณผ์ž๋ฅผ ๋‹ด๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ
  • ์ฆ‰, LIFO(Last In, First Out) ; ํ›„์ž…์„ ์ถœ๋กœ ๋‚˜์ค‘์— ๋“ค์–ด๊ฐ„ ์ž๋ฃŒ๊ฐ€ ๋จผ์ € ๋‚˜๊ฐ€๊ฒŒ ๋œ๋‹ค.

image

  • ํŒŒ์ด์ฌ์˜ ํ•จ์ˆ˜ ๋˜ํ•œ ์Šคํƒ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ํ˜ธ์ถœ๋œ๋‹ค.(ํ•จ์ˆ˜์˜ ์ฝœ์Šคํƒ)
  • ํŒŒ์ด์ฌ ๋ฆฌ์ŠคํŠธ์˜ ๋‚ด์žฅ ํ•จ์ˆ˜ append ์™€ pop ์ด ์Šคํƒ ๊ตฌ์กฐ๋ฅผ ์ด๋ฃจ๊ณ  ์žˆ๋‹ค.

ํ(queue)

  • ์˜ํ™” ๋งคํ‘œ์†Œ ์ค„์„ ์„  ๊ฒƒ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ
  • ์ฆ‰ FIFO(First In, First Out) ; ์„ ์ž…์„ ์ถœ๋กœ ๋จผ์ € ๋“ค์–ด๊ฐ„ ์ž๋ฃŒ๊ฐ€ ๋จผ์ € ๋‚˜๊ฐ€๊ฒŒ ๋œ๋‹ค.

image

  • ํŒŒ์ด์ฌ ๋ฆฌ์ŠคํŠธ๋กœ ํ‘œํ˜„ํ•˜์ž๋ฉด append์™€ pop(0)์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. pop(0)์ด ๊ฐ€์žฅ ์ฒซ๋ฒˆ์งธ ์ธ๋ฑ์Šค ๊ฐ’์„ ๊บผ๋‚ด๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ