1.3.2 Danh sách (List)Điểm Điểm
chính
Danh sách được đặc trưng bởi các con trỏ được liên kết
Các thao tác trên danh sách được điểu khiển bởi sự thay đổi giá trị của các con trỏ.
Danh sách là một tập của các dữ liệu giống nhau hoặc tương tự nhau được đặt một cách logic trên một hàng (tuyến tính35); cấu trúc của nó gần giống 1 mảng. Điểm khác biệt là ở chỗ, trong khi các phần tử của mảng được đặt kề nhau một cách vật lý, các phần tử của danh sách có thể đặt ở những vị trí độc lập và có các con trỏ liên kết giữa chúng. Vì vậy, mảng và danh sách chỉ khác biệt ở điểm: mảng nói tới một danh sách tuyến tính, và danh sách nói tới một danh sách móc nối (do các phần tử được móc nối bởi con trỏ).
Tổng quát, thuật ngữ “danh sách” nói tới “danh sách móc nối”. Do đó chúng ta gọi “danh sách móc nối” đơn giản là “danh sách”
Cấu trúc của danh sách
Một danh sách là một cấu trúc dữ liệu mà các phần tử được kết nối bởi các con trỏ. Một con trỏ là thông tin xác định vị trí lưu trữ (địa chỉ) của phần tử kế tiếp. Mỗi phần tử được kết nối bởi 1 con trỏ, nên các phần tử không cần được đặt theo thứ tự.
Một danh sách có thể có cấu trúc đa dạng. Hình vẽ sau được gọi là một danh sách 1 chiều.36
Con trỏ trỏ tới phần tử đầu tiên được lưu trữ trong một biến gọi là gốc. Phần tử cuối cùng của danh sách không có phần tử nào sau nó, nên con trỏ của nó chứa ký hiệu (X) xác định rằng đó là phần tử cuối cùng của danh sách. Trong vài ngôn ngữ lập trình, kí hiệu này có thể được lưu trữ tự động, một số khác, có thể là bất cứ ký hiệu gì. Điều quan trọng là nó để gán cho một giá trị không tồn tại như dữ liệu
35 (Gợi ý) Thuật ngữ “tuyến tính” chỉ tới 1 tập dữ liệu nằm liền kề nhau. 1 mảng là tuyến tính khi các phần tử được đặt trong vùng liên tục. Nói cách khác, một danh sách là 1 cấu trúc mà các phần tử được liên kết bởi con trỏ, chúng có thể trong vùng liên tục. Nói cách khác, một danh sách là 1 cấu trúc mà các phần tử được liên kết bởi con trỏ, chúng có thể không nằm trong vùng liên tục.