ในการพยายามลดความซับซ้อนของคำอธิบายของสแต็กและคิวทั้งสองเป็นห่วงโซ่แบบไดนามิกขององค์ประกอบข้อมูลที่สามารถเข้าถึงได้จากปลายด้านหนึ่งของห่วงโซ่และความแตกต่างที่แท้จริงเพียงอย่างเดียวระหว่างพวกเขาคือ:
เมื่อทำงานกับสแต็ก
- คุณใส่องค์ประกอบที่ปลายด้านหนึ่งของโซ่และ
- คุณดึงและ / หรือลบองค์ประกอบจากปลายสายเดียวกัน
ในขณะที่มีคิว
- คุณใส่องค์ประกอบที่ปลายด้านหนึ่งของโซ่และ
- คุณดึง / ลบออกจากปลายอีกด้านหนึ่ง
บันทึก : ฉันใช้ถ้อยคำนามธรรมในการดึง / ลบในบริบทนี้เนื่องจากมีบางกรณีที่คุณเพิ่งดึงองค์ประกอบจากห่วงโซ่หรือในแง่หนึ่งเพียงแค่อ่านหรือเข้าถึงค่าของมัน แต่ยังมีบางกรณีที่คุณลบองค์ประกอบออกจาก ห่วงโซ่และในที่สุดก็มีกรณีที่คุณทำทั้งสองอย่างด้วยการโทรเดียวกัน
นอกจากนี้องค์ประกอบของคำยังถูกใช้อย่างมีจุดประสงค์เพื่อที่จะทำให้ห่วงโซ่จินตภาพเป็นนามธรรมให้มากที่สุดเท่าที่จะเป็นไปได้และแยกมันออกจากคำศัพท์ภาษาโปรแกรมที่เฉพาะเจาะจง เอนทิตีข้อมูลนามธรรมที่เรียกว่าองค์ประกอบอาจเป็นอะไรก็ได้ตั้งแต่ตัวชี้ค่าสตริงหรืออักขระวัตถุ ... ขึ้นอยู่กับภาษา
ในกรณีส่วนใหญ่แม้ว่าจะเป็นค่าหรือตำแหน่งหน่วยความจำ (เช่นตัวชี้) และส่วนที่เหลือก็ซ่อนความจริงนี้ไว้เบื้องหลังศัพท์แสงภาษา <
คิวจะมีประโยชน์เมื่อลำดับขององค์ประกอบมีความสำคัญและจำเป็นต้องตรงกับตอนที่องค์ประกอบเข้ามาในโปรแกรมของคุณครั้งแรก ตัวอย่างเช่นเมื่อคุณประมวลผลสตรีมเสียงหรือเมื่อคุณบัฟเฟอร์ข้อมูลเครือข่าย หรือเมื่อคุณดำเนินการจัดเก็บและดำเนินการต่อ ในกรณีเหล่านี้ทั้งหมดคุณต้องลำดับขององค์ประกอบที่จะส่งออกในลำดับเดียวกับที่เข้ามาในโปรแกรมของคุณมิฉะนั้นข้อมูลอาจไม่สมเหตุสมผล ดังนั้นคุณสามารถทำลายโปรแกรมของคุณในส่วนที่อ่านข้อมูลจากอินพุตบางส่วนทำการประมวลผลบางอย่างและเขียนเป็นคิวและส่วนที่ดึงข้อมูลจากคิวประมวลผลและเก็บไว้ในคิวอื่นเพื่อประมวลผลหรือส่งข้อมูลต่อไป .
สแต็กจะมีประโยชน์เมื่อคุณต้องการจัดเก็บองค์ประกอบชั่วคราวที่จะใช้ในขั้นตอนของโปรแกรมของคุณ ตัวอย่างเช่นภาษาโปรแกรมมักใช้โครงสร้างสแตกเพื่อส่งผ่านตัวแปรไปยังฟังก์ชัน สิ่งที่พวกเขาทำจริงๆคือจัดเก็บ (หรือพุช) อาร์กิวเมนต์ของฟังก์ชันในสแต็กจากนั้นข้ามไปที่ฟังก์ชันที่พวกเขาลบและดึง (หรือป๊อป) องค์ประกอบจำนวนเท่ากันจากสแต็ก ด้วยวิธีนี้ขนาดของสแต็กจะขึ้นอยู่กับจำนวนการเรียกฟังก์ชันที่ซ้อนกัน นอกจากนี้หลังจากเรียกใช้ฟังก์ชันและทำสิ่งที่มันทำเสร็จแล้วมันจะออกจากสแต็กในสภาพเดียวกับที่เคยเรียกมา! ด้วยวิธีนี้ฟังก์ชันใด ๆ ที่สามารถทำงานร่วมกับสแต็กโดยไม่สนใจว่าฟังก์ชันอื่นจะทำงานอย่างไร
สุดท้ายนี้คุณควรทราบว่ามีคำอื่น ๆ ที่ใช้ในแนวคิดเดียวกันนี้ ตัวอย่างเช่นสแต็กอาจเรียกว่าฮีป นอกจากนี้ยังมีแนวคิดเหล่านี้ในเวอร์ชันไฮบริดตัวอย่างเช่นคิวแบบปลายคู่สามารถทำงานพร้อมกันเป็นสแต็กและเป็นคิวได้เนื่องจากสามารถเข้าถึงได้โดยปลายทั้งสองข้างพร้อมกัน นอกจากนี้ความจริงที่ว่าโครงสร้างข้อมูลถูกจัดเตรียมให้คุณเป็นสแต็กหรือเป็นคิวนั้นไม่จำเป็นต้องหมายความว่ามีการใช้งานเช่นนี้มีบางกรณีที่โครงสร้างข้อมูลสามารถนำไปใช้เป็นอะไรก็ได้และจัดให้เป็นแบบเฉพาะ โครงสร้างข้อมูลเพียงเพราะสามารถสร้างพฤติกรรมเช่นนี้ได้ กล่าวอีกนัยหนึ่งคือหากคุณให้วิธีการพุชและป๊อปกับโครงสร้างข้อมูลใด ๆ สิ่งเหล่านี้จะกลายเป็นกองซ้อนอย่างน่าอัศจรรย์!