Khái quát về cấu trúc dữ liệu phần 3 doc

8 384 0
Khái quát về cấu trúc dữ liệu phần 3 doc

Đang tải... (xem toàn văn)

Thông tin tài liệu

17 © 2004, HOÀNG MINH SƠN Chương 4: Khái quát về cấutrúcdữ liệu 4.3 Xây dựng cấutrúcVector  Vấn ₫ề: Biểudiễnmột vector toán họctrongC/C++?  Giải pháp chân phương: mảng ₫ộng thông thường, nhưng —Sử dụng không thuậntiện: Ngườisử dụng tự gọicáclệnh cấpphát và giải phóng bộ nhớ, trong các hàm luôn phải ₫ưathamsố là số chiều. —Sử dụng không an toàn: Nhầmlẫnnhỏ dẫn ₫ếnhậuquả nghiêm trọng int n = 10; double *v1,*v2, d; v1 = (double*) malloc(n*sizeof(double)); v2 = (double*) 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); 18 © 2004, HOÀNG MINH SƠN Chương 4: Khái quát về cấutrúcdữ liệu Định nghĩacấutrúcVector  Tên file: vector.h  Cấutrúcdữ liệu: struct Vector { double *data; int nelem; };  Khai báo các hàm cơ bản: Vector createVector(int n, double init); void destroyVector(Vector); double getElem(Vector, int i); void putElem(Vector, int i, double d); Vector addVector(Vector, Vector); Vector subVector(Vector, Vector); double scalarProd(Vector, Vector); 19 © 2004, HOÀNG MINH SƠN Chương 4: Khái quát về cấutrúcdữ liệu Định nghĩacáchàmcơ bản  Tên file: vector.cpp #include <stdlib.h> #include "vector.h" Vector createVector(int n, double init) { Vector v; v.nelem = n; v.data = (double*) malloc(n*sizeof(double)); while (n ) v.data[n] = init; return v; } void destroyVector(Vector v) { free(v.data); } double getElem(Vector v, int i) { if (i < v.nelem && i >= 0) return v.data[i]; return 0; } 20 © 2004, HOÀNG MINH SƠN Chương 4: Khái quát về cấutrúcdữ liệu 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}; return c; } 21 © 2004, HOÀNG MINH SƠN Chương 4: Khái quát về cấutrúcdữ liệu 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); // destroyVector(a); destroyVector(b); destroyVector(c); } 22 © 2004, HOÀNG MINH SƠN Chương 4: Khái quát về cấutrúcdữ liệu 4.4 Xây dựng cấutrúcList  Vấn ₫ề: Xây dựng mộtcấutrúc₫ể quảnlýmộtcách hiệuquả và linh hoạtcácdữ liệu ₫ộng, ví dụ: —Hộpthư₫iệntử — Danh sách những việccầnlàm —Các₫ốitượng ₫ồ họatrênhìnhvẽ — Các khâu ₫ộng họctrongsơ₫ồmô phỏng hệ thống (tương tự trong SIMULINK)  Các yêu cầu ₫ặc thù: —Số lượng mụcdữ liệutrongdanhsáchcóthể thay ₫ổithường xuyên — Các thao tác bổ sung hoặcxóadữ liệucần ₫ượcthựchiện nhanh, ₫ơngiản —Sử dụng tiếtkiệmbộ nhớ 23 © 2004, HOÀNG MINH SƠN Chương 4: Khái quát về cấutrúcdữ liệu Sử dụng kiểumảng?  Số phầntử trong mộtmảng thựcchất không bao giờ thay ₫ổi ₫ược. Dung lượng bộ nhớ vào thời ₫iểmcấp phát phảibiếttrước, không thựcsự co giãn ₫ược.  Nếu không thựcsự sử dụng hết dung lượng ₫ãcấp phát => lãng phí bộ nhớ  Nếu ₫ãsử dụng hếtdung lượng và muốnbổ sung phầntử thì phảicấpphátlạ i và sao chép toàn bộ dữ liệusang mảng mới=> cần nhiềuthờigiannếusố phầntử lớn  Nếumuốnchènmộtphầntử/xóa mộtphầntửở₫ầu hoặcgiữamảng thì phải sao chép và dịch toàn bộ phầndữ liệucònlại => rấtmấtthờigian 24 © 2004, HOÀNG MINH SƠN Chương 4: Khái quát về cấutrúcdữ liệu Danh sách móc nối (linked list) Dữ liệuA Dữ liệuB Dữ liệuX Dữ liệuY0x00 Dữ liệuC pHead Item A Item B Item C Item X Item Y . toàn bộ phầndữ liệucònlại => rấtmấtthờigian 24 © 2004, HOÀNG MINH SƠN Chương 4: Khái quát về cấutrúcdữ liệu Danh sách móc nối (linked list) Dữ liệuA Dữ liệuB Dữ liệuX Dữ liệuY0x00 Dữ liệuC pHead Item. destroyVector(a); destroyVector(b); destroyVector(c); } 22 © 2004, HOÀNG MINH SƠN Chương 4: Khái quát về cấutrúcdữ liệu 4.4 Xây dựng cấutrúcList  Vấn ₫ề: Xây dựng mộtcấutrúc₫ể quảnlýmộtcách hiệuquả và linh hoạtcácdữ liệu ₫ộng, ví dụ: —Hộpthư₫iệntử —. OOPS! free(v1); free(v2); 18 © 2004, HOÀNG MINH SƠN Chương 4: Khái quát về cấutrúcdữ liệu Định nghĩacấutrúcVector  Tên file: vector.h  Cấutrúcdữ liệu: struct Vector { double *data; int nelem; };  Khai

Ngày đăng: 31/07/2014, 04: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