DANH SÁCH THÀNH VIÊNST... Danh sách liên kết đơn...1II... I.Danh sách liên kết đơnDanh sách liên kết đơn Single linked list là một tập hợp các Node được phân bốđộng, được sắp xếp theo cá
Trang 1HỌC VIỆN NGÂN HÀNG KHOA HỆ THỐNG THÔNG TIN QUẢN LÝ
-BÁO CÁO BÀI TẬP LỚN CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT
SẮP XẾP DANH SÁCH LIÊN KẾT ĐƠN
Giảng viên hướng dẫn: ThS Giang Thị Thu Huyền
Nhóm sinh viên thực hiện
Hoàng Thị Tú Quyên 24A4041434
Phan Thị Hải Yến
Trần Yến Vy
Nguyễn Thị Thảo Trang
Trang 2
DANH SÁCH THÀNH VIÊN ST
Mức độ
1 Phan Thị Hải Yến (nhóm
trưởng)
2 24A4041434 Hoàng Thị Tú Quyên
4 Nguyễn Thị Thảo Trang
Trang 3MỤC LỤC
I Danh sách liên kết đơn 1
II Sắp xếp danh sách liên kết đơn 1
1 Giới thiệu 1
2 Ý tưởng 2
3 Thuật toán 2
4 Cài đặt thuật toán 3
5 Minh họa thuật toán 4
6 Độ phức tạp của thuật toán 5
TÀI LIỆU THAM KHẢO 6
Trang 4DANH MỤC HÌNH ẢNH
Hình 1: Cấu trúc của 1 node 1
Hình 2: Minh họa 1 danh sách liên kết đơn 1
Hình 3: Minh họa thay đổi Data ở Node 2
Hình 4: Minh họa thuật toán sắp xếp danh sách liên kết đơn với Interchange Sort 4
Trang 5I Danh sách liên kết đơn
Danh sách liên kết đơn (Single linked list) là một tập hợp các Node được phân bố
động, được sắp xếp theo cách sao cho mỗi Node chứa một giá trị (Data) và một con trỏ
(Next) Con trỏ sẽ trỏ đến phần tử kế tiếp của danh sách liên kết đó Nếu con trỏ mà trỏ
tới NULL, nghĩa là đó là phần tử cuối cùng của linked list
Hình 1: Cấu trúc của 1 node
Hình 2: Minh họa 1 danh sách liên kết đơn
1 Giới thiệu
- Một trong những cách để sắp xếp danh sách liên kết đơn đó là hoán vị nội dung các phần tử trong danh sách (thao tác trên vùng Info)-chỉ so sánh các giá trị Data rồi sắp xếp, các node vẫn giữ nguyên không dịch chuyển
- Với phương án này có thể chọn 1 trong những thuật toán sắp xếp đã biết để cài đặt lại trên xâu như thực hiện trên mảng.-Ở đây dùng thuật toán đổi chỗ trực tiếp-Interchange sort
Trang 62 Ý tưởng
Xuất phát từ node đầu tiên của danh sách liên kết, tìm tất cả các nghịch thế chứa node này xét với phần data, triệt tiêu chúng bằng cách đổi chỗ 2 phần tử data trong cặp nghịch thế
Lặp lại xử lý trên với node kế trong danh sách
3 Thuật toán
B1: Khởi tạo nút i, j để duyệt danh sách: Node *i, *j;
i = l.pHead; // gán i là địa chỉ nút đầu tiên trong dãy
j=i->pNext; // j là địa chỉ của nút tiếp theo
B2: Duyệt từ đầu đến cuối danh sách: Tìm các nghịch thế với data ở i
B3: Trong khi j khác NULL thì thực hiện: Xét cặp data ở địa chỉ i và j
Nếu data ở i > data ở j (i->data.n>j->data.n) // thì đổi chỗ
swapData(i->data, j->data);
Sau mỗi lần duyệt tăng j lên 1 đơn vị để tiếp tục duyệt
B4: Tăng i lên 1 đơn vị và tiếp tục duyệt
Nếu i còn khác l.pTail - địa chỉ của node cuối cùng trong danh sách thì lặp lại bước
2, ngược lại-> dừng
2 Hình 3: Minh họa thay đổi Data ở Node
Trang 74 Cài đặt thuật toán
void swapData(int &a,int &b)
{
int tg=a.n;
a.n=b.n;
b.n=tg;
}
void InterchangeSort_Data(List &l)
{
node *i,*j;
for(Node *i=l.pHead; i!=l.pTail; i=i->pNext)
for(Node *j=i->pNext; j!=NULL; j=j->pNext) if(i->data.n>j->data.n)
swapData(i->data,j->data);
}
Trang 85 Minh họa thuật toán
VD: 12 2 8 1 6 4
4
Trang 9Hình 4: Minh họa thuật toán sắp xếp danh sách liên kết đơn với Interchange Sort
6 Độ phức tạp của thuật toán
Trường hợp Số lần so sánh Số lần hoán vị
Trang 10Xấu nhất n*(n-1)/2 n*(n-1)/2
6
Trang 11TÀI LIỆU THAM KHẢO
1.Slide bài giảng “Cấu trúc dữ liệu và giải thuật”, khoa Hệ thống thông tin quản
lý, Học viện Ngân hàng
https://viettruong92.blogspot.com/2011/12/ham-sap-xep-tang-dan-trong-danh-sach.html