So Sánh Dữ Liệu Tĩnh và Động Xét kiểu dữ liệu tĩnh Bài tập : Hãy cài đặt hàm bằng ngôn ngữ C/C++ xóa phần tử có giá trị x nếu có trong mảng số nguyên a, kích thước n giả sử giá trị c
Trang 1Giảng viên : Nguyễn Minh Thành Email : thanhnm.itc@itc.edu.vn
Chương 3 (1) : Con Trỏ & Cấu Trúc
Dữ Liệu Động
Trang 5I So Sánh Dữ Liệu Tĩnh và Động
Xét kiểu dữ liệu tĩnh
Bài tập : Hãy cài đặt hàm (bằng ngôn ngữ C/C++) chèn một
phần tử có giá trị x vào một mảng số nguyên a, kích thước n (có thứ tự tăng dần) sao cho mảng a vẫn có thứ tự tăng dần, theo mẫu hàm như sau:
void ChenX(int a[], int &n, int x);
Trang 8I So Sánh Dữ Liệu Tĩnh và Động
Xét kiểu dữ liệu tĩnh
Bài tập : Hãy cài đặt hàm (bằng ngôn ngữ C/C++) xóa phần
tử có giá trị x (nếu có) trong mảng số nguyên a, kích thước n (giả sử giá trị các phần tử trong mảng không trùng nhau), theo mẫu hàm như sau:
void XoaX(int a[], int &n, int x);
Trang 9 Giải quyết vấn đề phức tạp khi chèn/ xóa?
Giải quyết vấn đề giới hạn kích thước vùng nhớ tối đa?
Giải quyết vấn đề vùng nhớ không liên tục?
Giải quyết vấn đề giải phóng vùng nhớ khi không cần dùng
đến?
Trang 10II Con Trỏ
Bộ nhớ gồm 1 tập hợp các ô nhớ được đánh địa chỉ Bộ nhớ được chia làm 2 phần : stack và heap
Stack : để cấp phát bộ nhớ cho các biến tĩnh & động
Trang 11II Con Trỏ
Khai báo dữ liệu tĩnh
<kiểu dữ liệu> tên biến;
Vd: int a; float y;
Tồn tại trong phạm vi khai báo
Được cấp phát vùng nhớ trong vùng dữ liệu
Kích thước cố định
Trang 12II Con Trỏ
Khai báo dữ liệu động (con trỏ)
<kiểu dữ liệu> *tên_biến_động;
Vd: int *a; float *y;
Chứa địa chỉ của một đối tượng dữ liệu
Được cấp phát hoặc giải phóng bộ nhớ tùy thuộc vào người lập trình
Kích thước có thể thay đổi
Trang 13II Con Trỏ
Khai báo dữ liệu động (con trỏ)
Cấp phát bộ nhớ: new int [kích thước]
Giải phóng bộ nhớ: delete biến_động
Trang 14II Con Trỏ
Xét ví dụ sau :
int foo;int *x;
foo = 123;
x = &foo;
Trang 16II Con Trỏ
Lưu ý :
Toán tử ‘*’ có hai chức năng :
Khai báo con trỏ
Truy xuất dữ liệu tại địa chỉ lưu dữ con trỏ
Trang 17II Con Trỏ
Toán tử ‘&’ : dùng để lấy địa chỉ của một biến
Trang 18II Con Trỏ
Một con trỏ phải có giá trị trước khi tham chiếu ngược để truy xuất
dữ liệu
Trang 20II.1 Con Trỏ Với Dữ Liệu Cấu Trúc
Trang 21II.2 Cấp Phát Bộ Nhớ Cho Con Trỏ
Trang 22II.2 Cấp Phát Bộ Nhớ Cho Con Trỏ
Trang 23II.2 Cấp Phát Bộ Nhớ Cho Con Trỏ
Bài tập : trình bày thứ tự cấp phát và cho biết giá trị của các biến
Trang 24III Tổng Quan về Danh Sách Liên Kết
Danh sách liên kết là tập hợp các phần tử kết dính với nhau bằng một “sợi dây liên kết”
Sự liên tiếp của các phần tử không phải liên tiếp về vị trí vật lý.
Trang 25III Tổng Quan về Danh Sách Liên Kết
Để đơn giản trong việc biểu diễn, danh sách liên kết được minh hoạ như sau
Trang 26III Tổng Quan về Danh Sách Liên Kết
Một dãy tuần tự các nút (Node)
Giữa hai nút có con trỏ liên kết
Các nút không cần phải lưu trữ liên tiếp nhau trong bộ nhớ
Có thể mở rộng tuỳ ý (chỉ giới hạn bởi dung lượng bộ nhớ)
Thao tác Chèn/Xóa không cần phải dịch chuyển phần tử
mà chỉ cần thay đổi mối liên kết
Quản lý phần tử đầu tiên bằng con trỏ pHead
Trang 27III Tổng Quan về Danh Sách Liên Kết
Hình minh hoạ
Node
pHead pTail
List
Trang 28III.1 Cấu Tạo Danh Sách Liên Kết
Quản lý toàn bộ danh sách liên kết thông qua con trỏ đầu pHead
pHead không phải là 1 nút, nó chỉ là “con trỏ chỉ đến nút” mà thôi
Ta cũng có thể quản lý danh sách bằng cách sử dụng thêm con trỏ cuối (pTail)
pTail không phải là 1 nút, nó chỉ là “con trỏ chỉ đến nút” mà thôi
Trang 29III.1 Cấu Tạo Danh Sách Liên Kết
Cấu tạo một Node
Trang 30III.3 Một Số Thao Tác Trên DSLK
Thêm một Node
Kết nối lại sợi dây liên kết theo trình tự
List
Trang 31III.3 Một Số Thao Tác Trên DSLK
Xoá một Node
Cần xóa
pHead pTail
List
Trang 32IV Các loại DSLK
Danh sách liên kết đơn : Các phần tử kết nối với nhau theo một hướng “chiều đi tới”
Trang 33IV Các loại DSLK
Danh sách liên kết đôi : Các phần tử kết nối với nhau theo hai hướng “chiều đi tới và và đi lui”
Trang 34IV Các loại DSLK
Danh sách liên kết vòng : Các phần tử kết nối với nhau theo
hướng “chiều đi tới” và phần tử cuối cùng có “đường đi vòng trở lại tới” phần tử đầu danh sách
Trang 36Hỏi Đáp