Phần I : GIỚI THIỆUCấu trúc dữ liệu là một môn học quan trọng trong lĩnh vực CNTT .Nó là cơ sở vững chắc để ta giải quyết các bài toán trong quá trình học tập cũngnhư trong cuộc sống .Mộ
Trang 1Phần I : GIỚI THIỆU
Cấu trúc dữ liệu là một môn học quan trọng trong lĩnh vực CNTT Nó là
cơ sở vững chắc để ta giải quyết các bài toán trong quá trình học tập cũngnhư trong cuộc sống Một điều quan trọng nữa là nó cung cấp cho chúng tanhững hiểu biết về các giải thuật tác động lên dữ liệu cũng như cách tổ chức
dữ liệu để giải quyết các bài toán sao cho dễ nhất , tối ưu nhất
Sau khi học môn “Cấu trúc dữ liệu ” và tiếp đến là môn “Phân tích vàthiết kế giải thuật”, chúng em được giao thực hiện đồ án môn học “Cấu trúc
dữ liệu ”để giải quyết một số bài toán liên quan đến môn học, cụ thể là bàitoán số 43 :
“ Các số từ 1 đến 2008 được xếp theo thứ tự tăng dần trên một đường tròntheo chiều kim đồng hồ Bắt đầu từ số 1 , chuyển động theo chiều kim đồng
hồ , cứ bước qua một số lại xóa đi một số Công việc đó tiếp diễn cho đếnkhi trên vòng tròn còn lại đúng 1 số Lặp lai chương trình và in ra số đó “Đây là đồ án đầu tiên của chúng em nên không thể tránh khỏi sai sót , rấtmong sự giúp đỡ tận tình của các thầy cô trong khoa Em cũng xin cảm ơnthầy
LÊ QUÝ LỘC đã hướng dẫn và giúp chúng em hoàn thành đồ án này.
Trang 2Văn Tiến Sỹ-Nguyễn Minh Chí
Lớp 06T4 - Khoa Công Nghệ Thông Tin
Đại Học Bách Khoa Đà Nẵng
Phần II : CẤU TRÚC DỮ LIỆU
Trang 3+Chương trình dùng danh sách liên kết, để liên các phần tử được khởi tạo thành danh sách liên kết theo vòng tròn.
+ Dùng trường Next của danh sách liên kết để tìm phần tử cần xóa đầu tiên + Biến truyền vào hàm là tham chiếu, để thay đổi sau khi nhập danh sách vàxóa danh sách liên kết
Trang 4
Phần IV : CHƯƠNG TRÌNH ( viết bằng C++ )
Trang 5void create(list &ds);
void setdata(list &ds);
Trang 8(*p).next = (*p1).next; // gan next cua p cho next p1 de xoa p1
cout<<(*p1).data<<" ";// xuat phan tu se xoa
Trang 9Phần V : KẾT QUẢ DỮ LIỆU
Chương trình được chạy với giá trị của n là 2008 lần lượt với tr = 1 và tr = 1000
Chương trình yêu cầu người dùng nhập giá trị của n , rồI in ra các số đã bị xóa CuốI cùng yêu cầu nhấn Enter để hiện kết quả
Kết quả như sau :
Trang 10Với n = 2008 và tr = 1
Trang 14Với n= 2008 tr= 1000
Trang 17Phần IV: THUẬT TOÁN
Vào : + Nhập n
+ Khởi tạo danh sách liên kết gồm các phần tử từ 1 đến 2008
+ Duyệt và xóa : Sử dụng tham chiếu P , P1
SVTH: Văn Tiến Sỹ-Nguyễn Minh Chí 17
Bắt đầu
Xóa các phần tử trong sách liên kết
Kiểm tra n Nhập n
Nhập tr
Kiểm tra tr
Nhập danh sách liên kết
In ra giá trị còn lại
Trang 18
SAI
ĐÚNG
Trang 19HÀM SETDATA
Trang 21n-2
n-3
Trang 22n-2
n-3
Trang 232 P1=(*P).next Delete []P1
P =tr
1 3
P= (*P).next (*P).next=(*P1).next
Nhảy qua P1 (gán (*P1).next cho (*P).next) và xóa P1
Cho đến khi P!=(*P)next Nghĩa là còn một phần tử
Xuất phần tử còn lại
4