Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

อธิบาย Stack ใน Python พร้อมตัวอย่าง


สแต็กคือโครงสร้างข้อมูลเชิงเส้นที่ทำงานบน เข้าก่อนออกก่อน กลไก (LIFO) องค์ประกอบที่ป้อนก่อนในสแต็กเป็นองค์ประกอบสุดท้ายที่จะถูกประมวลผล

ตัวอย่าง

โครงสร้างข้อมูลสแต็กสามารถเข้าใจได้โดยใช้ตัวอย่างอาหารแบบกองซ้อน

จานเรียงซ้อนกัน จานหรือจานแรกอยู่ด้านล่างของกอง และจานสุดท้ายที่วางอยู่ด้านบนของกองหรือกอง เมื่อใดก็ตามที่เราต้องการเพลท เราจะหยิบเพลทที่อยู่ด้านบนสุดของกองซึ่งเป็นเพลทที่ใส่เข้าไปหรือวางไว้ในตอนสุดท้าย จานที่วางไว้ก่อนจะเป็นจานสุดท้ายที่หยิบขึ้นมา ดังนั้นจึงปฏิบัติตามกลไก LAST IN FIRST OUT

การใช้งาน Stack ใน Python

Stack in Python สามารถนำไปใช้ได้หลายวิธีโดยใช้โครงสร้างข้อมูลเชิงเส้นอื่นหรือโมดูลที่สร้างขึ้นในไลบรารี Python

วิธีที่ 1 - ดำเนินการโดยใช้รายการ

สแต็คใน Python สามารถใช้งานได้โดยใช้รายการ แต่การใช้ list เพื่อใช้งาน stack นั้นไม่ได้มีประสิทธิภาพมากนัก ดังนั้นจึงไม่แนะนำ

การดำเนินการที่เกี่ยวข้อง

ต่อท้าย() − ฟังก์ชันนี้จะเพิ่มองค์ประกอบที่ส่วนท้ายของสแต็ก

ป๊อป() − ฟังก์ชันนี้จะลบและส่งคืนองค์ประกอบสุดท้ายหรือบนสุดในสแต็ก ฟังก์ชันนี้จะแสดงองค์ประกอบในลำดับ LIFO

ตัวอย่าง

stack=[]
stack.append(1)
stack.append(2)
stack.append(3)
print("Intial Stack",stack)
print("Element popped from the stack")
print(stack.pop())
print(stack.pop())
print("Stack after popping some elements",stack)

ผลลัพธ์

Intial Stack [1, 2, 3]
Element popped from the stack
3
2
Stack after popping some elements [1]

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

stack.pop()
IndexError: pop from empty list

วิธีที่ 2 - ใช้งานโดยใช้ queue.LifoQueue

นี่เป็นวิธีการนำสแต็กไปใช้โดยใช้โมดูล inbuilt จาก python เราจำเป็นต้องนำเข้า LifoQueue จากคิว เราสามารถเริ่มต้น LifoQueue หรือ stack ด้วยขนาดเฉพาะ ขนาดศูนย์หมายถึงสแต็กที่ไม่มีที่สิ้นสุด

การดำเนินการที่เกี่ยวข้อง

ขนาดสูงสุด - จำนวนองค์ประกอบสูงสุดที่อนุญาตในสแต็ก

รับ() - ลบและส่งคืนองค์ประกอบสุดท้ายหรือบนสุดจากสแต็ก หากสแต็กว่างเปล่า ให้รอจนกว่าสแต็กจะมีอย่างน้อยหนึ่งองค์ประกอบ

get_nowait() - ลบและส่งคืนองค์ประกอบสุดท้ายจากสแต็ก หากสแต็กว่างเปล่า ให้ยกข้อยกเว้น

วาง(รายการ) - ผนวกองค์ประกอบที่ส่วนท้ายของสแต็ก หากสแต็กเต็ม ให้รอจนกว่าจะมีช่องว่างว่าง

put_nowait(รายการ) − ผนวกองค์ประกอบที่ส่วนท้ายของสแต็ก หากสแต็กเต็ม ให้ยกข้อยกเว้น

เต็ม() − คืนค่า จริง หากสแต็กเต็ม มิฉะนั้น คืนค่า เท็จ

ว่างเปล่า() − คืนค่า True หากสแต็กว่างเปล่า มิฉะนั้น จะเป็นเท็จ

qsize() − ส่งคืนจำนวนองค์ประกอบที่มีอยู่ในสแต็ก

ตัวอย่าง

from queue import LifoQueue
s=LifoQueue(maxsize=3)
s.put(1)
s.put(2)
s.put(3)
print("Is stack full",s.full())
print("Element popped from the stack")
print(s.get())
print(s.get())
print("Number of elements in stack",s.qsize())
print("Is stack empty",s.empty())

ผลลัพธ์

Is stack full True
Element popped from the stack
3
2
Number of elements in stack 1
Is stack empty False

วิธีที่ 3:ใช้งานโดยใช้ collections.deque

นี่เป็นอีกวิธีหนึ่งในการนำสแต็กไปใช้ใน Python เราจำเป็นต้องนำเข้า deque จากโมดูลคอลเลกชัน

การดำเนินการที่เกี่ยวข้อง

ต่อท้าย() − ฟังก์ชันนี้จะเพิ่มองค์ประกอบที่ส่วนท้ายของสแต็ก

ป๊อป() − ฟังก์ชันนี้จะลบและส่งคืนองค์ประกอบสุดท้ายในสแต็กในความซับซ้อนของเวลา O(1)

ตัวอย่าง

from collections import deque
stack=deque()
stack.append(1)
stack.append(2)
stack.append(3)
print("Intial stack: ",stack)
print("Element popped from the stack")
print(stack.pop())
print(stack.pop())
print("Stack after popping some elements: ",stack)

ผลลัพธ์

Intial stack: deque([1, 2, 3])
Element popped from the stack
3
2
Stack after popping some elements: deque([1])

การใช้ฟังก์ชัน pop() ใน deque ที่ว่างเปล่าจะทำให้เกิดข้อยกเว้น