4.1.1 Khái niệm
Ngăn xếp là một dạng đặc biệt của danh sách mà việc bổ sung hay loại bỏ một phần tử đều đƣợc thực hiện ở 1 đầu của danh sách gọi là đỉnh. Nói cách khác, ngăn xếp là 1 cấu trúc dữ liệu có 2 thao tác cơ bản: bổ sung (push) và loại bỏ phần tử (pop), trong đó việc loại bỏ sẽ tiến hành loại phần tử mới nhất đƣợc đƣa vào danh sách. Chính vì tính chất này mà ngăn xếp còn đƣợc gọi là kiểu dữ liệu có nguyên tắc LIFO (Last In First Out - Vào sau ra trƣớc).
Các ví dụ về lƣu trữ kiểu LIFO nhƣ của ngăn xếp là: Một chồng sách trên mặt bàn, một chồng đĩa trong hộp, v.v. Khi thêm 1 cuốn sách vào chồng sách, cuốn sách sẽ nằm ở trên đỉnh của chồng sách. Khi lấy sách ra khỏi chồng sách, cuốn nằm trên cùng sẽ đƣợc lấy ra đầu tiền, tức là cuốn mới nhất đựoc đƣa vào sẽ đƣợc lấy ra trƣớc tiên. Tƣơng tự nhƣ vậy với chồng đĩa trong hộp.
Ta xét 1 ví dụ minh họa sự thay đổi của ngăn xếp thông qua các thao tác bổ sung và loại bỏ đỉnh trong ngăn xếp.
Giả sử ta có một stack S lƣu trữ các kí tự. Ban đầu, ngăn xếp ở trạng thái rỗng:
Tiếp theo là các lệnh push(S, B), push(S, C):
Lệnh pop(S) sẽ loại bỏ phần tử mới nhất đƣợc đƣa vào ra khỏi ngăn xếp, đó là C:
Lệnh push(S, D) sẽ đƣa phần tử D vào ngăn xếp, ngay trên phần tử B:
Hai lệnh pop(S) tiếp theo sẽ lần lƣợt loại bỏ các phần tử nằm trên là D và B ra khỏi ngăn xếp: