Sở dĩ tôi đưa lại vấn đề này vì danh sách liên kết là bài đáng được tranh luận để rút ra cái đúng nhất. Nhiều người trong lớp chúng ta không phải là học sinh cũ của HV nên có cách lưu trữ và tiếp cận với vấn đề này khác nhau. Về đây học kiến thức của HV là học những gì tiên tiến nhất, hiện tại chúng ta đang tự mâu thuẫn là không biết tiếp cận kiểu gì, khi mà sách và lời giảng trên lớp của thầy có nhiều chỗ được trình bày và triển khai theo 2 hướng khác nhau. Vấn đề này, lớp mình cũng đã tranh luận nhiều chưa đến hồi phân giải. Bởi theo nguyên tắc, nếu phần này chưa thống nhất, thì tất cả những bài tập về sau nếu dữ liệu ra kiểu này thì mỗi người sẽ hiểu một phách. Mà cách đánh giá của các thầy chỉ có một loại đáp án. Học theo đáp án của thầy thì cần làm rõ như thế nào?
Tham gia làm rõ phần này, đề nghị các đ/c chuyên viên có bình luận để tìm ra xem những gì ta đang quan niệm và những gì là bài giảng để tìm ra và làm theo nội dung chuẩn theo đáp án của đáp án chấm thi hơn.
Để chỉ ra những điểm không thống nhất giữa sách của thầy viết và bài giảng của thầy, tôi chịu khó gõ lại nội dung sách lên đây, vì tôi biết chúng ta tranh luận ở lớp bao phen rồi vẫn bất phân thắng bại, và cuối cùng nếu vẫn không biết theo cái nào, thì sẽ viết biên bản gửi lên khoa, đề nghị xem cách nào là đúng để chúng ta học cho chuẩn với đáp án chấm thi.
Tôi gõ chính xác từng chữ, kể cả những chữ mà các đồng chí bảo là sai chính tả. Những chữ này sẽ được tô màu. Việc gõ này phục vụ khi tranh luận, các đồng chí chỉ việc copy, đỡ phải gõ lại.
Phần nền màu hồng, để che đi chống dàn trải bài viết, khi nào cần đọc các đ/c nháy chuột vào đó.
Nội dung sách "Cấu trúc dữ liệu và giải thuật" của Học viện KTQS, tài liệu ôn thi Cao học ngành CNTT, sản xuất năm 2005, Chương 3, trang 19.
Danh sách liên kết
I. Danh sách liên kết đơn
1. Định nghĩa:
Mỗi nút của danh sách được lưu trữ trong một phần tử nhớ - gọi là nút (nude) của danh sách. Mỗi nút chiếm một số ô nhớ nhất định. Trong mỗi nút, ngoài các ô nhớ dành để lưu trữ thông tin của phần tử tương ứng, còn một số ô nhớ chứa địa chỉ của phần tử đứng ngay sau nó trong danh sách. Cách tổ chức dữ liệu theo kiểu móc nối các phần tử trong danh sách như vậy giải thích cho cách đặt tên kiểu cấu trúc dữ liệu. Có thể hình dung một cách đại khái một nút như sau:
Trường Data chứa thông tin phần tử, trường Next chứa địa chỉ của nút tiếp theo. Trường Next của nút cuối cùng chứa địa chỉ đặc biệt, dùng để đánh dấu kết thúc danh sách, ký hiệu Nil.
Ví dụ, định nghĩa danh sách dữ liệu về một nhân sự:
- Ví dụ, định nghĩa danh sách dữ liệu về một nhân sự:
LINK
| = ^Nhan_su
|
|
|
|
Nhan_su
| = Record
|
|
|
|
|
| Data:
| Record
|
|
|
|
|
| Ho_ten: String [24]
|
|
|
|
| Tuoi: Byte;
|
|
|
| End;
|
|
|
| Next:
| LINK;
|
|
| End;
|
|
|
|
Một phần tử trong danh sách đơn là một biến động sẽ được yêu cầu cấp phát khi cần. Và danh sách đơn chính là sự liên kết các biến động này với nhau. Từ cách tổ chức như vậy, dễ thấy được, nếu có địa chỉ của phần tử đầu tiên trong danh sách đơn thì có thể dựa vào thông tin Next của nó để truy xuất đến phần tử thứ 2 trong xâu, và lại dựa vào thông tin Next của phần tử thứ 2 để truy xuất đến phần tử thứ 3... Nghĩa là để quản lý một xâu đơn, chỉ cần biết địa chỉ phần tử đầu xâu. Thường một con trỏ Head sẽ được dùng để lưu trữ phần tử đầu xâu, ta gọi Head là đầu xâu. Ta có thể khai báo:
Head: LINK;
Nếu dùng mũi tên để chỉ mối liên kết thông thường qua trường Next, ta có thể hình dung một danh sách móc nối đơn như sau:
[You must be registered and logged in to see this image.]Ký hiệu Ø chỉ mối nối không. Nếu danh sách rỗng thì đặt Head = Nil.