Cài đặt danh sách liên kết đơn bằng C++

Sunday, April 01, 2018
Edit this post


Trái ngược với danh sách tuyến tính sử dụng mảng một chiều, danh sách liên kết đơn sử dụng con trỏ và địa chỉ xác định các phần tử trong danh sách. Kể từ danh sách liên kết đơn trở đi, việc hiểu và sử dụng thành thạo con trỏ gần như là điều bắt buộc đối với môn Cấu trúc dữ liệu (CTDL).

Ưu điểm của danh sách liên kết đơn đó là bộ nhớ được cấp phát động tùy theo số lượng phần tử được chèn vào danh sách.

Nhược điểm của nó là chúng ta không thể truy xuất phần tử theo vị trí như mảng một chiều mà buộc phải duyệt qua tất cả các node trong danh sách để tìm phần tử cần xử lý, và chỉ có 1 chiều di chuyển từ node đầu tới node cuối chứ không thể theo chiều ngược lại. Ngoài ra, mỗi nút của danh sách phải chứa thêm con trỏ next nên tốn thêm bộ nhớ.

Nói thêm về mảng một chiều thực nhất cũng là các ô nhớ được cấp phát trước, tuy nhiên, các ô nhớ này lại nằm liền kề nhau, tương đương với địa chỉ của node và node sau chỉ chênh nhau 1 đơn vị * sizeof(type) nên chúng ta có thể dễ dàng lấy ra một phần tử bất kỳ chỉ dựa vào vị trí của nó. Còn đối với danh sách liên kết, các ô nhớ nằm rải rác với các địa chỉ khác nhau, và cách duy nhất để kết nối chúng với nhau là dựa vào con trỏ.

Trong danh sách liên kết đơn, phần tử trước được kết nối với phần tử sau bởi một con trỏ duy nhất. Với danh sách liên kết đôi, mỗi node sẽ có 2 con trỏ để liên kết tới phần tử trước và sau nó.

Bây giờ, chúng ta sẽ thử cài đặt một cấu trúc liên kết đơn đơn giản cùng các hàm xử lý cơ bản cho nó. Cấu trúc mỗi node của chúng ta sẽ rất đơn giản, bao gồm một biến id chứa giá trị kiểu số nguyên và một con trỏ next để chứa địa chỉ của node kế tiếp.

Các bạn có thể tải về mã nguồn đầy đủ của chương trình demo từ link bên dưới. Demo được viết bằng ngôn ngữ C++, sử dụng IDE Dev-C++ 5.11.


Output của chương trình sẽ có dạng như sau:

 26 ->  NULL
 26 -> -94 ->  NULL
 26 -> -94 -> -65 ->  NULL
 26 -> -94 -> -65 ->  -7 ->  NULL
 26 -> -94 -> -65 ->  -7 ->  29 ->  NULL
-55 ->  26 -> -94 -> -65 ->  -7 ->  29 ->  NULL
-77 -> -55 ->  26 -> -94 -> -65 ->  -7 ->  29 ->  NULL
-73 -> -77 -> -55 ->  26 -> -94 -> -65 ->  -7 ->  29 ->  NULL
 33 -> -73 -> -77 -> -55 ->  26 -> -94 -> -65 ->  -7 ->  29 ->  NULL
  2 ->  33 -> -73 -> -77 -> -55 ->  26 -> -94 -> -65 ->  -7 ->  29 ->  NULL

Linked list sorted ascending:
-94 -> -77 -> -73 -> -65 -> -55 ->  -7 ->   2 ->  26 ->  29 ->  33 ->  NULL

Linked list sorted descending:
 33 ->  29 ->  26 ->   2 ->  -7 -> -55 -> -65 -> -73 -> -77 -> -94 ->  NULL

Chú thích:

- Chương trình sẽ sinh ngẫu nhiên 10 phần tử để chèn vào danh sách.
- 5 phần tử đầu tiên sẽ được chèn vào cuối danh sách nhờ hàm insert_last().
- 5 phần tử tiếp theo sẽ được chèn vào đầu danh sách nhờ hàm insert_first().
- Sau đó, sắp xếp danh sách tăng dần dựa trên thuật toán Bubble Sort.
- Và sắp sếp giảm dần cũng dựa trên Bubble Sort.


.
Xin vui lòng chờ đợi
Dữ liệu bài viết đang được tải về

💻Nhận dạy online 1 kèm 1 Automation Test từ cơ bản tới nâng cao (From Zero to Hero) 😁😁😁
Lộ trình gồm 3 phần:
1) Kỹ thuật lập trình và tư duy lập trình cơ bản
2) Nhập môn kiểm thử (Manual Test)
3) Kiểm thử tự động (Automation Test) + Chuẩn bị cho phỏng vấn
* Lộ trình chi tiết: Xem tại đây

🎓Đối tượng người học:
- Những bạn bị mất gốc căn bản môn lập trình.
- Những bạn muốn theo con đường kiểm thử (testing), đặc biệt là kiểm thử tự động (Automation Test).

🦘Người giảng dạy:
- Mình sẽ là người trực tiếp hướng dẫn.
- Nếu là các vấn đề ngoài chuyên môn hoặc sở trường, mình sẽ nhờ các anh chị em khác cũng làm trong ngành.

🤓Giới thiệu:
- Mình đã có hơn 10 năm kinh nghiệm làm IT ở cả trong và ngoài nước. Trong đó 3 năm đầu là làm lập trình viên Java, sau đó bén duyên với mảng Automation Test và theo nghề tới tận bây giờ. Mình được đào tạo chính quy về IT từ một trường Đại học danh tiếng ở TP.HCM (hệ kỹ sư 4 năm rưỡi), có chứng chỉ ISTQB, có thể giao tiếp tốt bằng tiếng Anh và có kinh nghiệm làm việc thực tế ở cả 2 mảng Outsource và Product. Title chính thức của mình là QA Automation Engineer, tuy nhiên, mình vẫn làm những dự án cá nhân chuyên về lập trình ứng dụng như Học Tiếng Anh StreamlineSách Nhạc. Mình là người có thái độ làm việc chuyên nghiệp, chăm chỉ và luôn nhiệt tình trong công việc.

💵Chi phí và hình thức thanh toán:
- Các bạn vui lòng liên hệ qua email songtoigianvn@gmail.com (email, chat, hoặc call) để book nội dung và khung giờ học (từ 8h tối trở đi).
- Mức phí: 150.000đ/buổi, mỗi buổi 60 phút.
- Lộ trình From Zero to Hero: 4.350.000đ (29 buổi).
- Bạn có thể học riêng và đóng tiền theo từng phần nếu muốn.
- Có thể học trước 1-2 buổi trước khi quyết định đi full lộ trình hoặc từng phần.
- Thanh toán qua Momo, chuyển khoản v.v...
BÌNH LUẬN
© Copyright by CUỘC SỐNG TỐI GIẢN
Loading...