Để thử và đơn giản hóa quá mức mô tả của ngăn xếp và hàng đợi, chúng đều là các chuỗi yếu tố thông tin động có thể được truy cập từ một đầu của chuỗi và sự khác biệt thực sự duy nhất giữa chúng là:
khi làm việc với một ngăn xếp
- bạn chèn các phần tử ở một đầu của chuỗi và
- bạn truy xuất và / hoặc loại bỏ các phần tử từ cùng một chuỗi
trong khi với một hàng đợi
- bạn chèn các phần tử ở một đầu của chuỗi và
- bạn lấy / xóa chúng từ đầu kia
LƯU Ý : Tôi đang sử dụng từ ngữ trừu tượng của truy xuất / xóa trong ngữ cảnh này bởi vì có những trường hợp khi bạn chỉ lấy phần tử từ chuỗi hoặc theo nghĩa là chỉ đọc nó hoặc truy cập giá trị của nó, nhưng cũng có trường hợp khi bạn loại bỏ phần tử khỏi chuỗi và cuối cùng có những trường hợp khi bạn thực hiện cả hai hành động với cùng một cuộc gọi.
Ngoài ra, phần tử từ được sử dụng có chủ đích để trừu tượng chuỗi tưởng tượng càng nhiều càng tốt và tách nó ra khỏi các thuật ngữ ngôn ngữ lập trình cụ thể. Thực thể thông tin trừu tượng này được gọi là phần tử có thể là bất cứ thứ gì, từ một con trỏ, một giá trị, một chuỗi hoặc các ký tự, một đối tượng, ... tùy thuộc vào ngôn ngữ.
Trong hầu hết các trường hợp, mặc dù nó thực sự là một giá trị hoặc một vị trí bộ nhớ (tức là một con trỏ). Và phần còn lại chỉ che giấu sự thật này đằng sau biệt ngữ ngôn ngữ <
Một hàng đợi có thể hữu ích khi thứ tự của các yếu tố là quan trọng và cần phải chính xác giống như khi các yếu tố lần đầu tiên xuất hiện trong chương trình của bạn. Chẳng hạn, khi bạn xử lý luồng âm thanh hoặc khi bạn đệm dữ liệu mạng. Hoặc khi bạn làm bất kỳ loại cửa hàng và chuyển tiếp xử lý. Trong tất cả các trường hợp này, bạn cần chuỗi các phần tử được xuất theo thứ tự giống như chúng được đưa vào chương trình của bạn, nếu không thông tin có thể ngừng có ý nghĩa. Vì vậy, bạn có thể ngắt chương trình của mình trong một phần đọc dữ liệu từ một số đầu vào, thực hiện một số xử lý và ghi chúng vào hàng đợi và một phần lấy dữ liệu từ hàng đợi xử lý chúng và lưu trữ chúng trong hàng đợi khác để xử lý hoặc truyền dữ liệu .
Một ngăn xếp có thể hữu ích khi bạn cần lưu trữ tạm thời một phần tử sẽ được sử dụng trong (các) bước ngay lập tức của chương trình của bạn. Chẳng hạn, các ngôn ngữ lập trình thường sử dụng cấu trúc ngăn xếp để truyền các biến cho các hàm. Những gì họ thực sự làm là lưu trữ (hoặc đẩy) các đối số hàm trong ngăn xếp và sau đó nhảy đến hàm nơi chúng loại bỏ và truy xuất (hoặc bật) cùng số lượng phần tử từ ngăn xếp. Bằng cách đó, kích thước của ngăn xếp phụ thuộc vào số lượng các lệnh gọi lồng nhau của các hàm. Ngoài ra, sau khi một chức năng đã được gọi và hoàn thành những gì nó đang làm, nó rời khỏi ngăn xếp trong điều kiện chính xác như trước khi nó được gọi! Bằng cách đó, bất kỳ chức năng nào cũng có thể hoạt động với ngăn xếp bỏ qua cách các chức năng khác hoạt động với nó.
Cuối cùng, bạn nên biết rằng có những thuật ngữ khác được sử dụng ngoài kia cho cùng một khái niệm tương tự. Ví dụ, một ngăn xếp có thể được gọi là một đống. Ngoài ra còn có các phiên bản lai của các khái niệm này, ví dụ, hàng đợi hai đầu có thể hoạt động cùng lúc với một ngăn xếp và như một hàng đợi, bởi vì cả hai đầu có thể được truy cập cùng lúc. Ngoài ra, thực tế là cấu trúc dữ liệu được cung cấp cho bạn dưới dạng ngăn xếp hoặc hàng đợi, điều đó không nhất thiết có nghĩa là nó được triển khai như vậy, có những trường hợp trong đó cấu trúc dữ liệu có thể được triển khai như bất kỳ thứ gì và được cung cấp cụ thể cấu trúc dữ liệu đơn giản vì nó có thể được thực hiện để hành xử như vậy. Nói cách khác, nếu bạn cung cấp phương thức đẩy và bật cho bất kỳ cấu trúc dữ liệu nào, chúng sẽ trở thành ngăn xếp một cách kỳ diệu!