Trong một chồng thuần túy, chỉ hoạt động cho phép là Push
, Pop
và Peek
nhưng trong thực tế, đó không phải là hoàn toàn chính xác. Hay đúng hơn, Peek
thao tác thường cho phép bạn nhìn vào bất kỳ vị trí nào trên ngăn xếp, nhưng điều thú vị là nó liên quan đến một đầu của ngăn xếp.
Vì vậy, như những người khác đã nói, một mảng là truy cập ngẫu nhiên và mọi thứ đều được tham chiếu đến phần đầu của mảng .
Trong ngăn xếp, bạn chỉ có thể thêm / xóa ở cuối hoạt động của ngăn xếp, nhưng bạn vẫn có quyền truy cập ngẫu nhiên đọc nhưng nó được tham chiếu đến kết thúc làm việc . Đó là sự khác biệt cơ bản.
Chẳng hạn, khi bạn truyền tham số trên ngăn xếp cho hàm, callee không cần phải tắt tham số để xem chúng. Nó chỉ đẩy các biến cục bộ trên ngăn xếp và tham chiếu tất cả các biến và tham số cục bộ dựa trên phần bù từ con trỏ ngăn xếp. Nếu bạn đang sử dụng chỉ một mảng, thì làm thế nào callee biết nơi để tìm các tham số của nó? Khi callee được thực hiện, nó bật ra các biến cục bộ của nó, đẩy giá trị trả về, trả lại quyền điều khiển cho người gọi và người gọi bật giá trị trả về (nếu có), sau đó bật các tham số ra khỏi ngăn xếp. Cái hay ở đây là nó hoạt động cho dù bạn có lồng vào các lệnh gọi của bạn bao xa (giả sử bạn không hết dung lượng ngăn xếp).
Đó là một cách sử dụng / triển khai cụ thể, nhưng nó minh họa cho sự khác biệt: mảng luôn được tham chiếu từ đầu nhưng ngăn xếp luôn được tham chiếu từ một số vị trí kết thúc làm việc.
Một triển khai có thể có của ngăn xếp là một mảng cộng với một chỉ mục để ghi nhớ nơi kết thúc làm việc.