BỘ GIÁO DỤC VÀ ĐÀO TẠOTRƯỜNG ĐẠI HỌC CÔNG NGHỆ ĐÔNG ÁBÀI TẬP LỚNHỌC PHẦN: CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬTĐỀ TÀI: QUẢN LÝ CÁC SỐ NGUYÊN DÙNG DSLK ĐÔISinh viên thực hiệnKhóaLớpMã sinh viên.
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC CÔNG NGHỆ ĐÔNG Á
BÀI TẬP LỚN HỌC PHẦN: CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT
ĐỀ TÀI: QUẢN LÝ CÁC SỐ NGUYÊN DÙNG DSLK ĐÔI
Sinh viên thực hiện Khóa Lớp Mã sinh viên Đặng Hoàng Ngọc
Hải
K11 CNTT 2 20200508 Trần Thọ Hoàng K11 CNTT 2 20200698
Trần Đức Hoạt K11 CNTT 2 20200927
Trang 2BỘ GIÁO DỤC VÀ ĐÀO TẠO
BÀI TẬP LỚN HỌC PHẦN: CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT
Nhóm: 08
ĐỀ TÀI: QUẢN LÝ CÁC SỐ NGUYÊN DÙNG DSLK ĐÔI
ST
T
Sinh viên
thực hiện
Khóa Lớp Mã sinh
viên
Điểm bằng số
Điểm bằng chữ
Ký tên SV
1 Đặng Hoàng
Ngọc Hải
K11 CNTT 2
20200508 Hải
2 Trần Thọ
Hoàng
K11 CNTT 2
20200698 Hoàng
3 Trần Đức
Hoạt
K11 CNTT 2
20200927 Hoạt
CÁN BỘ CHẤM 1
(Ký và ghi rõ họ tên)
CÁN BỘ CHẤM 2
(Ký và ghi rõ họ tên)
Bắc Ninh, tháng 01 năm 2022
Trang 3MỤC LỤC:
I Danh sách liên kết đôi 5
II Cấu trúc dữ liệu của danh sách liên kết đôi 5
- Cấu trúc của một Node 4
- Cấu trúc danh sách liên kết đôi 6
III Các thao tác trong danh sách liên kết đôi 6
IV Bài toán 8
Trang 4DANH MỤC BẢNG BIỂU, HÌNH VẼ:
Hình 1.1 Ví dụ về danh sách liên kết đôi 5
Hình 2.1 Cấu trúc của một node 5
Hình 2.2 Xây dựng danh sách liên kết kép 6
Hình 2.3 Cấu trúc danh sách liên kết đôi 6
Hình 3.1 Chèn vào đầu List 7
Hình 3.2 Chèn vào cuối List 8
Hình 3.3 Xuất thông tin ra màn hình 8
Hình 4.1 Sơ đồ nhập vào chuỗi a 9
Hình 4.2 Nhập số a 9
Hình 4.3 Khởi tạo 10
Hình 4.4 Kết quả câu 1 11
Hình 4.5 Sơ đồ câu 2 12
Hình 4.6 Nhập vào số đếm k, số đó là chẵn hay lẻ 12
Hình 4.7 Kết quả câu 2 13
Hình 4.8 Sơ đồ câu 3 13
Hình 4.9 Tính trung bình cộng các số lẻ dương 14
Hình 4.10 Kết quả câu 3 14
Hình 4.11 Tạo Menu 15
Hình 4.12 Tạo Menu 15
Trang 5I Danh sách liên kết đôi
- Danh sách liên kết đôi (Doubly linked list) là danh sách liên kết mà mỗi phần tử
có hai liên kết đến phần tử liền trước và liền sau nó
- Khi duyệt các nút sẽ thực hiện theo hai chiều về trước và về sau thay vì thực hiền duyệt một chiều như danh sách liên kết đơn
Hình 1.1 Ví dụ về danh sách liên kết đôi
II Cấu trúc dữ liệu của danh sách liên kết đôi
- Cấu trúc của một Node:
Mô Ut node trong danh sách liên kết kép đươꄣc cấu thành tư뀀 ba thành phần là dư뀃 liê Uu và phần kết nối tới node kế tiếp và node trước nó
Hình 2.1 Cấu trúc của một node Trong đó:
o Data: Là giá trị của Node
o Prev: Là con trỏ tới node trước
o Next: Là con trỏ tới node kế tiếp
Xây dựng danh sách liên kết kép bởi liên kết các node với nhau
Trang 6Hình 2.2 Xây dựng danh sách liên kết kép
- Cấu trúc danh sách liên kết đôi:
Hình 2.3 Cấu trúc danh sách liên kết đôi
Ta có:
o pHead là Node đầu tiên trong DSLK đôi, nó luôn luôn quản lý Node đầu
o pTail là Node cuối cùng trong DSLK đôi, nó luôn luôn quản lý Node cuối
o Node B có hai con trỏ, trỏ đến A và C, tương tự các Node khác cũng vậy
III Các thao tác trong danh sách liên kết đôi
Trong danh sách liên kết đôi cũng có các thao tác tương tự như danh sách liên kết đơn, các thao tác này đươꄣc sử dụng rất nhiều khi làm việc với DSLK
Tạo Node mới trong DSLK đôi
Chèn Node trong DSLK đôi
Xóa Node trong DSLK đôi
Duyệt DSLK đôi
Tìm kiếm và sắp xếp trong DSLK đôi
Chèn Node trong danh sách liên kết đôi có hai trường hơꄣp là: chèn vào đầu, chèn vào cuối
Xóa Node trong danh sách liên kết đôi cũng có hai trường hơꄣp là: xóa
ở đầu và xóa ở cuối
Việc chèn dư뀃 liệu vào đầu trong danh sách liên kết kép:
Trang 7Hình 3.1 Chèn vào đầu List
• Nếu head = NULL, ta sẽ cho cả head và tail = newNode
• Nếu head != NULL, ta sẽ cập nhật lại head mới là newNode Ta cần tạo liên kết giư뀃a head hiện tại với newNode trước khi cho newNode làm head mới Việc chèn dư뀃 liệu vào cuối trong danh sách liên kết kép:
Hình 3.2 Chèn vào cuối List
• Nếu head = NULL, newNode sẽ là head và tail luôn
• Nếu head != NULL, cập nhật lại tail mới là newNode Ta cần tạo liên kết thằng tail hiện tại với newNode trước khi để newNode làm tail mới Duyệt danh sách liên kết:
Hình 3.3 Xuất thông tin ra màn hình
Trang 8• Ta sẽ duyệt bắt đầu tư뀀 Node head cho tới trước khi gặp Node NULL bằng cách dùng con trỏ next
IV Bài toán
Cho một danh sách lưu trư뀃 các số nguyên Viết chương trình tạo menu thực hiện các chức năng 1,2,3
1 Khởi tạo danh sách, quá trình nhập sẽ dư뀀ng lại khi nhấn #
2 Nhập vào một số k, đếm các số = k, thông báo số lươꄣng số đếm đươꄣc là chẵn hay lẻ?
3 Tính trung bình cộng các số dương trong danh sách
- Yêu cầu 1:
Sơ đồ:
Hình 4.1 Sơ đồ nhập vào chuỗi a Code:
Hình 4.2 Nhập số a
Trang 9Hình 4.3 Khởi tạo Kết quả:
Trang 10Hình 4.4 Kết quả câu 1
- Yêu cầu 2:
Sơ đồ:
Trang 11Hình 4.5 Sơ đồ câu 2 Code:
Hình 4.6 Nhập vào số đếm k, số đó là chẵn hay lẻ Kết quả:
Trang 12Hình 4.7 Kết quả câu 2
- Yêu cầu 3:
Sơ đồ:
Hình 4.8 Sơ đồ câu 3 Code:
Trang 13Hình 4.9 Tính trung bình cộng các số lẻ dương Kết quả:
Hình 4.10 Kết quả câu 3
- Tạo Menu:
Trang 14Hình 4.11 Tạo Menu
Hình 4.12 Tạo Menu