Bài giảng cấu trúc dữ liệu và giải thuật chương 3 danh sách liên kết

66 727 0
Bài giảng cấu trúc dữ liệu và giải thuật chương 3 danh sách liên kết

Đ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 3.1. Danh sách liên kết đơn Trần Minh Thái Email: minhthai@itc.edu.vn Website: www.minhthai.edu.vn Cập nhật: ngày 20 tháng 10 năm 2012 Mục tiêu  Nắm vững khái niệm về kiểu dữ liệu tĩnh và động  Nắm vững cách tổ chức dữ liệu động bằng danh sách liên kết và minh họa được các thao tác xử lý trên danh sách liên kết đơn  Cài đặt minh họa được các thao tác của danh sách đơn bằng ngôn ngữ C/ C++ 2 Vấn đề kiểu dữ liệu tĩnh 3 1 2 3 4 5 6 7 8 10 5 7 3 9 2 15 1 ? Làm sao để chèn thêm số 6 vào vị trí 5 của mảng 6 Vấn đề kiểu dữ liệu tĩnh 4 1 2 3 4 5 6 7 8 9 10 5 7 3 9 2 15 1 6 Bổ sung thêm Giả sử cần thêm tiếp 1 phần tử ? 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 vị trí vt trong mảng số nguyên a, kích thước n, theo mẫu hàm như sau: void ChenX(int a[], int &n, int x, int vt); 5 Vấn đề kiểu dữ liệu tĩnh ? Làm sao để xóa phần tử 9 6 1 2 3 4 5 6 7 8 10 5 7 3 9 2 15 1 Vấn đề kiểu dữ liệu tĩnh 7 1 2 3 4 5 6 7 8 10 5 7 3 9 2 15 1 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); 8 Vấn đề kiểu dữ liệu tĩnh 9 Độ phức tạp của chèn/ xóa trên mảng 1 chiều là O(n) i Vấn đề kiểu dữ liệu tĩnh  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? 10 DÙNG CẤU TRÚC DỮ LIỆU ĐỘNG [...]... dữ liệu> Data; struct tNODE *pNext; }; typedef struct tNODE NODE; struct tList { NODE *pHead, *pTail; }; typedef struct32 tList LIST; Các thao tác trên DSLK đơn  Tạo lập danh sách rỗng  Kiểm tra danh sách rỗng  Thêm 1 nút vào danh sách  Duyệt danh sách  Xóa 1 nút  Tìm 1 phần tử  Sắp xếp danh sách Cấu trúc tổng quát chương trình 1 Khai báo thư viện hàm 2 Khai báo cấu trúc danh sách liên kết 3. .. Tạo lập danh sách rỗng Nhập dữ liệu vào danh sách Các thao tác xử lý trên danh sách Hủy danh sách } 5 Cài đặt các hàm con Tạo lập danh sách rỗng pHead và pTail chưa xác định List ? ? pHead pTail Trước khi tạo lập void CreateEmptyList(LIST &list) { list.pHead = list.pTail = NULL; } pHead và pTail trỏ vào NULL (rỗng) List pHead pTail Sau khi tạo lập Kiểm tra danh sách rỗng List pHead pTail Danh sách rỗng... kết nối với nhau theo hướng “chiều đi tới và và đi lui” Các loại hình 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 So sánh Mảng và DSLK Mảng Kích thước cố định Danh sách liên kết Số phần tử thay đổi tùy ý Các phần tử lưu trữ tuần Các phần tử liên kết với tự (địa chỉ tăng dần) nhau bằng con... tử khi Thêm/Xóa liên kết khi Thêm/Xóa Truy xuất ngẫu nhiên Truy xuất tuần tự 26 DSLK đơn Data pNext Cấu trúc 1 node List pHead pTail Data : Dữ liệu của node pNext : Con trỏ đến node kế tiếp pHead: Con trỏ đến node đầu pTail: Con trỏ đến node cuối 27 Khai báo cấu trúc node pNext Data struct tNODE { Data; struct tNODE *pNext; }; typedef struct tNODE NODE; 28 Khai báo cấu trúc node lưu số... trình  Kích thước có thể thay đổi Biến tĩnh và biến động trong C++  Biến động  Cấp phát bộ nhớ: new int [kích thước]  Giải phóng bộ nhớ: delete vùng nhớ  Ví dụ: int *a; a=new int [10]; // Cấp phát //Các thao tác trên a delete a; // Giải phóng Danh sách liên kết (DSLK) 1 7 2 6 3 10 8 5 9 4 Các phần tử kết dính với nhau bằng “sợi dây liên kết 1 7 2 6 3 10 8 5 9 4 Để đơn giản hơn trong việc minh...Biến tĩnh và biến động trong C++  Biến tĩnh tên biến;  Vd: int a; float y; char s[20];  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 Biến tĩnh và biến động trong C++  Biến động *tên biến;  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... 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 Cấu tạo của nút Tạo lập bằng cách cấp phát bộ nhớ động Mỗi nút có 2 thông tin: Dữ liệu (data) Con trỏ liên kết đến phầ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ớ) Đặc điểm DSLK 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 Có thể truy xuất đến các phần tử khác thông qua con trỏ liên kết Cấu tạo của DSLK Node List pHead pTail Cấu tạo của... tNODE NODE; 29 Khai báo cấu trúc node lưu thông tin SV ID, hoten, dtb pNext struct tSinhVien { char ID[10], hoten [30 ]; float dtb; }; typedef struct tSinhVien SINHVIEN; struct tNODE { SINHVIEN Data; struct tNODE *pNext; }; typedef struct tNODE NODE; 30 Khai báo cấu trúc DSLK đơn List pHead pTail struct tList { NODE *pHead, *pTail; }; typedef struct tList LIST; 31 Khai báo cấu trúc DSLK đơn list pHead... 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 Thao tác chèn thêm node vào DSLK  Kết nối” lại sợi dây liên kết theo trình tự List pHead pTail Thao tác xóa node khỏi DSLK Cần xóa List pHead pTail Các loại hình DSLK DSLK đơn: Các phần tử kết nối với nhau theo hướng “chiều đi tới” Các loại hình DSLK DSLK đôi: Các phần tử kết nối với nhau theo . tĩnh và động  Nắm vững cách tổ chức dữ liệu động bằng danh sách liên kết và minh họa được các thao tác xử lý trên danh sách liên kết đơn  Cài đặt minh họa được các thao tác của danh sách. //Các thao tác trên a delete a; // Giải phóng 13 Danh sách liên kết (DSLK) 14 1 7 2 6 3 10 8 5 9 4 Các phần tử kết dính với nhau bằng “sợi dây liên kết 15 1 7 2 6 3 10 8 5 9 4 Để đơn giản hơn. C/ C++ 2 Vấn đề kiểu dữ liệu tĩnh 3 1 2 3 4 5 6 7 8 10 5 7 3 9 2 15 1 ? Làm sao để chèn thêm số 6 vào vị trí 5 của mảng 6 Vấn đề kiểu dữ liệu tĩnh 4 1 2 3 4 5 6 7 8 9 10 5 7 3 9 2 15 1 6 Bổ sung

Ngày đăng: 04/09/2015, 15:14

Từ khóa liên quan

Mục lục

  • Slide 1

  • Mục tiêu

  • Vấn đề kiểu dữ liệu tĩnh

  • Vấn đề kiểu dữ liệu tĩnh

  • Bài tập

  • Vấn đề kiểu dữ liệu tĩnh

  • Vấn đề kiểu dữ liệu tĩnh

  • Bài tập

  • Vấn đề kiểu dữ liệu tĩnh

  • Vấn đề kiểu dữ liệu tĩnh

  • Biến tĩnh và biến động trong C++

  • Biến tĩnh và biến động trong C++

  • Biến tĩnh và biến động trong C++

  • Danh sách liên kết (DSLK)

  • Slide 15

  • Đặc điểm DSLK

  • Đặc điểm DSLK

  • Cấu tạo của DSLK

  • Cấu tạo của DSLK

  • Cấu tạo của nút

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

Tài liệu liên quan