การทำงานกับ stacks

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

Miriam Antona

Software Engineer

Stacks

  • LIFO: Last-In First-Out
    • ข้อมูลที่ ใส่เข้าไปล่าสุด จะถูก นำออกเป็นอันแรก

ภาพกองหนังสือที่วางซ้อนกัน

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

Stacks

  • LIFO: Last-In First-Out
    • ข้อมูลที่ ใส่เข้าไปล่าสุด จะถูก นำออกเป็นอันแรกเสมอ
  • เพิ่ม ข้อมูลได้เฉพาะที่ ด้านบน เท่านั้น
    • Pushing onto the stack

ภาพกองหนังสือที่มีหนังสือเล่มใหม่วางเพิ่มที่ด้านบนสุด

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

Stacks

  • LIFO: Last-In First-Out
    • ข้อมูลที่ ใส่เข้าไปล่าสุด จะถูก นำออกเป็นอันแรกเสมอ
  • เพิ่ม ข้อมูลได้เฉพาะที่ ด้านบน เท่านั้น
    • Pushing onto the stack
  • นำออก ได้เฉพาะที่ ด้านบน เท่านั้น
    • Popping from the stack

ภาพกองหนังสือที่มีหนังสือถูกหยิบออกจากด้านบนสุด

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

Stacks

  • LIFO: Last-In First-Out
    • ข้อมูลที่ ใส่เข้าไปล่าสุด จะถูก นำออกเป็นอันแรกเสมอ
  • เพิ่ม ข้อมูลได้เฉพาะที่ ด้านบน เท่านั้น
    • Pushing onto the stack
  • ลบ ข้อมูลได้เฉพาะที่ ด้านบน เท่านั้น
    • Popping from the stack
  • อ่าน ได้เฉพาะ ข้อมูลตัวสุดท้าย
    • Peeking from the stack

ภาพกองหนังสือที่มีลูกศรชี้ไปที่ปกหนังสือเล่มบนสุด

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

Stacks - การใช้งานจริง

  • ฟังก์ชัน Undo

Stack ที่มีหนึ่งข้อมูล

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

Stacks - การใช้งานจริง

  • ฟังก์ชัน Undo
    • push ทุกการกดปุ่ม

Stack ที่มีข้อมูลใหม่เพิ่มที่ด้านบนสุด

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

Stacks - การใช้งานจริง

  • ฟังก์ชัน Undo
    • push ทุกการกดปุ่ม

Stack ที่มีข้อมูลใหม่เพิ่มที่ด้านบนสุด

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

Stacks - การใช้งานจริง

  • ฟังก์ชัน Undo
    • push ทุกการกดปุ่ม

Stack ที่มีข้อมูลใหม่เพิ่มที่ด้านบนสุด

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

Stacks - การใช้งานจริง

  • ฟังก์ชัน Undo
    • push ทุกการกดปุ่ม

Stack ที่มีข้อมูลใหม่เพิ่มที่ด้านบนสุด

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

Stacks - การใช้งานจริง

  • ฟังก์ชัน Undo
    • push ทุกการกดปุ่ม
    • pop การกดปุ่มล่าสุดออก

Stack ที่มีข้อมูลถูกนำออกจากด้านบนสุด

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

Stacks - การใช้งานจริง

  • ตัวตรวจสอบสัญลักษณ์: ( [ { } ] )
    • push สัญลักษณ์เปิด

Stack ที่มีสัญลักษณ์เปิดอยู่

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

Stacks - การใช้งานจริง

  • ตัวตรวจสอบสัญลักษณ์: ( [ { } ] )
    • push สัญลักษณ์เปิด

Stack ที่มีสัญลักษณ์เปิดใหม่เพิ่มที่ด้านบนสุด

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

Stacks - การใช้งานจริง

  • ตัวตรวจสอบสัญลักษณ์: ( [ { } ] )
    • push สัญลักษณ์เปิด

Stack ที่มีสัญลักษณ์เปิดใหม่เพิ่มที่ด้านบนสุด

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

Stacks - การใช้งานจริง

  • ตัวตรวจสอบสัญลักษณ์: ( [ { } ] )
    • push สัญลักษณ์เปิด
    • check สัญลักษณ์ปิด

Stack ที่มีสัญลักษณ์เปิดและข้อความ "check "}""

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

Stacks - การใช้งานจริง

  • ตัวตรวจสอบสัญลักษณ์: ( [ { } ] )
    • push สัญลักษณ์เปิด
    • check สัญลักษณ์ปิด
    • pop สัญลักษณ์เปิดที่ตรงกันออก

Stack ที่มีสัญลักษณ์เปิดถูกนำออกจากด้านบนสุด

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

Stacks - การใช้งานจริง

  • การเรียกใช้ฟังก์ชัน
    • push บล็อกหน่วยความจำ
    • pop เมื่อการทำงานสิ้นสุด
โครงสร้างข้อมูลและอัลกอริทึมใน Python

Stacks - การนำไปใช้งานด้วย singly linked lists

ภาพ stack ที่แสดงเป็น linked list

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

Stacks - การนำไปใช้งานด้วย singly linked lists

ภาพ stack ที่แสดงเป็น linked list พร้อมชื่อส่วนประกอบของโหนด

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

Stacks - การนำไปใช้งานด้วย singly linked lists

ภาพ stack ที่แสดงเป็น linked list โดยมีคำว่า "TOP" ชี้ไปที่ด้านบนสุดของ stack

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

Stacks - push

ภาพแสดง stack ที่ว่างเปล่าและ stack ที่มีข้อมูล

def push(self, data):




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

Stacks - push

ภาพแสดง stack ที่ว่างเปล่าและ stack ที่มีข้อมูล ซึ่งกำลังจะเพิ่มโหนดใหม่

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

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

Stacks - push

ภาพแสดง stack ที่ว่างเปล่าและ stack ที่มีข้อมูล โดยโหนดใหม่เชื่อมต่อกับโหนดบนสุด

def push(self, data): 
  new_node = Node(data)
  if self.top:

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

Stacks - push

ภาพแสดง stack ที่ว่างเปล่าและ stack ที่มีข้อมูล โดยโหนดใหม่ถูกเพิ่มเข้าไปแล้ว

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

Stacks - pop

def pop(self):

if self.top is None:
return None
else:

ภาพแสดง stack ที่มีคำว่า "TOP" ชี้ไปที่โหนดบนสุด

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

Stacks - pop

def pop(self):
  if self.top is None:
    return None
  else:
    popped_node = self.top



ภาพแสดง stack ที่มีคำว่า "popped_node" ชี้ไปที่โหนดบนสุด

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

Stacks - pop

def pop(self):
  if self.top is None:
    return None
  else:
    popped_node = self.top
    self.top = self.top.next


ภาพแสดง stack ที่มีคำว่า "popped_node" ชี้ไปที่โหนดบนสุด และคำว่า "TOP" ชี้ไปที่โหนดอันดับสอง

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

Stacks - pop

def pop(self):
  if self.top is None:
    return None
  else:
    popped_node = self.top
    self.top = self.top.next
    popped_node.next = None

ภาพแสดง stack ที่มีคำว่า "popped_node" ชี้ไปที่โหนดที่ถูกตัดออกจาก stack และคำว่า "TOP" ชี้ไปที่โหนดบนสุดของ stack

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

Stacks - pop

def pop(self):
  if self.top is None:
    return None
  else:
    popped_node = self.top
    self.top = self.top.next
    popped_node.next = None
    return popped_node.data 

ภาพแสดง stack ที่มีคำว่า "TOP" ชี้ไปที่โหนดบนสุด

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

Stacks - peek

def peek(self):

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

LifoQueue ใน Python

  • LifoQueue:
    • โมดูล queue ของ Python
    • ทำงานเหมือน stack
import queue


my_book_stack = queue.LifoQueue(maxsize=0)
my_book_stack.put("The misunderstanding") my_book_stack.put("Persepolis") my_book_stack.put("1984")
print("The size is: ", my_book_stack.qsize())
The size is: 3
print(my_book_stack.get())
print(my_book_stack.get())
print(my_book_stack.get())
1984
Persepolis
The misunderstanding
print("Empty stack: ", my_book_stack.empty())
Empty stack: True
โครงสร้างข้อมูลและอัลกอริทึมใน Python

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

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

Preparing Video For Download...