ในกองบริสุทธิ์เพียงการดำเนินงานที่อนุญาตมีPush
, Pop
และPeek
แต่ในแง่การปฏิบัติที่ไม่เป็นความจริงว่า หรือค่อนข้างPeek
บ่อยครั้งที่การดำเนินการช่วยให้คุณสามารถดูตำแหน่งใด ๆ บนสแต็กได้ แต่การจับก็คือมันเกี่ยวข้องกับปลายด้านหนึ่งของสแต็ก
ดังนั้นอย่างที่คนอื่น ๆ บอกกันอาเรย์คือการเข้าถึงแบบสุ่มและทุกอย่างอ้างอิงถึงจุดเริ่มต้นของอาเรย์
ในกองคุณสามารถเพิ่ม / ลบที่ปลายทำงานของสแต็ค แต่คุณยังคงมีการเข้าถึงแบบสุ่มอ่านแต่มันอ้างอิงกับจุดสิ้นสุดการทำงาน นั่นคือความแตกต่างพื้นฐาน
ตัวอย่างเช่นเมื่อคุณส่งพารามิเตอร์บนสแต็กไปยังฟังก์ชันผู้ใช้ไม่จำเป็นต้องปิดพารามิเตอร์เพื่อดูพารามิเตอร์ มันแค่ดันตัวแปรโลคัลบนสแต็กและอ้างอิงตัวแปรโลคัลและพารามิเตอร์ทั้งหมดตามอ็อฟเซ็ตจากตัวชี้สแต็ก หากคุณใช้เพียงอาเรย์แล้ว callee จะรู้ได้อย่างไรว่าจะหาพารามิเตอร์ได้อย่างไร? เมื่อ callee เสร็จแล้วมันก็จะปิดตัวแปรท้องถิ่นผลักค่าส่งคืนส่งคืนการควบคุมไปยังผู้เรียกและผู้เรียกจะแสดงค่าคืน (ถ้ามี) จากนั้นก็ดึงพารามิเตอร์ออกจากสแต็ก ความสวยงามคือมันทำงานได้ไม่ว่าคุณจะอยู่ไกลแค่ไหนในการใช้งานฟังก์ชั่นของคุณ (สมมติว่าคุณไม่มีพื้นที่สแต็ค)
นั่นคือการใช้งาน / การนำไปใช้โดยเฉพาะอย่างยิ่ง แต่มันแสดงให้เห็นถึงความแตกต่าง: อาเรย์ถูกอ้างอิงจากจุดเริ่มต้นเสมอ แต่สแต็กจะถูกอ้างอิงจากตำแหน่งสิ้นสุดการทำงานบางอย่าง
การนำไปใช้งานที่เป็นไปได้อย่างหนึ่งของสแต็กคืออาร์เรย์พร้อมดัชนีที่จะจำได้ว่าจุดสิ้นสุดการทำงานอยู่ที่ใด