Bài giảng điện tử môn tin học: Cấu trúc dữ liệu động ppsx

210 3.7K 1
Bài giảng điện tử môn tin học: Cấu trúc dữ liệu động ppsx

Đ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

Caỏu truực dửừ lieọu ủoọng Caỏu truực dửừ lieọu ủoọng Cấu trúc Dữ liệu - Cấu trúc dữ liệu động 2 Mục tiêu Mục tiêu  Giới thiệu khái niệm cấu trúc dữ liệu động. Giới thiệu khái niệm cấu trúc dữ liệu động.  Giới thiệu danh sách liên kết: Giới thiệu danh sách liên kết:  Các kiểu tổ chức dữ liệu theo DSLK. Các kiểu tổ chức dữ liệu theo DSLK.  Danh sách liên kết đơn: tổ chức, các thuật toán, ứng Danh sách liên kết đơn: tổ chức, các thuật toán, ứng dụng. dụng. Cấu trúc Dữ liệu - Cấu trúc dữ liệu động 3 Kiểu dữ liệu tónh Kiểu dữ liệu tónh  Khái niệm: Một số đối tượng dữ liệu không thay thay Khái niệm: Một số đối tượng dữ liệu không thay thay đổi được kích thước, cấu trúc, … trong suốt qua trình đổi được kích thước, cấu trúc, … trong suốt qua trình sống. Các đối tượng dữ liệu thuộc những kiểu dữ liệu sống. Các đối tượng dữ liệu thuộc những kiểu dữ liệu gọi là kiểu dữ liệu liệu tónh. gọi là kiểu dữ liệu liệu tónh.  Một số kiểu dữ liệu tónh: các cấu trúc dữ liệu được xây Một số kiểu dữ liệu tónh: các cấu trúc dữ liệu được xây dựng từ các kiểu cơ sở như: kiểu thực, kiểu nguyên, kiểu dựng từ các kiểu cơ sở như: kiểu thực, kiểu nguyên, kiểu ký tự hoặc từ các cấu trúc đơn giản như mẩu tin, tập ký tự hoặc từ các cấu trúc đơn giản như mẩu tin, tập hợp, mảng hợp, mảng   Các đối tượng dữ liệu được xác đònh thuộc những kiểu Các đối tượng dữ liệu được xác đònh thuộc những kiểu dữ liệu này thường cứng ngắt, gò bó dữ liệu này thường cứng ngắt, gò bó   khó diễn tả được khó diễn tả được thực tế vốn sinh động, phong phú. thực tế vốn sinh động, phong phú. Cấu trúc Dữ liệu - Cấu trúc dữ liệu động 4 Ví dụ thực tế Ví dụ thực tế  Mô tả, quản lý một đối tượng ‘con người’ cần thể hiện Mô tả, quản lý một đối tượng ‘con người’ cần thể hiện các thông tin tối thiểu như : các thông tin tối thiểu như :  Họ tên Họ tên  Số CMND Số CMND  Thông tin về cha, mẹ Thông tin về cha, mẹ Cấu trúc Dữ liệu - Cấu trúc dữ liệu động 5 Ví dụ thực tế Ví dụ thực tế  Việc biễu diễn một đối tượng có nhiều thành phần thông Việc biễu diễn một đối tượng có nhiều thành phần thông tin như trên có thể sử dụng kiểu bản ghi. Tuy nhiên, cần tin như trên có thể sử dụng kiểu bản ghi. Tuy nhiên, cần lưu ý cha, mẹ của một người cũng là các đối tượng kiểu lưu ý cha, mẹ của một người cũng là các đối tượng kiểu NGUOI, do vậy về nguyên tắc cần phải có đònh nghóa NGUOI, do vậy về nguyên tắc cần phải có đònh nghóa như sau: như sau: typedef struct NGUOI{ char Hoten[30]; int So_CMND ; NGUOI Cha,Me; };  Nhưng với khai báo trên, các ngôn ngữ lập trình gặp khó Nhưng với khai báo trên, các ngôn ngữ lập trình gặp khó khăn trong việc cài đặt không vượt qua được như xác khăn trong việc cài đặt không vượt qua được như xác đònh kích thước của đối tượng kiểu NGUOI ? đònh kích thước của đối tượng kiểu NGUOI ? Cấu trúc Dữ liệu - Cấu trúc dữ liệu động 6 CTDL tónh – Một số hạn chế CTDL tónh – Một số hạn chế  Một số đối tượng dữ liệu trong chu kỳ sống của nó có Một số đối tượng dữ liệu trong chu kỳ sống của nó có thể thay đổi về cấu trúc, độ lớn, như danh sách các học thể thay đổi về cấu trúc, độ lớn, như danh sách các học viên trong một lớp học có thể tăng thêm, giảm đi Nếu viên trong một lớp học có thể tăng thêm, giảm đi Nếu dùng những cấu trúc dữ liệu tónh đã biết như mảng để dùng những cấu trúc dữ liệu tónh đã biết như mảng để biểu diễn biểu diễn   Những thao tác phức tạp, kém tự nhiên Những thao tác phức tạp, kém tự nhiên   chương trình khó đọc, khó bảo trì và nhất là khó có thể chương trình khó đọc, khó bảo trì và nhất là khó có thể sử dụng bộ nhớ một cách có hiệu quả. sử dụng bộ nhớ một cách có hiệu quả.  Dữ liệu tónh sẽ chiếm vùng nhớ đã dành cho chúng suốt Dữ liệu tónh sẽ chiếm vùng nhớ đã dành cho chúng suốt quá trình hoạt động của chương trình quá trình hoạt động của chương trình   sử dụng bộ nhớ sử dụng bộ nhớ kém hiệu quả. kém hiệu quả. Cấu trúc Dữ liệu - Cấu trúc dữ liệu động 7 Hướng giải quyết Hướng giải quyết  Cần xây dựng cấu trúc dữ liệu đáp ứng được các yêu Cần xây dựng cấu trúc dữ liệu đáp ứng được các yêu cầu: cầu:  Linh động hơn. Linh động hơn.  Có thể thay đổi kích thước, cấu trúc trong suốt thời Có thể thay đổi kích thước, cấu trúc trong suốt thời gian sống. gian sống.   Cấu trúc dữ liệu động. Cấu trúc dữ liệu động. Kieồu dửừ lieọu Kieồu dửừ lieọu Con troỷ Con troỷ Cấu trúc Dữ liệu - Cấu trúc dữ liệu động 9 Biến không động Biến không động Biến không động (biến tónh, biến nửa tónh) là những biến thỏa: Biến không động (biến tónh, biến nửa tónh) là những biến thỏa:  Được khai báo tường minh, Được khai báo tường minh,  Tồn tại khi vào phạm vi khai báo và chỉ mất khi ra khỏi Tồn tại khi vào phạm vi khai báo và chỉ mất khi ra khỏi phạm vi này, phạm vi này,  Được cấp phát vùng nhớ trong vùng dữ liệu (Data segment) Được cấp phát vùng nhớ trong vùng dữ liệu (Data segment) hoặc là Stack (đối với biến nửa tónh - các biến cục bộ). hoặc là Stack (đối với biến nửa tónh - các biến cục bộ).  Kích thước không thay đổi trong suốt quá trình sống. Kích thước không thay đổi trong suốt quá trình sống.  Do được khai báo tường minh, các biến không động có một Do được khai báo tường minh, các biến không động có một đònh danh đã được kết nối với đòa chỉ vùng nhớ lưu trữ biến đònh danh đã được kết nối với đòa chỉ vùng nhớ lưu trữ biến và được truy xuất trực tiếp thông qua đònh danh đó. và được truy xuất trực tiếp thông qua đònh danh đó.  Ví dụ : Ví dụ : int a; // a, b là các biến không động char b[10]; Cấu trúc Dữ liệu - Cấu trúc dữ liệu động 10 Kiểu dữ liệu Con trỏ Kiểu dữ liệu Con trỏ  Cho trước kiểu dữ liệu T = <V, O>. Cho trước kiểu dữ liệu T = <V, O>.  Kiểu con trỏ - ký hiệu “Tp”- chỉ đến các phần tử có kiểu Kiểu con trỏ - ký hiệu “Tp”- chỉ đến các phần tử có kiểu “T” được đònh nghóa: Tp = <Vp, Op>, trong đó: “T” được đònh nghóa: Tp = <Vp, Op>, trong đó:  Vp = {{các điạ chỉ có thể lưu trữ những đối tượng có Vp = {{các điạ chỉ có thể lưu trữ những đối tượng có kiểu T}, kiểu T}, NULL NULL } (với } (với NULL NULL là một giá trò đặc biệt là một giá trò đặc biệt tượng trưng cho một giá trò không biết hoặc không tượng trưng cho một giá trò không biết hoặc không quan tâm) quan tâm)  Op = {các thao tác đònh đòa chỉ của một đối tượng Op = {các thao tác đònh đòa chỉ của một đối tượng thuộc kiểu T khi biết con trỏ chỉ đến đối tượng đó} thuộc kiểu T khi biết con trỏ chỉ đến đối tượng đó} (thường gồm các thao tác tạo một con trỏ chỉ đến một (thường gồm các thao tác tạo một con trỏ chỉ đến một đối tượng thuộc kiểu T; hủy một đối tượng dữ liệu đối tượng thuộc kiểu T; hủy một đối tượng dữ liệu thuộc kiểu T khi biết con trỏ chỉ đến đối tượng đó). thuộc kiểu T khi biết con trỏ chỉ đến đối tượng đó). [...]... sau đó, truy xuất đến biến động thông qua biến con trỏ đã biết đònh danh Cấu trúc Dữ liệu - Cấu trúc dữ liệu động 16 Biến động  Hai thao tác cơ bản trên biến động là tạo và hủy một biến động do biến con trỏ ‘p’ trỏ đến:  Tạo ra một biến động và cho con trỏ ‘p’ chỉ đến nó  Hủy một biến động do p chỉ đến Cấu trúc Dữ liệu - Cấu trúc dữ liệu động 17 Biến động  Tạo ra một biến động và cho con trỏ ‘p’ chỉ... danh sách: A Cấu trúc Dữ liệu - Cấu trúc dữ liệu động B C D 29 Danh sách liên kết (List) Các hình thức tổ chức danh sách  Danh sách liên kết vòng : phần tử cuối danh sách liên kết với phần tử đầu danh sách: A B A X B Cấu trúc Dữ liệu - Cấu trúc dữ liệu động Z C Y D 30 Danh sách đơn SList (xâu đơn) SList – Tổ chức 1 phần tử Mỗi phần tử của danh sách đơn gồm 2 thành phần :  Thành phần dữ liệu: lưu trữ... SVNode { SV Info; struct SVNode * pNext; }; Cấu trúc Dữ liệu - Cấu trúc dữ liệu động 33 SList – Tổ chức, quản lý  Một phần tử trong danh sách đơn là một biến động sẽ được yêu cầu cấp phát khi cần Và danh sách đơn chính là sự liên kết các biến động này với nhau do vậy đạt được sự linh động khi thay đổi số lượng các phần tử Cấu trúc Dữ liệu - Cấu trúc dữ liệu động 34 SList – Tổ chức, quản lý    Để... danh sách hồ sơ Cấu trúc Dữ liệu - Cấu trúc dữ liệu động 22 Danh sách liên kết (List) Các hình thức tổ chức danh sách  Các hình thức tổ chức danh sách:  Mối liên hệ giữa các phần tử được thể hiện ngầm  Mối liên hệ giữa các phần tử được thể hiện tường minh Cấu trúc Dữ liệu - Cấu trúc dữ liệu động 23 Danh sách liên kết (List) Các hình thức tổ chức danh sách  Mối liên hệ giữa các phần tử được thể hiện... (chỉ lưu đòa chỉ offset) hay far (lưu cả segment lẫn offset) Cấu trúc Dữ liệu - Cấu trúc dữ liệu động 12 Con trỏ – Khai báo   Cú pháp đònh nghóa một kiểu con trỏ trong ngôn ngữ C : typedef * < kiểu con trỏ>; Ví dụ : typedef int *intpointer; intpointer p; hoặc int *p; là những khai báo hợp lệ Cấu trúc Dữ liệu - Cấu trúc dữ liệu động 13 Con trỏ – Thao tác căn bản  Các thao tác cơ bản trên... các thông tin về bản thân phần tử  Thành phần mối liên kết: lưu trữ đòa chỉ của phần tử kế tiếp trong danh sách, hoặc lưu trữ giá trò NULL nếu là phần tử cuối danh sách typedef struct NODE { Data Info; // Data là kiểu đã đònh nghóa trước struct NODE * pNext; //con trỏ chỉ đến cấu trúc NODE }; Cấu trúc Dữ liệu - Cấu trúc dữ liệu động 32 SList – Tổ chức 1 phần tử  Ví dụ : Đònh nghóa một phần tử trong... phần tử Cấu trúc Dữ liệu - Cấu trúc dữ liệu động 24 Danh sách liên kết (List) Các hình thức tổ chức danh sách  Mối liên hệ giữa các phần tử được thể hiện ngầm:  Cho phép truy xuất ngẫu nhiên, đơn giản và nhanh chóng đến một phần tử bất kỳ trong danh sách  Hạn chế về mặt sử dụng bộ nhớ  Đối với mảng, số phần tử được xác đònh trong thời gian biên dòch và cần cấp phát vùng nhớ liên tục Cấu trúc Dữ liệu. .. // vừa được cấp phát gồm n phần tử, // mỗi phần tử có kích thước size byte   new // toán tử cấp phát bộ nhớ trong C++ Hàm free(p) huỷ vùng nhớ cấp phát bởi hàm malloc hoặc calloc do p trỏ tới Toán tử delete p huỷ vùng nhớ cấp phát bởi toán tử new do p trỏ tới Cấu trúc Dữ liệu - Cấu trúc dữ liệu động 18 Biến động – Ví dụ int *p1, *p2; // cấp phát vùng nhớ cho 1 biến động kiểu int p1 = (int*)malloc(sizeof(int));... tượng do p trỏ đến (*p) Cấu trúc Dữ liệu - Cấu trúc dữ liệu động 14 Biến động   Trong nhiều trường hợp, tại thời điểm biên dòch không thể xác đònh trước kích thước chính xác của một số đối tượng dữ liệu do sự tồn tại và tăng trưởng của chúng phụ thuộc vào ngữ cảnh của việc thực hiện chương trình Các đối tượng dữ liệu có đặc điểm kể trên nên được khai báo như biến động Biến động là những biến thỏa:... thay đổi trong quá trình sống Cấu trúc Dữ liệu - Cấu trúc dữ liệu động 15 Biến động    Do không được khai báo tường minh nên các biến động không có một đònh danh được kết buộc với đòa chỉ vùng nhớ cấp phát cho nó, do đó gặp khó khăn khi truy xuất đến một biến động Để giải quyết vấn đề, biến con trỏ (là biến không động) được sử dụng để trỏ đến biến động Khi tạo ra một biến động, phải dùng một con trỏ . truực dửừ lieọu ủoọng Cấu trúc Dữ liệu - Cấu trúc dữ liệu động 2 Mục tiêu Mục tiêu  Giới thiệu khái niệm cấu trúc dữ liệu động. Giới thiệu khái niệm cấu trúc dữ liệu động.  Giới thiệu danh. dữ liệu gọi là kiểu dữ liệu liệu tónh. gọi là kiểu dữ liệu liệu tónh.  Một số kiểu dữ liệu tónh: các cấu trúc dữ liệu được xây Một số kiểu dữ liệu tónh: các cấu trúc dữ liệu được xây dựng. các biến không động char b[10]; Cấu trúc Dữ liệu - Cấu trúc dữ liệu động 10 Kiểu dữ liệu Con trỏ Kiểu dữ liệu Con trỏ  Cho trước kiểu dữ liệu T = <V, O>. Cho trước kiểu dữ liệu T = <V,

Ngày đăng: 11/08/2014, 22:22

Từ khóa liên quan

Mục lục

  • Cấu trúc dữ liệu động

  • Mục tiêu

  • Kiểu dữ liệu tónh

  • Ví dụ thực tế

  • Slide 5

  • CTDL tónh – Một số hạn chế

  • Hướng giải quyết

  • Kiểu dữ liệu Con trỏ

  • Biến không động

  • Kiểu dữ liệu Con trỏ

  • Slide 11

  • Slide 12

  • Con trỏ – Khai báo

  • Con trỏ – Thao tác căn bản

  • Biến động

  • Slide 16

  • Slide 17

  • Slide 18

  • Biến động – Ví dụ

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

  • Danh sách liên kết (List) Đònh nghóa

  • Slide 22

  • Danh sách liên kết (List) Các hình thức tổ chức danh sách

  • Slide 24

  • Slide 25

  • Slide 26

  • Slide 27

  • Slide 28

  • Slide 29

  • Slide 30

  • Danh sách đơn - SList (xâu đơn)

  • SList – Tổ chức 1 phần tử

  • Slide 33

  • SList – Tổ chức, quản lý

  • Slide 35

  • Slide 36

  • SList – Tạo một phần tử

  • Slide 38

  • SList – Các thao tác cơ sở

  • SList – Khởi tạo danh sách rỗng

  • SList – Thêm một phần tử

  • Slide 42

  • SList – Thêm một phần tử vào đầu

  • Slide 44

  • Slide 45

  • SList Thêm một thành phần dữ liệu vào đầu

  • Slide 47

  • SList – Thêm một phần tử vào cuối

  • Slide 49

  • Slide 50

  • SList Thêm một thành phần dữ liệu vào cuối

  • Slide 52

  • SList – Chèn một phần tử sau q

  • Slide 54

  • Slide 55

  • SList – Tìm một phần tử

  • Slide 57

  • Slide 58

  • SList – Trích một phần tử

  • SList – Trích phần tử đầu xâu

  • Slide 61

  • Slide 62

  • SList – Trích & hủy phần tử đầu xâu

  • SList – Trích phần tử sau q

  • Slide 65

  • Slide 66

  • SList – Trích phần tử có khóa K

  • SList – Trích phần tử có khóa K

  • Slide 69

  • SList – Duyệt danh sách

  • Slide 71

  • SList – Hủy toàn bộ danh sách

  • Slide 73

  • Sắp xếp danh sách

  • Slide 75

  • Sắp xếp danh sách Hoán vò nội dung các phần tử trong danh sách

  • Slist – Sắp xếp Hoán vò nội dung các phần tử trong danh sách

  • Slist – Sắp xếp Thay đổi các mối liên kết

  • Slide 79

  • SList – Sắp xếp chọn trực tiếp

  • Slide 81

  • Slide 82

  • Slide 83

  • Slide 84

  • Slide 85

  • Slide 86

  • SList Một số thuật toán sắp xếp hiệu quả

  • SList –Quick Sort: Thuật toán

  • SList – Sắp xếp quick sort

  • SList – quick sort: phân hoạch

  • Slide 91

  • Slide 92

  • Slide 93

  • Slide 94

  • SList – quick sort

  • Slide 96

  • SList – Nối 2 danh sách

  • Slide 98

  • Slide 99

  • SList – Quick sort: nhận xét

  • SList – Merge sort: thuật toán

  • SList – Merge sort: Ví dụ

  • Slide 103

  • Slide 104

  • Slide 105

  • SList – Merge sort: cài đặt

  • Slide 107

  • Slide 108

  • Slide 109

  • Slide 110

  • Slide 111

  • SList – Merge sort: nhận xét

  • SList – Radix sort: thuật toán

  • Slide 114

  • Slide 115

  • Slide 116

  • Slide 117

  • Slide 118

  • Slide 119

  • Slide 120

  • Slide 121

  • Slide 122

  • SList – Radix sort: cài đặt

  • Slide 124

  • SList – Radix sort: nhận xét

  • Một số cấu trúc dữ liệu trừu tượng

  • Stack

  • Slide 128

  • Slide 129

  • Biểu diễn Stack dùng mảng

  • Slide 131

  • Slide 132

  • Slide 133

  • Slide 134

  • Slide 135

  • Biểu diễn Stack dùng danh sách liên kết

  • Slide 137

  • Slide 138

  • Ứng dụng của Stack

  • Slide 140

  • Hàng đợi ( Queue)

  • Slide 142

  • Slide 143

  • Slide 144

  • Biểu diễn Queue dùng mảng

  • Slide 146

  • Slide 147

  • Slide 148

  • Slide 149

  • Slide 150

  • Slide 151

  • Slide 152

  • Slide 153

  • Biểu diễn hàng đợi dùng danh sách liên kết

  • Slide 155

  • Slide 156

  • Slide 157

  • Ứng dụng của hàng đợi

  • Một số cấu trúc dữ liệu dạng danh sách liên kết khác

  • Danh sách liên kết kép

  • Slide 161

  • Slide 162

  • Chèn một phần tử vào danh sách liên kết kép

  • Chèn một phần tử vào đầu danh sách liên kết kép

  • Slide 165

  • Slide 166

  • Slide 167

  • Slide 168

  • Chèn một phần tử vào cuối danh sách liên kết kép

  • Chèn vào DSLK kép sau một phần tử q

  • Slide 171

  • Slide 172

  • Chèn vào DSLK kép trước một phần tử q

  • Slide 174

  • Slide 175

  • Hủy một phần tử khỏi danh sách liên kết kép

  • Danh sách liên kết kép Hủy phần tử đầu xâu

  • Danh sách liên kết kép Hủy phần tử cuối xâu

  • Danh sách liên kết kép Hủy một phần tử đứng sau phần tử q

  • Danh sách liên kết kép Hủy một phần tử đứng trước phần tử q

  • Danh sách liên kết kép Hủy một phần tử có khóa k (1/3)

  • Danh sách liên kết kép Hủy một phần tử có khóa k (2/3)

  • Danh sách liên kết kép Hủy một phần tử có khóa k (3/3)

  • Danh sách liên kết kép Sắp xếp danh sách

  • Danh sách liên kết kép Sắp xếp danh sách - DListQSort(1/2)

  • Danh sách liên kết kép Sắp xếp danh sách - DListQSort(2/2)

  • Danh sách liên kết kép

  • Hàng đợi hai đầu (double-ended queue)

  • Slide 189

  • Dùng deque để cài đặt stack và queue

  • Cài đặt deque

  • Danh sách liên kết có thứ tự (Odered List)

  • Slide 193

  • Slide 194

  • Slide 195

  • Danh sách liên kết vòng

  • Slide 197

  • Danh sách liên kết vòng Tìm phần tử trên danh sách vòng

  • Danh sách liên kết vòng Thêm phần tử đầu xâu

  • Danh sách liên kết vòng Thêm phần tử cuối xâu

  • Danh sách liên kết vòng Thêm phần tử sau nút q

  • Danh sách liên kết vòng Hủy phần tử đầu xâu

  • Danh sách liên kết vòng Hủy phần tử đứng sau nút q

  • Danh sách có nhiều mối liên kết

  • Slide 205

  • Slide 206

  • Danh sách tổng quát

  • Slide 208

  • Slide 209

  • Slide 210

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

  • Đang cập nhật ...

Tài liệu liên quan