Skip to main content
0
Data Structure & AlgorithmsProgramming Concept

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

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 ถ้าเราเข้าใจเกี่ยวกับการใช้งานข้อมูลรูปแบบต่างๆ เวลาที่เราได้เขียนโปรแกรมจริงๆแล้วเลือกชนิดข้อมูลมาใช้อย่างเหมาะสม เราก็จะทำงานได้ง่ายขึ้นนั่นเองครับ

Develeper

Author Develeper

More posts by Develeper

Leave a Reply

Close Menu

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

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

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

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

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

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

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

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