Trong lập trình, các danh sách là các kiểu dữ liệu trừu tượng rất hữu dụng. Ở một số ngôn ngữ lập trình danh sách có thể là cấu trúc dữ liệu tiền định. Như trong ngôn ngữ lập trình danh sách (LISP), danh sách là cấu trúc dữ liệu chính được cung cấp trong LISP hay trong C++ thì danh sách đã được xây dựng sẵn và được cung cấp trong thư viện chuẩn. Tuy nhiên trong đa số các ngôn ngữ lập trình thì danh sách không phải là cấu trúc dữ liệu tiền định do đó các kỹ thuật để xây dựng cấu trúc danh sách là rất quan trọng. Trong bài này, chúng ta sẽ xem xét một cách chi tiết các danh sách tổng quát và cách xây dựng danh sách dựa trên nền tảng cấu trúc dữ liệu là mảng và danh sách liên kết. Trong công việc hàng ngày, chúng ta sử dụng các danh sách thường xuyên như danh sách học viên của một lớp, danh sách những người đăng kí mua vé máy bay, danh sách những người đang chờ khám bệnh, danh sách các cuộc triển lãm đã được tổ chức vào năm 2004 tại Hà Nội…v.v. Trong mỗi danh sách này đều lưu trữ các thông tin mà chúng ta cần quan tâm và có thể là phải nhớ để phục vụ cho công việc của chúng ta. Xét danh sách học viên của một lớp danh sách này ghi thông tin của tất cả các học viên trong lớp như: họ tên, ngày tháng năm sinh, quê quán, giới tính, chỗ ở hiện nay… nhằm phục vụ trong công tác quản lí học viên; thông tin về mỗi học viên trong lớp là một phần tử của danh sách. Do số học viên trong một lớp là hữu hạn nên danh sách này có số phần tử hữu hạn. Thông tin về các học viên trong danh sách thường được sắp xếp theo một thứ tự nào đó (thường sắp xếp theo thứ tự từ điển về tên và họ) để tiện cho việc quản lý. Khi đó nếu có thêm học viên nào vào lớp hay có học viên chuyển sang lớp khác thì danh sách học viên này phải thay đổi bằng cách bổ sung hay xóa bớt đi thông tin về học viên. Cách giải quyết các bài toán này như thế nào sẽ được trình bầy trong bài này.