1. Trang chủ
  2. » Công Nghệ Thông Tin

Tìm hiểu các dữ liệu phức hộp trong lập trình pptx

31 307 1

Đ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

Cấu trú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

  • 4.4 Xây dựng cấu trúc List

  • Sử dụng kiểu mảng?

  • Danh sách móc nối (linked list)

  • Bổ sung dữ liệu

  • Xóa bớt dữ liệu

  • Các đặc điểm chính

  • Ví dụ: Danh sách thông báo (hộp thư)

  • Chương trình minh họa

  • Bài tập về nhà

Nội dung

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 Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com TÌM HIỂU CÁC DỮ LIỆU PHỨC HỘP TRONG LẬP TRÌNH NỘI DUNG BÀI HỌC: 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, ) Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com 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! Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com 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₫ó — Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com 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ỏ Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com 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 Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com 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, Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com 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 Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com 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++ Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com 11 © 2004, HOÀNG MINH SƠN Chương 4: Khái quát về cấutrúcdữ liệu Cấpphátvàgiải phóng bộ nhớ₫ộng  C: —Hàmmalloc() yêu cầuthamsố là số byte, trả về con trỏ không kiểu(void*) mang ₫ịachỉ vùng nhớ mới ₫ượccấp phát (nằm trong heap), trả về 0 nếu không thành công. —Hàmfree() yêu cầuthamsố là con trỏ không kiểu(void*), giải phóng vùng nhớ có ₫ịachỉ₫ưavào  C++: —Toántử new chấpnhậnkiểudữ liệuphầntử kèm theo số lượng phầntử củamảng cầncấpphátbộ nhớ (trong vùng heap), trả về con trỏ có kiểu, trả về 0 nếu không thành công. —Toántử delete[] yêu cầuthamsố là con trỏ có kiểu. —Toántử new và delete còn có thể áp dụng cho cấpphátvà giải phóng bộ nhớ cho mộtbiến ₫ơn, một ₫ốitượng chứ không nhấtthiế tphảimộtmảng. Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com [...]... Item A Dữ liệu X Item Y 0x00 Chương 4: Khái quát về cấu trúc dữ liệu Dữ liệu Y 24 Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com 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 Bổ sung vào ₫ầu danh sách Chương 4: Khái quát về cấu trúc dữ liệu 0x00 Dữ liệu. .. http://www.simpopdf.com Xóa bớt 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 26 Ư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... trúc ₫ể quản lý một cách hiệu quả và linh hoạt 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) © 2004, 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... 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 23 Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com 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ó thể truy nhập và duyệt các 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 27 Simpo PDF Merge and... về cấu trúc dữ liệu // // // // never do it access violation! OK OK // // // // OK access violation! very bad! OK, new array 12 Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Cấp phát bộ nhớ ₫ộng cho biến ₫ơn Ý nghĩa: Các ₫ối tượng có thể ₫ược tạo ra ₫ộng, trong khi chương trình chạy (bổ sung sinh viên vào danh sách, vẽ thêm một hình trong bản vẽ, bổ sung một khâu trong hệ thống,... Chương 4: Khái quát về cấu trúc dữ liệu 16 Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com 4.3 Xây dựng cấu trúc Vector Vấn ₫ề: Biểu diễn một vector toán học trong C/C++? Giải pháp chân phương: mảng ₫ộng thông thường, nhưng © 2004, HOÀNG MINH SƠN — Sử dụng không thuận tiện: Người sử dụng tự gọi các lệnh cấp phát và giải phóng bộ nhớ, trong các hàm luôn phải ₫ưa tham số là... } Chương 4: Khái quát về cấu trúc dữ liệu 31 Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Chương trình minh họa Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com 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... 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 Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Ý 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... 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 17 Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Đị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 n, double . http://www.simpopdf.com TÌM HIỂU CÁC DỮ LIỆU PHỨC HỘP TRONG LẬP TRÌNH NỘI DUNG BÀI HỌC: 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ế. 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ổ. 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ự,

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

TỪ KHÓA LIÊN QUAN

w