Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 4.1 - Trần Minh Thái (2016)

57 59 0
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 4.1 - Trần Minh Thái (2016)

Đ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

Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 4: Danh sách liên kết cung cấp các kiến thức giúp sinh viên 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#.

Chương Danh sách liên kết (Phần – tiết) Trần Minh Thái Email: minhthai@huflit.edu.vn Website: www.minhthai.edu.vn Cập nhật: ngày 10 tháng 10 năm 2016 Mục tiêu  Nắm vững khái niệm kiểu liệu tĩnh động  Nắm vững cách tổ chức liệu động danh sách liên kết minh họa thao tác xử lý danh sách liên kết đơn  Cài đặt minh họa thao tác danh sách đơn ngôn ngữ C# Vấn đề kiểu liệu tĩnh 10 10 5 15 15 2 ? Làm để chèn thêm số vào vị trí mảng Vấn đề kiểu liệu tĩnh ? 10 10 Giả sử cần thêm tiếp phần tử 5 15 15 2 Bổ sung thêm Bài tập Hãy cài phương thức (bằng ngôn ngữ C#) chèn phần tử có giá trị x vào vị trí vt mảng số nguyên arr, theo mẫu sau: class CMyIntArray{ int []arr; public void InsertX(int x, int vt){} } Vấn đề kiểu liệu tĩnh 10 10 5 3 15 15 2 ? Làm để xóa phần tử Vấn đề kiểu liệu tĩnh 10 10 5 15 15 2 7 Bài tập Hãy cài đặt hàm (bằng ngơn ngữ C#) xóa phần tử có giá trị x (nếu có) mảng số nguyên arr, theo mẫu sau: class CMyIntArray{ int []arr; public void DeleteX(int x){} } Vấn đề kiểu liệu tĩnh i Độ phức tạp chèn/ xóa mảng chiều O(n) Vấn đề kiểu liệu tĩnh  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? DÙNG CẤU TRÚC DỮ LIỆU ĐỘNG 10 Nhập liệu vào DSLK Nhập liệu cho node Tạo trỏ node Thêm node vào danh sách 43 Nhập liệu vào danh sách Để tạo node từ liệu x có sẵn Đưa liệu có giá trị x vào phần data Con trỏ pNext trỏ đến null pNew.data = x Data x pNew.pNext = null pNew 44 VD nhập liệu vào DSLK số nguyên Tạo trả Node có chứa giá trị x public class IntNode { private int data; private IntNode pNext = null; public IntNode(int x) { data = x; pNext = null; } } 45 Nhập liệu vào DSLK VD nhập liệu cho DSLK số nguyên dương đưa vào đầu danh sách public void Input() { int x; { Console.Write("Nhap vao so nguyen duong (nhap -1 ket thuc): "); int.TryParse(Console.ReadLine(), out x); if (x < 0) break; else { IntNode pNew = new IntNode(x); AddHead(pNew); } } while (true); } 46 Xuất dslk p List pHead pTail 47 Xuất DSLK số nguyên public void Output() { IntNode p = pHead; while (p != null) { Console.Write(p.Data + "->"); p = p.PNext; } } 48 Bài tập Định nghĩa phương thức cho lớp CMyIntLinkedList: Đếm số lượng node int DemSL(); Tìm node có giá trị lớn Node TimMax(); Tìm node có giá trị x Node TimX(int x); In node có giá trị chẵn void InChan(); Tính giá trị trung bình cộng node có giá trị lẻ double TBLe(); 49 Chương trình mẫu Minh hoạ thao tác nhập vào đầu xuất DSLK số nguyên Chương trình gồm lớp: Lớp IntNode: cấu trúc liệu Node Lớp CMyIntLinkedList: cấu trúc DSLK đơn Lớp Program: gọi thử nghiệm 50 Lớp IntNode public class IntNode { private int data; private IntNode pNext = null; public int Data { get { return data; } set { data = value; } } public IntNode PNext { get { return pNext; } set { pNext = value; } } public IntNode(int x) { data = x; pNext=null; } } 51 Lớp CMyIntLinkedList public class CMyIntLinkedList { private IntNode pHead = null; private IntNode pTail = null; public bool IsEmpty() { return pHead == null; } public void AddHead(IntNode pNew) { if (IsEmpty()) { pHead = pTail = pNew; } else { pNew.PNext = pHead; pHead = pNew; } } 52 Lớp CMyIntLinkedList (tt…) public void Input() { int x; { Console.Write("Nhap vao so nguyen duong (nhap -1 ket thuc): "); int.TryParse(Console.ReadLine(), out x); if (x < 0) break; else { IntNode pNew = new IntNode(x); AddHead(pNew); } } while (true); } 53 Lớp CMyIntLinkedList (tt…) public void Output() { IntNode p = pHead; while (p != null) { Console.Write(p.Data + "->"); p = p.PNext; } Console.WriteLine("."); } } 54 Lớp Program class Program { static void Main(string[] args) { CMyIntLinkedList intList = new CMyIntLinkedList(); intList.Input(); Console.WriteLine("Gia tri danh sach vua nhap:"); intList.Output(); } } 55 Bài tập thực hành Cài đặt lớp CMyLinkedList có kiểu liệu chung gồm chức năng: Tạo node Thêm node vào đầu DSLK Thêm node vào cuối DSLK Tìm node có giá trị x Sử dụng lớp cho trường hợp kiểu liệu số nguyên thử nghiệm chức năng: nhập, xuất, tìm kiếm 56 ... lẻ double TBLe(); 49 Chương trình mẫu Minh hoạ thao tác nhập vào đầu xuất DSLK số nguyên Chương trình gồm lớp: Lớp IntNode: cấu trúc liệu Node Lớp CMyIntLinkedList: cấu trúc DSLK đơn Lớp Program:... vào danh sách 43 Nhập liệu vào danh sách Để tạo node từ liệu x có sẵn Đưa liệu có giá trị x vào phần data Con trỏ pNext trỏ đến null pNew.data = x Data x pNew.pNext = null pNew 44 VD nhập liệu. .. tục?  Giải vấn đề giải phóng vùng nhớ không cần dùng đến? DÙNG CẤU TRÚC DỮ LIỆU ĐỘNG 10 Danh sách liên kết (DSLK) Các phần tử kết dính với “sợi dây liên kết” 10 11 10 Để đơn giản việc minh họa

Ngày đăng: 10/05/2021, 23:16

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

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

  • Slide 12

  • Đặc điểm DSLK

  • Đặc điểm DSLK

  • Cấu tạo của DSLK

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

  • Thao tác chèn thêm node vào DSLK

  • Thao tác xóa node khỏi DSLK

  • Các loại hình DSLK

  • Các loại hình DSLK

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

Tài liệu liên quan