ยินดีต้อนรับ!

โครงสร้างข้อมูลและอัลกอริทึมใน Python

Miriam Antona

Software Engineer

ความสำคัญของอัลกอริทึมและโครงสร้างข้อมูล

  • โครงสร้างข้อมูล และ อัลกอริทึม ช่วยให้เรา
    • แก้ ปัญหาในชีวิตประจำวัน
    • ด้วย โค้ดที่มีประสิทธิภาพ
  • คอร์สนี้สามารถสอนด้วย ภาษาโปรแกรมใดก็ได้
โครงสร้างข้อมูลและอัลกอริทึมใน Python

อัลกอริทึมและโครงสร้างข้อมูล

  • อัลกอริทึม: ชุดคำสั่งที่ใช้แก้ปัญหา

    1. ออกแบบ

      ภาพแสดงแผนผังการออกแบบอัลกอริทึม

    2. เขียนโค้ด

      ภาพแสดงแผนผังโค้ดของอัลกอริทึม

  • โครงสร้างข้อมูล: ใช้เก็บและจัดการข้อมูลระหว่างรันอัลกอริทึม
    • โครงสร้างข้อมูล ขั้นสูง: linked list, stack, queue...
โครงสร้างข้อมูลและอัลกอริทึมใน Python

Linked list

ตัวอย่าง linked list ที่แสดงขั้นตอนการทำขนมปัง

  • ลำดับของข้อมูลที่เชื่อมต่อกันผ่าน link
โครงสร้างข้อมูลและอัลกอริทึมใน Python

Linked list - โครงสร้าง

ภาพแสดงโหนดใน linked list

โครงสร้างข้อมูลและอัลกอริทึมใน Python

Linked list - โครงสร้าง

ภาพแสดงโหนดใน linked list โดยส่วนแรกมีคำว่า "DATA"

โครงสร้างข้อมูลและอัลกอริทึมใน Python

Linked list - โครงสร้าง

ภาพแสดงโหนดใน linked list โดยส่วนแรกมีคำว่า "DATA" และส่วนที่สองมีคำว่า "NEXT" พร้อมตัวชี้

โครงสร้างข้อมูลและอัลกอริทึมใน Python

Linked list - โครงสร้าง

ภาพแสดงสองโหนดของ linked list ที่เชื่อมต่อกันด้วย link

โครงสร้างข้อมูลและอัลกอริทึมใน Python

Linked list - โครงสร้าง

ภาพแสดงหลายโหนดของ linked list ที่เชื่อมต่อกันด้วย link

โครงสร้างข้อมูลและอัลกอริทึมใน Python

Linked list - โครงสร้าง

ภาพแสดง linked list ที่โหนดสุดท้ายชี้ไปยัง null

โครงสร้างข้อมูลและอัลกอริทึมใน Python

Linked list - โครงสร้าง

ภาพแสดง linked list โดยโหนดแรกมีคำว่า "HEAD"

โครงสร้างข้อมูลและอัลกอริทึมใน Python

Linked list - โครงสร้าง

ภาพแสดง linked list โดยโหนดสุดท้ายมีคำว่า "TAIL"

  • ข้อมูลไม่จำเป็นต้องเก็บในบล็อกหน่วยความจำที่ต่อเนื่องกัน
  • ข้อมูลสามารถอยู่ที่ address หน่วยความจำใดก็ได้ที่ว่างอยู่
โครงสร้างข้อมูลและอัลกอริทึมใน Python

Singly linked list

ภาพแสดง singly linked list

  • link เดียว: singly linked list
โครงสร้างข้อมูลและอัลกอริทึมใน Python

Doubly linked list

ภาพแสดง doubly linked list

  • สอง link ทั้งสองทิศทาง: doubly linked list
โครงสร้างข้อมูลและอัลกอริทึมใน Python

Linked list - การใช้งานจริง

  • นำไปใช้สร้างโครงสร้างข้อมูลอื่น:
    • stack
    • queue
    • กราฟ
  • เข้าถึงข้อมูลโดยเลื่อนไปข้างหน้าและข้างหลังได้
    • เว็บเบราว์เซอร์
    • เพลย์ลิสต์เพลง
โครงสร้างข้อมูลและอัลกอริทึมใน Python

Linked list - คลาส Node

class Node:
  def __init__(self, data):
    self.data = data
    self.next = None
โครงสร้างข้อมูลและอัลกอริทึมใน Python

Linked list - คลาส LinkedList

class LinkedList:
  def __init__(self):
    self.head = None
    self.tail = None
โครงสร้างข้อมูลและอัลกอริทึมใน Python

Linked list - เมธอด

  • insert_at_beginning()
  • remove_at_beginning()
  • insert_at_end()
  • remove_at_end()
  • insert_at()
  • remove_at()
  • search()
  • ...
โครงสร้างข้อมูลและอัลกอริทึมใน Python

Linked list - insert_at_beginning

ภาพแสดง singly linked list

โครงสร้างข้อมูลและอัลกอริทึมใน Python

Linked list - insert_at_beginning

ภาพแสดง singly linked list และโหนดใหม่

 def insert_at_beginning(self, data):
    new_node = Node(data)

if self.head:
โครงสร้างข้อมูลและอัลกอริทึมใน Python

Linked list - insert_at_beginning

ภาพแสดง singly linked list ที่เชื่อมต่อโหนดใหม่แล้ว

 def insert_at_beginning(self, data):
    new_node = Node(data)
    if self.head:
      new_node.next = self.head

โครงสร้างข้อมูลและอัลกอริทึมใน Python

Linked list - insert_at_beginning

ภาพแสดง singly linked list ที่เชื่อมต่อโหนดใหม่แล้ว โดยโหนดนี้มีคำว่า "HEAD"

 def insert_at_beginning(self, data):
    new_node = Node(data)
    if self.head:
      new_node.next = self.head
      self.head = new_node

โครงสร้างข้อมูลและอัลกอริทึมใน Python

Linked list - insert_at_beginning

ภาพแสดงโหนดใหม่ใน linked list ที่ว่างเปล่า

 def insert_at_beginning(self, data):
    new_node = Node(data)
    if self.head:
      new_node.next = self.head
      self.head = new_node
    else:

self.tail = new_node self.head = new_node
โครงสร้างข้อมูลและอัลกอริทึมใน Python

Linked list - insert_at_end

  def insert_at_end(self, data):
    new_node = Node(data)
    if self.head:  

self.tail.next = new_node
self.tail = new_node
else:
self.head = new_node self.tail = new_node
โครงสร้างข้อมูลและอัลกอริทึมใน Python

Linked list - search

def search(self, data):

current_node = self.head
while current_node:
if current_node.data == data:
return True

ภาพแสดง singly linked list โดยคำว่า "current_node" ชี้ไปที่โหนดแรก

โครงสร้างข้อมูลและอัลกอริทึมใน Python

Linked list - search

def search(self, data):
  current_node = self.head
  while current_node:
    if current_node.data == data:
      return True
    else:
      current_node = current_node.next

ภาพแสดง singly linked list โดยคำว่า "current_node" ชี้ไปที่โหนดที่สอง

โครงสร้างข้อมูลและอัลกอริทึมใน Python

Linked list - search

def search(self, data):
  current_node = self.head
  while current_node:
    if current_node.data == data:
      return True
    else:
      current_node = current_node.next

return False

ภาพแสดง singly linked list โดยคำว่า "current_node" ชี้ไปที่โหนดที่สาม

โครงสร้างข้อมูลและอัลกอริทึมใน Python

Linked list - ตัวอย่าง

ภาพแสดงโหนดใหม่ใน linked list ที่ว่างเปล่า

sushi_preparation = LinkedList()

sushi_preparation.insert_at_end("prepare")
โครงสร้างข้อมูลและอัลกอริทึมใน Python

Linked list - ตัวอย่าง

ภาพแสดงโหนดใหม่ที่เพิ่มที่ท้าย linked list

sushi_preparation = LinkedList()  
sushi_preparation.insert_at_end("prepare")
sushi_preparation.insert_at_end("roll") 

โครงสร้างข้อมูลและอัลกอริทึมใน Python

Linked list - ตัวอย่าง

ภาพแสดงโหนดใหม่ที่เพิ่มที่ต้น linked list

sushi_preparation = LinkedList()  
sushi_preparation.insert_at_end("prepare")
sushi_preparation.insert_at_end("roll") 
sushi_preparation.insert_at_beginning("assemble")
โครงสร้างข้อมูลและอัลกอริทึมใน Python

Linked list - ตัวอย่าง

ภาพแสดง linked list

sushi_preparation.search("roll")
True
sushi_preparation.search("mixing")
False
โครงสร้างข้อมูลและอัลกอริทึมใน Python

มาฝึกกันเถอะ!

โครงสร้างข้อมูลและอัลกอริทึมใน Python

Preparing Video For Download...