Bài giảng kỹ thuật lập trình_Chương 4: Khái quát về cấu trúc dữ liệu potx

32 486 0
Bài giảng kỹ thuật lập trình_Chương 4: Khái quát về cấu trúc dữ liệu potx

Đ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

© 2004, HOÀNG MINH SƠN Chương 1 0101010101010101100001 0101010101010101100001 0101010101010101100001 0101010100101010100101 0101010100101010100101 0101010100101010100101 1010011000110010010010 1010011000110010010010 1010011000110010010010 1100101100100010000010 1100101100100010000010 1100101100100010000010 0101010101010101100001 0101010101010101100001 0101010101010101100001 0101010100101010100101 0101010100101010100101 0101010100101010100101 1010011000110010010010 1010011000110010010010 1010011000110010010010 1100101100100010000010 1100101100100010000010 1100101100100010000010 0101010101010101100001 0101010101010101100001 0101010101010101100001 0101010100101010100101 0101010100101010100101 0101010100101010100101 1010011000110010010010 1010011000110010010010 1010011000110010010010 1100101100100010000010 1100101100100010000010 1100101100100010000010 Kỹ thuật lập trình 9/22/2005 y = A*x + B*u; x = C*x + d*u; StateController start() stop() LQGController start() stop() Chương 4: Khái utrúcquát về cấ dữ liệu 2 © 2004, HOÀNG MINH SƠN Chương 4: Khái quát về cấutrúcdữ liệu © 2005 - HMS Nộidung chương 4 4.1 Cấutrúcdữ liệulàgì? 4.2 Mảng và quảnlýbộ nhớ₫ộng 4.2 Xây dựng cấu trúc Vector 4.3 Xây dựng cấutrúcList 3 © 2004, HOÀNG MINH SƠN Chương 4: Khái quát về cấutrúcdữ liệu © 2005 - HMS  Phầnlớn các bài toán trong thựctế liên quan tớicác dữ liệuphứchợp, những kiểudữ liệucơ bảntrong ngôn ngữ lập trình không ₫ủ biểudiễn  Ví dụ: —Dữ liệu sinh viên: Họ tên, ngày sinh, quê quán, mã số SV, —Môhìnhhàmtruyền: Đathứctử số, ₫athứcmẫusố —Môhìnhtrạng thái: Các ma trận A, B, C, D —Dữ liệuquátrình: Tên₫ạilượng, dải ₫o, giá trị, ₫ơnvị, thời gian, cấpsaisố, ngưỡng giá trị, — Đốitượng ₫ồ họa: Kích thước, màu sắc, ₫ường nét, phông chữ,  Phương pháp biểudiễndữ liệu: ₫ịnh nghĩakiểudữ liệumớisử dụng cấu trúc (struct, class, union, ) 4.1 Giớithiệuchung 4 © 2004, HOÀNG MINH SƠN Chương 4: Khái quát về cấutrúcdữ liệu © 2005 - HMS  Đasố những dữ liệuthuộcmột ứng dụng có liên quan với nhau => cầnbiểudiễntrongmộttậphợpcócấu trúc, ví dụ: — Danh sách sinh viên: Các dữ liệu sinh viên ₫ượcsắpxếptheo thứ tự Alphabet —Mộ hình tổng thể cho hệ thống ₫iều khiển: Bao gồm nhiều thành phầntương tác —Dữ liệuquátrình: Mộttậpdữ liệucóthể mang giá trị của một ₫ạilượng vào các thời ₫iểmgián₫oạn, các dữ liệu ₫ầu vào liên quan tớidữ liệu ₫ầura — Đốitượng ₫ồ họa: Mộtcửasổ bao gồm nhiều ₫ốitượng ₫ồ họa, mộtbảnvẽ cũng bao gồm nhiều ₫ốitượng ₫ồ họa  Thông thường, các dữ liệutrongmộttậphợpcócùng kiểu, hoặcítralàtương thích kiểuvớinhau  Kiểumảng không phải bao giờ cũng phù hợp! Vấn ₫ề: Biểudiễntậphợpdữ liệu 5 © 2004, HOÀNG MINH SƠN Chương 4: Khái quát về cấutrúcdữ liệu © 2005 - HMS Vấn ₫ề: Quảnlý(tậphợp) dữ liệu  Sử dụng kếthợpmộtcáchkhéoléokiểucấutrúcvà kiểumảng ₫ủ ₫ể biểudiễncáctậphợpdữ liệubấtkỳ  Các giảithuật (hàm) thao tác vớidữ liệu, nhằmquản lý dữ liệumộtcáchhiệuquả: —Bổ sung mộtmụcdữ liệumớivàomột danh sách, mộtbảng, mộttậphợp, —Xóamộtmụcdữ liệutrongmột danh sách, bảng, tậphợp, —Tìmmộtmụcdữ liệutrongmột danh sách, bảng tậphợp, theo mộttiêuchuẩncụ thể —Sắpxếpmột danh sách theo mộttiêuchuẩnnào₫ó — 6 © 2004, HOÀNG MINH SƠN Chương 4: Khái quát về cấutrúcdữ liệu © 2005 - HMS QuảnlýDL thế nào là hiệuquả?  Tiếtkiệmbộ nhớ: Phần "overhead" không ₫áng kể so vớiphầndữ liệuthực  Truy nhập nhanh, thuậntiện: Thờigiancầnchobổ sung, tìm kiếm và xóa bỏ các mụcdữ liệuphảingắn  Linh hoạt: Số lượng các mụcdữ liệu không (hoặcít) bị hạnchế cố₫ịnh, không cầnbiếttrướckhitạocấu trúc, phù hợpvớicả bài toán nhỏ và lớn  Hiệuquả quảnlýdữ liệuphụ thuộcvào —Cấutrúcdữ liệu ₫ượcsử dụng —Giảithuật ₫ượcápdụng cho bổ sung, tìm kiếm, sắpxếp, xóa bỏ 7 © 2004, HOÀNG MINH SƠN Chương 4: Khái quát về cấutrúcdữ liệu © 2005 - HMS Các cấutrúcdữ liệu thông dụng  Mảng (nghĩarộng): Tậphợpcácdữ liệucóthể truy nhậptùyý theochỉ số  Danh sách (list): Tậphợpcácdữ liệu ₫ược móc nối ₫ôi mộtvớinhauvàcóthể truy nhậptuầntự  Cây (tree): Tậphợpcácdữ liệu ₫ược móc nốivới nhau theo cấutrúccây, cóthể truy nhậptuầntự từ gốc —Nếumỗi nút có tối ₫a hai nhánh: cây nhị phân (binary tree)  Bìa, bảng (map): Tậphợpcácdữ liệucósắpxếp, có thể truy nhậprất nhanh theo mã khóa (key)  Hàng ₫ợi (queue): Tậphợpcácdữ liệucósắpxếp tuầntự, chỉ bổ sung vào từ một ₫ầuvàlấyratừ₫ầu còn lại 8 © 2004, HOÀNG MINH SƠN Chương 4: Khái quát về cấutrúcdữ liệu © 2005 - HMS Các cấutrúcdữ liệu thông dụng (tiếp)  Tậphợp(set): Tậphợpcácdữ liệu ₫ượcsắpxếptùyý nhưng có thể truy nhậpmộtcáchhiệuquả  Ngănxếp (stack): Tậphợpcácdữ liệu ₫ượcsắpxếp tuầntự, chỉ truy nhập ₫ượctừ một ₫ầu  Bảng hash (hash table): Tậphợpcácdữ liệu ₫ượcsắp xếpdựatheomộtmãsố nguyên tạoratừ mộthàm ₫ặcbiệt  Bộ nhớ vòng (ring buffer): Tương tự như hàng ₫ợi, nhưng dung lượng có hạn, nếuhếtchỗ sẽ₫ượcghi quay vòng  Trong toán họcvàtrong₫iềukhiển: vector, ma trận, ₫athức, phân thức, hàm truyền, 9 © 2004, HOÀNG MINH SƠN Chương 4: Khái quát về cấutrúcdữ liệu © 2005 - HMS 4.2 Mảng và quảnlýbộ nhớ₫ộng  Mảng cho phép biểudiễnvàquảnlýdữ liệumộtcách khá hiệuquả: — Đọcvàghidữ liệurất nhanh qua chỉ số hoặcqua ₫ịachỉ —Tiếtkiệmbộ nhớ  Các vấn ₫ề củamảng tĩnh: VD: Student student_list[100]; —Số phầntử phảilàhằng số (biếttrước khi biên dịch, ngườisử dụng không thể nhậpsố phầntử, không thể cho số phầntừ là mộtbiến) => kém linh hoạt —Chiếmchỗ cứng trong ngănxếp(₫ốivớibiếncụcbộ) hoặc trong bộ nhớ dữ liệuchương trình (₫ốivớibiếntoàncục) => sử dụng bộ nhớ kém hiệuquả, kém linh hoạt 10 © 2004, HOÀNG MINH SƠN Chương 4: Khái quát về cấutrúcdữ liệu © 2005 - HMS Mảng ₫ộng  Mảng ₫ộng là mộtmảng ₫ượccấpphátbộ nhớ theo yêu cầu, trong khi chương trình chạy #include <stdlib.h> /* C */ int n = 50; float* p1= (float*) malloc(n*sizeof(float)); /* C */ double* p2= new double[n]; // C++  Sử dụng con trỏ₫ểquảnlýmảng ₫ộng: Cách sử dụng không khác so vớimảng tĩnh p1[0] = 1.0f; p2[0] = 2.0;  Sau khi sử dụng xong => giải phóng bộ nhớ: free(p1); /* C */ delete [] p2; // C++ [...]... Chương 4: Khái quát về cấu trúc dữ liệu Dữ liệu Y © 2005 - HMS 24 Bổ sung dữ liệu pHead pHead Dữ liệu A Dữ liệu A Dữ liệu B Dữ liệu B Dữ liệu T Dữ liệu C © 2004, HOÀNG MINH SƠN pHead Dữ liệu T Dữ liệu C Dữ liệu X Dữ liệu X 0x00 Dữ liệu Y 0x00 Dữ liệu Y Bổ sung vào ₫ầu danh sách Bổ sung vào giữa danh sách Chương 4: Khái quát về cấu trúc dữ liệu © 2005 - HMS 25 Xóa bớt dữ liệu pHead pHead Dữ liệu B Dữ liệu. .. pHead pHead Dữ liệu B Dữ liệu C Dữ liệu C Dữ liệu X 0x00 Dữ liệu A Dữ liệu B © 2004, HOÀNG MINH SƠN Dữ liệu A Dữ liệu X Dữ liệu Y Xóa dữ liệu ₫ầu danh sách Chương 4: Khái quát về cấu trúc dữ liệu 0x00 Dữ liệu Y Xóa dữ liệu giữa danh sách © 2005 - HMS 26 Các ₫ặc ₫iểm chính Ưu ₫iểm: — Sử dụng rất linh hoạt, cấp phát bộ nhớ khi cần và xóa khi không cần — Bổ sung và xóa bỏ một dữ liệu ₫ược thực hiện thông qua... Chương 4: Khái quát về cấu trúc dữ liệu © 2005 - HMS 20 Ví dụ sử dụng #include "vector.h" void main() { int n = 10; Vector a,b,c; a = createVector(10,1.0); b = createVector(10,2.0); c = addVector(a,b); // © 2004, HOÀNG MINH SƠN destroyVector(a); destroyVector(b); destroyVector(c); } Chương 4: Khái quát về cấu trúc dữ liệu © 2005 - HMS 21 4.4 Xây dựng cấu trúc List Vấn ₫ề: Xây dựng một cấu trúc ₫ể... chép toàn bộ dữ liệu sang mảng mới => cần nhiều thời gian nếu số phần tử lớn Nếu muốn chèn một phần tử/xóa một phần tử ở ₫ầu hoặc giữa mảng thì phải sao chép và dịch toàn bộ phần dữ liệu còn lại => rất mất thời gian Chương 4: Khái quát về cấu trúc dữ liệu © 2005 - HMS 23 Danh sách móc nối (linked list) pHead Dữ liệu A Item B Dữ liệu B Item C Dữ liệu C Item X © 2004, HOÀNG MINH SƠN Item A Dữ liệu X Item... phần tử theo kiểu tuần tự © 2004, HOÀNG MINH SƠN Nhược ₫iểm: — Mỗi dữ liệu bổ sung mới ₫ều phải ₫ược cấp phát bộ nhớ ₫ộng — Mỗi dữ liệu xóa bỏ ₫i ₫ều phải ₫ược giải phóng bộ nhớ tương ứng — Nếu kiểu dữ liệu không lớn thì phần overhead chiếm tỉ lệ lớn — Tìm kiếm dữ liệu theo kiểu tuyến tính, mất thời gian Chương 4: Khái quát về cấu trúc dữ liệu © 2005 - HMS 27 Ví dụ: Danh sách thông báo (hộp thư) #include... malloc(n*sizeof(double)); d = scalarProd(v1,v2,n); // scalar_prod đã có d = v1 * v2; // OOPS! v1.data[10] = 0; // OOPS! free(v1); free(v2); Chương 4: Khái quát về cấu trúc dữ liệu © 2005 - HMS 17 Định nghĩa cấu trúc Vector Tên file: vector.h Cấu trúc dữ liệu: struct Vector { double *data; int nelem; }; © 2004, HOÀNG MINH SƠN Khai báo các hàm cơ bản: Vector void double void Vector Vector double createVector(int... Chương 4: Khái quát về cấu trúc dữ liệu © 2005 - HMS 14 Ví dụ sử dụng bộ nhớ ₫ộng trong hàm © 2004, HOÀNG MINH SƠN Date* createDateList(int n) { Date* p = new Date[n]; return p; } void main() { int n; cout > n; Date* date_list = createDateList(n); for (int i=0; i < n; ++i) { } for ( ) { cout n; Date* date_list; createDateList(n, date_list); for (int i=0; i < n; ++i) { } for ( ) { cout c; removeAllMessages(myMailBox); } Chương 4: Khái quát về cấu trúc dữ liệu © 2005 - HMS 31 Bài tập về nhà Xây dựng kiểu danh sách móc nối chứa các ngày lễ trong năm và ý nghĩa của mỗi ngày (string), cho phép: Bổ sung một ngày lễ vào ₫ầu danh sách Tìm ý nghĩa của một ngày... ₫ặc thù: — Số lượng mục dữ liệu trong danh sách có thể thay ₫ổi thường xuyên — Các thao tác bổ sung hoặc xóa dữ liệu cần ₫ược thực hiện nhanh, ₫ơn giản — Sử dụng tiết kiệm bộ nhớ Chương 4: Khái quát về cấu trúc dữ liệu © 2005 - HMS 22 Sử dụng kiểu mảng? Số phần tử trong một mảng thực chất không bao giờ thay ₫ổi ₫ược Dung lượng bộ nhớ vào thời ₫iểm cấp phát phải biết trước, không thực sự co giãn ₫ược . thuộcvào —Cấutrúcdữ liệu ₫ượcsử dụng —Giảithuật ₫ượcápdụng cho bổ sung, tìm kiếm, sắpxếp, xóa bỏ 7 © 2004, HOÀNG MINH SƠN Chương 4: Khái quát về cấutrúcdữ liệu © 2005 - HMS Các cấutrúcdữ liệu thông. biểudiễndữ liệu: ₫ịnh nghĩakiểudữ liệumớisử dụng cấu trúc (struct, class, union, ) 4.1 Giớithiệuchung 4 © 2004, HOÀNG MINH SƠN Chương 4: Khái quát về cấutrúcdữ liệu © 2005 - HMS  Đasố những dữ liệuthuộcmột. Khái quát về cấutrúcdữ liệu © 2005 - HMS Nộidung chương 4 4.1 Cấutrúcdữ liệulàgì? 4.2 Mảng và quảnlýbộ nhớ₫ộng 4.2 Xây dựng cấu trúc Vector 4.3 Xây dựng cấutrúcList 3 © 2004, HOÀNG MINH SƠN Chương

Ngày đăng: 06/07/2014, 22:20

Từ khóa liên quan

Mục lục

  • Kỹ thuật lập trình

  • Nội dung chương 4

  • 4.1 Giới thiệu chung

  • Vấn đề: Biểu diễn tập hợp dữ liệu

  • Vấn đề: Quản lý (tập hợp) dữ liệu

  • Quản lý DL thế nào là hiệu quả?

  • Các cấu trúc dữ liệu thông dụng

  • Các cấu trúc dữ liệu thông dụng (tiếp)

  • 4.2 Mảng và quản lý bộ nhớ động

  • Mảng động

  • Cấp phát và giải phóng bộ nhớ động

  • Một số điều cần lưu ý

  • Cấp phát bộ nhớ động cho biến đơn

  • Ý nghĩa của sử dụng bộ nhớ động

  • Ví dụ sử dụng bộ nhớ động trong hàm

  • Tham số đầu ra là con trỏ?

  • 4.3 Xây dựng cấu trúc Vector

  • Định nghĩa cấu trúc Vector

  • Định nghĩa các hàm cơ bản

  • Ví dụ sử dụng

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

Tài liệu liên quan