Bài giảng cấu trúc dữ liệu và giải thuật chương 3 GV nguyễn minh thành

36 292 1
Bài giảng cấu trúc dữ liệu và giải thuật  chương 3   GV  nguyễn minh thành

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

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

Ngày đăng: 03/12/2015, 06:41

Tài liệu cùng người dùng

Tài liệu liên quan