Mỗi phần tử trong danh sách là một ô nhớ, mỗi ô nhớ là một cấu trúc ít nhất là hai ngăn, một ngăn chứa dữ liệu của phần tử đó, một ngăn là con trỏ chứa địa chỉ của ô nhớ đứng kế sau trong danh sách, ta có thể hình dung cơ chế này qua ví dụ sau:
Giả sử 1 nhóm có 4 bạn: Đông, Tây, Nam, Bắc có địa chỉ nhà ở lần lượt là d,t,n,b. Giả sử: Đông có địa chỉ của Nam, Tây không có địa chỉ của bạn nào, Bắc giữ địa chỉ của Đông, Nam có địa chỉ của Tây, điều này được mô tả qua Hình 2.1
như sau
Hình 2.1
Như vậy, nếu ta xét thứ tự các phần tử bằng cơ chế lưu địa chỉ này thì ta có một danh sách: Bắc, Đông, Nam, Tây. Hơn nữa để có thể truy cập đến các phần tử trong danh sách này thì chỉ cần giữ địa chỉ của Bắc (điah chỉ của ô nhớ chứa phần tử đầu tiên trong danh sách).
* Mô tả cài đặt
Trong cài đặt, mỗi phần tử trong danh sách được cài đặt như một nút có hai Bắc d Đông n Nam t Tây nil
trường:
+ Trường info chứa giá trị của các phần tử trong danh sách;
+ Trường link là một con trỏ giữ địa chỉ của ô kế tiếp trong danh sách: - Mỗi nút có dạng như sau:
- Hình ảnh danh sách có dạng như sau:
Nút cuối cùng trong danh sách không có nút đứng sau, lên Trường link của
phần tử cuối trong danh sách, trỏ đến một giá trị đặc biệt là Nil (trỏ tới đất – không trỏ tới đâu). Cấu trúc danh sách như vậy gọi là danh sách cài đặt bằng con trỏ hay
danh sách liên kết đơn hoặc danh sách móc nối đơn hay ngắn gọn gọi là danh sách liên kết.
+ Để truy nhập vào d/s ta phải truy nhập tuần tự đến vị trí mong muốn, xuất phát từ phần tử đầu tiên, do đó để quản lý danh sách ta chỉ cần quản lý địa chỉ ô nhớ chứa phần tử đầu tiên của danh sách, tức là cần một con trỏ trỏ đến phần tử đầu tiên trong danh sách - giả sử con trỏ L.
+ Danh sách L rỗng khi: L=nil
* Dạng cài đặt
(Nói đến danh sách móc nối (Liên quan đến địa chỉ) ta phải nghĩ ngay đến biến trỏ, vậy biến trỏ là gì ?
Nói thêm về con trỏ trong Pascal:
- Chiếm 4 byte, là đối tượng dùng để lưu trữ địa chỉ của đối tượng khác - Khai báo:
Var <Tên biến con trỏ>: ^ <Kiểu con trỏ>;
Ví dụ: Var P: ^ integer ;
( Con trỏ P có kiểu nguyên, Biến động P^) INFO LINK
Là con trỏ, trỏ đến nút đứng kế sau trong danh sách (nghĩa là nó chứa địa chỉ của ô nhớ nút đứng sau nó) chứa giá trị phần tử của nút, giả sử có kiểu dữ liệu là Item
a1 a2 a
n+1 nil L
a3 a
- Định nghĩa
Type <Tên kiểu con trỏ> = ^ <Kiểu T>;
Ví dụ: Type p = ^ Hs;
- Truy nhập đến đối tương qua con trỏ, sử dụng lệnh
<Tên biến con trỏ>^
- Một số hàm/thủ tục đối với con trỏ:
+ Thủ tục New(p): Xin cấp phát một vùng nhớ có kích thước bằng kích thước của kiểu tương ứng với kiểu của con trỏ p:
*Nếu cấp phát được thì địa chỉ vùng nhớ đó sẽ được gán cho con trỏ p *Nếu không cấp phát được thì P = nil
+ Thủ tục Dispose(p): Giải phóng (thu hồi) vùng nhớ do con trỏ p trỏ tới, thường được sử dụng khi muốn loại bỏ 1 phần tử ra khỏi danh sách
-Với một nút được trỏ bới con trỏ p thì :
+ p^ . infor : Cho giá trị là trường infor của nút + p^ . Link: Cho địa chỉ của nút tiếp sau P
Dạng cài đặt của danh sách: Type PList = ^ Nut;
Nut = Record Infor:Iem; Link : Plist; End;
Var L: Plis
* Cài đặt các phép toán cơ bản với cấu trúc danh sách liên kết đơn 1- Tạo danh sách rỗng
procedure MakeNullList(L: Plist) Begin
L:=nil; End;