Skip to main content
เทคโนโลยี

เราเอา Data Structure ไปใช้กันในส่วนไหนบ้าง ?

By มิถุนายน 26th, 2020No Comments

Developer Team
BorntoDev Co., Ltd.

Data Structure มันคืออะไรกัน ?

data structure“Data Structure” แปลตรงตัวก็คือ “โครงสร้างข้อมูล” ความหมายของคำนี้ในด้านคอมพิวเตอร์ก็คือเรื่องเกี่ยวกับวิธีการจัดการกับข้อมูลคอมพิวเตอร์ในรูปแบบและวิธีต่างๆ เพื่อให้สามารถใช้งานข้อมูลเหล่านั้นได้อย่างมีประสิทธิภาพมากที่สุด โดยในครั้งนี้เราจะมาดูกันว่าเราจะสามารถใช้ความรู้เรื่อง Data Structure ไปใช้ทำอะไรในส่วนไหนได้บ้าง ผ่านตัวอย่างรูปแบบข้อมูลแบบต่างๆ

Stack

book stackedสำหรับ Stack นั้นจะเป็นการเก็บข้อมูลแบบมีลำดับ โดยมีไอเดียหลักอยู่ที่การ “เข้าทีหลัง ออกก่อน” หรือ Last In First Out” (LIFO) ให้เรานึกถึงการวางของซ้อนกันขึ้นไปเรื่อยๆ เวลาที่เราจะหยิบของออกก็ต้องหยิบจากด้านบนหรือก็คือชิ้นที่วางไปหลังสุดเสมอ ส่วนชิ้นที่วางไปเป็นอันแรกจะอยู่ล่างสุด จะเอาออกมาได้ก็ตอนที่หยิบอันอื่นออกจนหมดเหลือเป็นอันสุดท้ายแล้วนั่นเอง

ในการเขียนโปรแกรมเราสามารถประยุกต์ใช้ Stack ได้หลากหลายสถานการณ์ อย่างเช่นใช้ในการเก็บประวัติการกรอกข้อมูลของผู้ใช้ ให้ผู้ใช้สามารถทำการ “Undo” กลับไปยังการกระทำก่อนหน้าได้ ลองดูโค้ดตัวอย่างด้านล่าง

# สร้างตัวแปรชื่อ stack มาเก็บข้อมูลการใช้งาน
stack = [] 

# รับข้อมูลตัวแรกจากผู้ใช้
input_data = input('Enter Data: ')
# วนลูปรับข้อมูลไปเรื่อยๆจนกว่าผู้ใช้พิมพ์มาว่า end
while input_data != 'end':

    # ถ้าผู้ใช้สั่ง undo ก็ pop ข้อมูลออกจาก stack
    if input_data == 'undo':
        if len(stack) > 0:
            removed_data = stack.pop()
            print('Undo Action Remove:', removed_data)
        else:
            print('Stack Empty')
            
    # ถ้าไม่ใช่คำสั่ง undo ก็ใส่ข้อมูลที่ผู้ใช้กรอกเข้าไปใน stack ที่สร้างไว้
    else:
        stack.append(input_data)

    print('Current Stack:', stack)
    input_data = input('Enter Data: ')

# หลังจากได้รับคำสั่ง end ทำการ print ค่าใน stack ที่มีอยู่ออกมา
print('Final Stack:', stack)

Output

Enter Data: 1
Current Stack: ['1']
Enter Data: 5
Current Stack: ['1', '5']
Enter Data: 2
Current Stack: ['1', '5', '2']
Enter Data: 3
Current Stack: ['1', '5', '2', '3']
Enter Data: 1
Current Stack: ['1', '5', '2', '3', '1']
Enter Data: undo
Undo Action Remove: 1
Current Stack: ['1', '5', '2', '3']
Enter Data: undo
Undo Action Remove: 3
Current Stack: ['1', '5', '2']
Enter Data: 4
Current Stack: ['1', '5', '2', '4']
Enter Data: end
Final Stack: ['1', '5', '2', '4']

Queue

ตัวต่อมาที่จะยกตัวอย่างในครั้งนี้ก็คือ “Queue” หรือก็คือ “คิว” ที่เรารู้จักกันในการต่อคิว เข้าคิว อะไรแบบนั้น ซึ่งคิวนี้จะต่างกับ Stack ตรงที่คิวจะเป็นการ “เข้าก่อน ออกก่อน” หรือ “First In First Out” (FIFO) ก็คือตามคิวนั่นแหละ คนไปต่อคิวก่อนก็ต้องได้สิทธิ์ก่อนแน่นอนอยู่แล้ว

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

import random

# สร้างตัวแปรชื่อ queue ไว้เก็บข้อมูลคนที่มาเข้าคิวขึ้นชิงช้าสวรรค์
queue = [] 
  
# คนที่จะมาเข้าคิว
so_many_people = ['Faye', 'Fang', 'Kaew', 'Golf', 'Mike']

# สุ่มคนมาเข้าคิวในแถวทีละคนจนครบทุกคน
enqueue_number = 1
for i in range(len(so_many_people)):
    someone = random.choice(so_many_people)
    print('Join a queue {}: {}'.format(enqueue_number, someone))
    so_many_people.remove(someone)
    queue.append(someone)
    enqueue_number += 1

# เรียกคนมาขึ้นชิงช้าสวรรค์ตามคิว
queue_number = 1
for i in range(len(queue)):
    print('Queue {}: {}'.format(queue_number, queue.pop(0)))
    queue_number += 1

Output

Join a queue 1: Mike
Join a queue 1: Golf
Join a queue 2: Faye
Join a queue 3: Kaew
Join a queue 4: Fang
Join a queue 5: Mike
Queue 1: Golf
Queue 2: Faye
Queue 3: Kaew
Queue 4: Fang
Queue 5: Mike

Set

อีกสักตัวกับรูปแบบข้อมูลที่มีประโยชน์มากๆเช่นกันนั่นก็คือ Set โดยเป็นลักษณะข้อมูลที่เก็บเอาไว้รวมกันแต่จะมีมีลำดับภายในกลุ่ม ไม่ว่าจะเก็บตัวไหนเข้าก่อนหรือหลังก็ไม่มีผลอะไร และอีกหนึ่งจุดเด่นของ Set ก็คือจะไม่สามารถเก็บข้อมูลที่ซ้ำกันเข้าไปได้ คุณสมบัติเหล่านี้ช่วยลดงาน ลดโค้ดที่เราต้องเขียนลงไปได้ในหลายๆกรณี

อย่างเช่นเราต้องการเขียนโค้ดรับข้อมูลที่ไม่ซ้ำกันจนครบจำนวน แล้วทำการสุ่มออกมาทีละตัวจนหมด ถ้าเราไม่ได้ใช้ Set ก็ต้องเขียนโค้ดเช็คทุกครั้งว่าข้อมูลที่รับเข้ามาใหม่นั้นซ้ำกับข้อมูลที่เคยรับมาแล้วรึเปล่า ก่อนจะเลือกว่าจะใส่หรือไม่ใส่เพิ่มเข้าไป และตอนที่จะสุ่มค่าออกมาก็อาจจะต้อง import random มาช่วยสุ่มค่าออกมาอีก แต่ถ้าเราใช้ Set ตั้งแต่ต้น เรื่องพวกนี้ก็จะง่ายมากๆแบบโค้ดด้านล่างนี้เลย

# สร้างตัวแปร my_set ไว้เก็บข้อมูล
my_set = set()

# กำหนดจำนวนข้อมูลไม่ซ้ำกันที่ต้องการ
limit_size = 5

# รับข้อมูลจนกว่าจะได้ตัวไม่ซ้ำกันครบจำนวน
while len(my_set) != limit_size:
    my_set.add(input('Enter Number: '))

# เนื่องจาก Set ไม่มีลำดับ ข้อมูลที่เรียกใช้จึงเป็นการสุ่มออกมา
for num in my_set:
    print(num)

Output ครั้งที่ 1

Enter Number: 1
Enter Number: 1
Enter Number: 5
Enter Number: 4
Enter Number: 6
Enter Number: 4
Enter Number: 3
6
4
3
1
5

ถึงแม้เรารันโค้ดเดิม พร้อมใส่ input เรียงลำดับเหมือนเดิม ผลลัพธ์ที่ได้ก็จะเรียงไม่เหมือนกัน เพราะตอนที่เก็บข้อมูลใส่ใน Set ไม่มีการระบุลำดับ

Output ครั้งที่ 2

Enter Number: 1
Enter Number: 1
Enter Number: 5
Enter Number: 4
Enter Number: 6
Enter Number: 4
Enter Number: 3
6
1
3
5
4

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

หากคุณสนใจพัฒนา สตาร์ทอัพ แอปพลิเคชัน และ เทคโนโลยีของตัวเอง ?

อย่ารอช้า ! เรียนรู้ทักษะด้านดิจิทัลเพื่ออัพเกรดความสามารถของคุณ
เริ่มตั้งแต่พื้นฐาน พร้อมปฏิบัติจริงในรูปแบบหลักสูตรออนไลน์วันนี้

Leave a Reply

เราใช้คุกกี้เพื่อพัฒนาประสิทธิภาพ และประสบการณ์ที่ดีในการใช้เว็บไซต์ของคุณ คุณสามารถศึกษารายละเอียดได้ที่ นโยบายความเป็นส่วนตัว และสามารถจัดการความเป็นส่วนตัวเองได้ของคุณได้เองโดยคลิกที่ ตั้งค่า

ตั้งค่าความเป็นส่วนตัว

คุณสามารถเลือกการตั้งค่าคุกกี้โดยเปิด/ปิด คุกกี้ในแต่ละประเภทได้ตามความต้องการ ยกเว้น คุกกี้ที่จำเป็น

ยอมรับทั้งหมด
จัดการความเป็นส่วนตัว
  • คุกกี้ที่จำเป็น
    เปิดใช้งานตลอด

    ประเภทของคุกกี้มีความจำเป็นสำหรับการทำงานของเว็บไซต์ เพื่อให้คุณสามารถใช้ได้อย่างเป็นปกติ และเข้าชมเว็บไซต์ คุณไม่สามารถปิดการทำงานของคุกกี้นี้ในระบบเว็บไซต์ของเราได้
    รายละเอียดคุกกี้

  • คุกกี้สำหรับการติดตามทางการตลาด

    ประเภทของคุกกี้ที่มีความจำเป็นในการใช้งานเพื่อการวิเคราะห์ และ นำเสนอโปรโมชัน สินค้า รวมถึงหลักสูตรฟรี และ สิทธิพิเศษต่าง ๆ คุณสามารถเลือกปิดคุกกี้ประเภทนี้ได้โดยไม่ส่งผลต่อการทำงานหลัก เว้นแต่การนำเสนอโปรโมชันที่อาจไม่ตรงกับความต้องการ
    รายละเอียดคุกกี้

บันทึกการตั้งค่า