Kỹ thuật lập trình C phần 4 pptx

32 264 0
Kỹ thuật lập trình C phần 4 pptx

Đ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ươn g 1 Kỹ thuật lập trình 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 9/8/2006 y = A*x + B*u; x = C*x + d*u; StateController start() stop() LQGController start() stop() Chương 4: Khái quát về cấu trúc dữ liệu 2 © 2004, HOÀNG MINH SƠN Chương 4: Khái quát về cấutrúcdữ liệu 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 4.1 Giớithiệuchung  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 © 2004, HOÀNG MINH SƠN Chương 4: Khái quát về cấutrúcdữ liệu Vấn ₫ề: Biểudiễntậphợpdữ liệu  Đ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ụ: — Danhsáchsinhviên: Cácdữ 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! 5 © 2004, HOÀNG MINH SƠN Chương 4: Khái quát về cấutrúcdữ liệu 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 QuảnlýDL thế nàolà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 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 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 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 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++ [...]... return c; } Chương 4: Khái quát về c u tr c dữ liệu 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); // © 20 04, 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 21 4. 4 Xây dựng c u tr c List Vấn ₫ề: Xây dựng một c u tr c ₫ể quản lý một c ch hiệu... Vector Tên file: vector.h C u tr c dữ liệu: struct Vector { double *data; int nelem; }; © 20 04, HOÀNG MINH SƠN Khai báo c c hàm c bản: Vector void double void Vector Vector double createVector(int n, double init); destroyVector(Vector); getElem(Vector, int i); putElem(Vector, int i, double d); addVector(Vector, Vector); subVector(Vector, Vector); scalarProd(Vector, Vector); Chương 4: Khái quát về c u... c c dữ liệu ₫ộng, ví dụ: — — — — Hộp thư ₫iện tử Danh sách những vi c cần làm C c ₫ối tượng ₫ồ họa trên hình vẽ C c khâu ₫ộng h c trong sơ ₫ồ mô phỏng hệ thống (tương tự trong SIMULINK) © 20 04, HOÀNG MINH SƠN C c yêu c u ₫ 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... ps->code = 1000; delete ps; Một biến ₫ơn kh c với mảng một phần tử! Chương 4: Khái quát về c u tr c dữ liệu 13 Ý nghĩa c a sử dụng bộ nhớ ₫ộng Hiệu suất: — Bộ nhớ ₫ư c cấp phát ₫ủ dung lượng theo yêu c u và khi ₫ư c yêu c u trong khi chương trình ₫ã chạy — Bộ nhớ ₫ư c cấp phát nằm trong vùng nhớ tự do c n lại c a máy tính (heap), chỉ phụ thu c vào dung lượng bộ nhớ c a máy tính — Bộ nhớ c thể ₫ư c. .. 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 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 chuyển con trỏ, thời gian th c hiện là hằng số, không phụ thu c vào chiều dài và vị trí — C thể truy nhập và duyệt c c phần tử theo kiểu tuần tự © 20 04, HOÀNG... 0; } Chương 4: Khái quát về c u tr c dữ liệu 19 © 20 04, HOÀNG MINH SƠN void putElem(Vector v, int i, double d) { if (i >=0 && i < v.nelem) v.data[i] = d; } Vector addVector(Vector a, Vector b) { Vector c = {0,0}; if (a.nelem == b.nelem) { c = createVector(a.nelem,0.0); for (int i=0; i < a.nelem; ++i) c. data[i] = a.data[i] + b.data[i]; } return c; } Vector subVector(Vector a, Vector b) { Vector c = {0,0};... 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 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 © 20 04, HOÀNG MINH SƠN Item A Dữ liệu X Item Y 0x00 Chương 4: Khái quát về c u tr c dữ... tử c a mảng c n c p phát bộ nhớ (trong vùng heap), trả về con trỏ c kiểu, trả về 0 nếu không thành c ng — Toán tử delete[] yêu c u tham số là con trỏ c kiểu — Toán tử new và delete c n c thể áp dụng cho c p phát và giải phóng bộ nhớ cho một biến ₫ơn, một ₫ối tượng chứ không nhất thiết phải một mảng Chương 4: Khái quát về c u tr c dữ liệu 11 Một số ₫iều c n lưu ý © 20 04, HOÀNG MINH SƠN Con trỏ c ... holidays:"; cin >> n; Date* date_list; createDateList(n, date_list); for (int i=0; i < n; ++i) { } for ( ) { cout subject > c; removeAllMessages(myMailBox); } Chương 4: Khái quát về c u tr c dữ liệu 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 (₫ưa ngày tháng là tham số) Xóa bỏ ₫i một ngày lễ ở ₫ầu danh sách . 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 © 20 04, HOÀNG MINH SƠN Chương 4: Khái quát về c utrúcdữ liệu 4. 1 Giớithiệuchung . MINH SƠN Chương 4: Khái quát về c utrúcdữ liệu 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. SƠN Chương 4: Khái quát về c utrúcdữ liệu 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

Ngày đăng: 12/08/2014, 19:21

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

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

Tài liệu liên quan