Bài giảng Cấu trúc dữ liệu và thuật toán - Chương 3: Cấu trúc dữ liệu động
lượt xem 5
download
Chương 3 trình bày về cấu trúc dữ liệu động với các nội dung chi tiết như: Kiểu dữ liệu con trỏ, danh sách liên kết (link list), danh sách liên kết đơn, sắp xếp danh sách, các cấu trúc đặc biệt của danh sách liên kết đơn. Mời các bạn cùng tham khảo.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Cấu trúc dữ liệu và thuật toán - Chương 3: Cấu trúc dữ liệu động
- Chương 3: CẤU TRÚC DỮ LIỆU ðỘNG 3.1. Kiểu dữ liệu con trỏ 3.2. Danh sách liên kết (link list) 3.3. Danh sách liên kết ñơn 3.4. Sắp xếp danh sách 3.5. Các cấu trúc ñặc biệt của danh sách liên kết ñơn 3.5.1. Stack 3.5.2. Hàng ñợi (Queue) 3.6. Bài tập 1 © Dương Thành Phết-www.thayphet.net Khoa CNTT Trường Cð CNTT TP.HCM
- 3.1. Kiểu Dữ Liệu Con Trỏ 3.1.1. Biến không ñộng 3.1.2. Kiểu con trỏ 3.1.3. Biến ñộng 2 © Dương Thành Phết-www.thayphet.net Khoa CNTT Trường Cð CNTT TP.HCM
- 3.1.1. Biến không ñộng Dùng ñề lưu trữ những ñối tượng dữ liệu ñược sử dụng không có nhu cầu thay ñổi và kích thước, số lượng . . . • ðược khai báo tường minh • Tồn tại trong phạm vi khái báo • Kích thước không thay ñổi trong suốt quá trình sống Ví dụ: int a; char b[10]; 3 © Dương Thành Phết-www.thayphet.net Khoa CNTT Trường Cð CNTT TP.HCM
- 3.1.2. Kiểu con trỏ Kiểu con trỏ là kiểu cơ sở dùng lưu ñịa chỉ của một ñối tượng dữ liệu khác. Biến thuộc kiểu con trỏ là biến mà giá trị của nó là ñịa chỉ một vùng nhớ của một biến hoặc là giá trị Null. Tùy vào loại con trỏ gần (near pointer) hay con trỏ xa (far pointer) mà kiểu dữ liệu con trỏ có các kích thước khác nhau: + Con trỏ gần: 2 bytes + Con trỏ xa: 4 bytes 4 © Dương Thành Phết-www.thayphet.net Khoa CNTT Trường Cð CNTT TP.HCM
- Cú pháp ñịnh nghĩa một kiểu con trỏ typedef *; Ví dụ: typedef int *intpointer; inpointer p; Hay int *p; Các thao tác: - Khi 1 biến con trỏ p lưu ñịa chỉ của ñối tượng x, ta nói “p trỏ x” - Gán ñịa chỉ của biến cho con trỏ p: p=& -Truy xuất nội dung của ñối tượng do p trỏ ñến *p 5 © Dương Thành Phết-www.thayphet.net Khoa CNTT Trường Cð CNTT TP.HCM
- c. Ví dụ: void main() { int a,b,*pa,*pb; a=2; b=3; cout
- 3.1.3. Biến ñộng Trong 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 ñối tượng dữ liệu (do chúng phụ thuộc vào ngữ cảnh). Các ñối tượng dữ liệu này ñược khai báo như biến ñộng. Biến ñộng là những biến thỏa: Không ñược khai báo tường minh. ðược cấp phát/giải phóng bộ nhớ khi yêu cầu. Các biến này không theo qui tắc phạm vi. Vùng nhớ của biến ñược cấp phát trong Heap. Kích thước thay ñổi trong quá trình sống. 7 © Dương Thành Phết-www.thayphet.net Khoa CNTT Trường Cð CNTT TP.HCM
- Các thao tác trên biến ñộng: Tạo biến ñộng và cho con trỏ p trỏ ñến: Các hàm cấp phát bộ nhớ: void* malloc(size); // trả về con trỏ chỉ ñến một vùng // nhớ size byte vừa ñược cấp phát. void* calloc(n,size);// trả về con trỏ chỉ ñến một vùng // nhớ 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 // hàm cấp phát bộ nhớ trong C++ 8 © Dương Thành Phết-www.thayphet.net Khoa CNTT Trường Cð CNTT TP.HCM
- Hủy một biến ñộng do p chỉ ñến: Hàm free(p): Huỷ vùng nhớ cấp phát bởi hàm malloc do p trỏ tới Hàm delete p: huỷ vùng nhớ cấp phát bởi hàm new do p trỏ tới 9 © Dương Thành Phết-www.thayphet.net Khoa CNTT Trường Cð CNTT TP.HCM
- 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 giá trị 5 cho biến ñộng p1 p1* = 5; //Cấp phát biến ñộng kiểu mảng 10 p.tử kiểu int p2 = (int*)calloc(10, sizeof(int)); //ðặt giá trị 0 cho phần tử thứ 4 của mảng p2 (p2+3)* = 0; free(p1); free(p2); 10 © Dương Thành Phết-www.thayphet.net Khoa CNTT Trường Cð CNTT TP.HCM
- 3.2. Danh Sách Liên Kết 3.2.1. Ðịnh nghĩa 3.2.2. Các hình thức tổ chức danh sách 11 © Dương Thành Phết-www.thayphet.net Khoa CNTT Trường Cð CNTT TP.HCM
- 3.2.1. Ðịnh nghĩa Kiểu danh sách Tx gồm các phần tử thuộc kiểu T ñược ñịnh nghĩa là: Tx = trong ñó: Vx = {tập hợp có thứ tự các phần tử kiểu T ñược móc nối với nhau theo trình tự tuyến tính}; Ox = {Tạo danh sách; Tìm 1 phần tử trong danh sách; Chèn một phần tử vào danh sách; Huỷ một phần tử khỏi danh sách ; Liệt kê danh sách, Sắp xếp danh sách ...} 12 © Dương Thành Phết-www.thayphet.net Khoa CNTT Trường Cð CNTT TP.HCM
- Ví du: Hồ sơ các học sinh của một trường ñược tổ chức thành danh sách gồm nhiều hồ sơ của từng học sinh; số lượng học sinh trong trường có thể thay ñổi do vậy cần có các thao tác thêm, hủy một hồ sơ; ñể phục vụ công tác giáo vụ cần thực hiện các thao tác tìm hồ sơ của một học sinh, in danh sách hồ sơ ... 13 © Dương Thành Phết-www.thayphet.net Khoa CNTT Trường Cð CNTT TP.HCM
- 3.2.2. 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 phần tử trong danh sách ñược ñặc trưng bằng chỉ số. Cặp phần tử xi, xi+1 ñược xác ñịnh là kế cận Với hình thức tổ chức này, các phần tử của danh sách phải lưu trữ liên tiếp trong bộ nhớ, công thức xác ñịnh ñịa chỉ phần tử thứ I là. Cách biểu diễn này 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, nhưng lại hạn chế về mặt sử dụng bộ nhớ bị lãng phí. 14 © Dương Thành Phết-www.thayphet.net Khoa CNTT Trường Cð CNTT TP.HCM
- Mối liên hệ giữa các phần tử thể hiện tường minh: Mỗi phần tử ngoài các thông tin còn chứa một liên kết (ñịa chỉ) ñến phần tử kế trong danh sách nên còn ñược gọi là danh sách móc nối. Với hình thức này các phần tử trong danh sách không cần phải lưu trữ kế cận trong bộ nhớ nên khắc phục ñược các khuyết ñiểm của hình thức tổ chức mảng, nhưng việc truy xuất ñến một phần tử ñòi hỏi phải thực hiện truy xuất qua một số phần tử khác. 15 © Dương Thành Phết-www.thayphet.net Khoa CNTT Trường Cð CNTT TP.HCM
- Có các kiểu tổ chức liên kết giữa các phần tử. Danh sách liên kết ñơn Danh sách liên kết kép Danh sách liên kết vòng 16 © Dương Thành Phết-www.thayphet.net Khoa CNTT Trường Cð CNTT TP.HCM
- 3.3. Danh Sách Liên Kết ðơn 3.3.1. Tổ chức danh sách ñơn theo cách cấp phát liên kết 3.3.2. Các thao tác cơ bản trên danh sách ñơn 17 © Dương Thành Phết-www.thayphet.net Khoa CNTT Trường Cð CNTT TP.HCM
- 3.3.1. Tổ chức danh sách ñơn theo cách cấp phát liên kết Mỗi phần tử là một cấu trúc chứa 2 thông tin : - Thành phần dữ liệu: Lưu trữ 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. Ta có ñịnh nghĩa tổng quát typedef struct tagNode { Data Info; // Data là kiểu ñã ñịnh nghĩa trước struct tagNode* pNext;//con trỏ trỏ ñến cấu trúc node }NODE; 18 © Dương Thành Phết-www.thayphet.net Khoa CNTT Trường Cð CNTT TP.HCM
- Ví dụ: Ðịnh nghĩa danh sách ñơn lưu trữ hồ sơ SV typedef struct SinhVien { char Ten[30]; int MaSV; }SV; typedef struct SinhvienNode { SV Info; struct SinhvienNode* pNext; }SVNode; 19 © Dương Thành Phết-www.thayphet.net Khoa CNTT Trường Cð CNTT TP.HCM
- Nếu biết ñược ñịa chỉ của phần tử ñầu tiên trong danh sách ñơn thì có thể dựa vào thông tin pNext của nó ñể truy xuất ñến phần tử thứ 2, thứ 3... ðể quản lý một xâu ñơn chỉ cần biết ñịa chỉ phần tử ñầu xâu. Con trỏ Head dùng ñể lưu trữ ñịa chỉ phần tử ñầu xâu Khai báo: NODE *pHead; Ðể tiện lợi, có thể sử dụng thêm một con trỏ pTail giữ ñịa chỉ phần tử cuối xâu. Khai báo: NODE *pTail; 20 © Dương Thành Phết-www.thayphet.net Khoa CNTT Trường Cð CNTT TP.HCM
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Cấu trúc dữ liệu - Bài 1:Tổng quan về cấu trúc dữ liệu và giải thuật
47 p | 175 | 17
-
Bài giảng Cấu trúc dữ liệu 1: Chương 1 - Lương Trần Hy Hiến
7 p | 162 | 9
-
Bài giảng Cấu trúc dữ liệu và giải thuật trong C++ - Bài 8: Cấu trúc dữ liệu ngăn xếp
28 p | 77 | 9
-
Bài giảng Cấu trúc dữ liệu giải thuật: Các kiểu dữ liệu trừu tượng cơ bản - Cấu trúc dữ liệu tuyến tính
92 p | 116 | 9
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Cấu trúc dữ liệu cây đỏ đen - Bùi Tiến Lên
25 p | 81 | 8
-
Bài giảng Cấu trúc dữ liệu và giải thuật – Bài 17: Cấu trúc dữ liệu dạng cây
21 p | 77 | 8
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Các cấu trúc dữ liệu
193 p | 59 | 7
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 1 - Trần Minh Thái (2016)
62 p | 94 | 6
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 1 - Trần Minh Thái (Trường Đại học Hồng Bàng )
62 p | 159 | 6
-
Bài giảng Cấu trúc dữ liệu - Chương 3: Cấu trúc cây
65 p | 58 | 6
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Cấu trúc dữ liệu cây AA - Bùi Tiến Lên
30 p | 35 | 6
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 1 – Trần Minh Thái (2017)
67 p | 106 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Cấu trúc dữ liệu cây - Bùi Tiến Lên
68 p | 40 | 4
-
Bài giảng Cấu trúc dữ liệu: Chương 1 - ThS. Thiều Quang Trung (2018)
44 p | 43 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Cấu trúc dữ liệu cây AVL - Bùi Tiến Lên
38 p | 47 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 5 - Ngô Quang Thạch
24 p | 58 | 3
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 2 - Th.S Thiều Quang Trung
41 p | 68 | 3
-
Bài giảng Cấu trúc dữ liệu giải thuật: Cấu trúc dữ liệu
17 p | 50 | 2
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn