Bài giảng Kỹ thuật lập trình – Chương 7: Cấu trúc dữ liệu trang bị cho người học những kiến thức cơ bản như: Định nghĩa cấu trúc dữ liệu; dữ liệu, kiểu dữ liệu & cấu trúc dữ liệu; các kiểu dữ liệu; mảng; danh sách; ngăn xếp; hàng đợi; cây.
ng c om Trịnh Thành Trung (ThS) trungtt@soict.hust.edu.vn cu u du o ng th an co Bài CẤU TRÚC DỮ LIỆU CuuDuongThanCong.com https://fb.com/tailieudientucntt an th cu u du o ng Phải xác định o Các liệu liên quan đến toán o Các thao tác cần thiết để giải toán co ng c om Các toán thực tế thường phức tạp CuuDuongThanCong.com https://fb.com/tailieudientucntt Mô tả Các liệu cấu thành Mối liên kết mặt cấu trúc liệu an Cung cấp thao tác liệu Đặc trưng cho kiểu liệu cu u du o ng th cách tổ chức thao tác có hệ thống liệu co ng c om Cấu trúc liệu CuuDuongThanCong.com https://fb.com/tailieudientucntt Machine Level Data Storage c om Dữ liệu, kiểu liệu & cấu trúc liệu an co ng 0100110001101001010001 3.1415 28 'A' du o ng th Primitive Data Types array cu u Basic Data Structures High-Level Data Structures stack queue hash table CuuDuongThanCong.com https://fb.com/tailieudientucntt list tree an co ng Kiểu liệu có cấu trúc (structured data type) ▪Được xây dựng từ kiểu liệu (cơ bản, có cấu trúc) khác ▪Có thể ngơn ngữ lập trình định nghĩa sẵn lập trình viên tự định nghĩa th cu u du o ng Kiểu liệu (primitive data type) ▪Đại diện cho liệu giống nhau, phân chia nhỏ ▪Thường ngơn ngữ lập trình định nghĩa sẵn ▪Ví dụ c om Các kiểu liệu ▫C/C++: int, long, char, bool ▫Thao tác số nguyên: + - * / CuuDuongThanCong.com https://fb.com/tailieudientucntt .c om ng cu u du o Mảng Danh sách Ngăn xếp Hàng đợi Cây th an co ng Nội dung CuuDuongThanCong.com https://fb.com/tailieudientucntt .c om th an co ng Mảng cu u du o ng Array CuuDuongThanCong.com https://fb.com/tailieudientucntt .c om Mảng Array co ng ▪ Dãy hữu hạn phần tử liên tiếp có kiểu tên ▪ Một hay nhiều chiều du o Cú pháp ng th an ▫ C không giới hạn số chiều mảng DataType ArrayName[size]; cu u mảng nhiều chiều DataType ArrayName[size 1][size 2] [size n]; CuuDuongThanCong.com https://fb.com/tailieudientucntt .c om Khởi tạo giá trị mảng co ng ▪ C1 Khi khai báo cu u du o ng th an float y[5] = { 3.2, 1.2, 4.5, 6.0, 3.6 } int m[6][2] = { { 1, }, { 1, }, { 2, }, { 2, }, { 3, }, { 3, } }; char s1[6] = { 'H', 'a', 'n', 'o', 'i', '\0' }; //hoặc char s1[6] = "Hanoi"; char s1[] = "Dai hoc Bach Khoa Hanoi"; //L = 24 int m[][] = { { 1, 2, }, { 4, 5, } }; ▪ C2 Khai báo gán giá trị cho phần tử mảng int m[4]; m[0] = 1; m[1] = 2; m[2] = 3; m[3] = 4; CuuDuongThanCong.com https://fb.com/tailieudientucntt .c om ng co an cu u du o ng List th Danh sách CuuDuongThanCong.com https://fb.com/tailieudientucntt .c om Ứng dụng nhị phân ng ▪ Cây biểu diễn biểu thức an cu u du o ng th ▪ Cây định co ▫ Tính giá trị biểu thức ▫ Tính đạo hàm CuuDuongThanCong.com https://fb.com/tailieudientucntt .c om Cây biểu diễn biểu thức u du o ng th an co Mỗi nút chứa toán hạng Mỗi nút chứa toán tử Cây trái phải nút toán tử thể biểu thức cần đánh giá trước thực toán tử nút gốc cu ng ▪ loại nhị phân đặc biệt, đó: CuuDuongThanCong.com https://fb.com/tailieudientucntt .c om Cây biểu diễn biểu thức ng ▪ Các mức thứ tự ưu tiên cu u du o ng th an co ▫ Các mức (độ sâu) nút thứ tự ưu tiên tương đối chúng biểu thức (không cần dùng ngoặc để thể thứ tự ưu tiên) ▫ Các phép toán mức cao tính sau các phép tốn có mức thấp ▫ Phép tốn gốc thực cuối CuuDuongThanCong.com https://fb.com/tailieudientucntt .c om Cây biểu diễn biểu thức cu u du o ng th an co ng ▪ Dễ dàng để tạo biểu thức tiền tố, trung tố, hậu tố ▪ Trung tố: ( ( -5 ) * ( ( + ) / ) ) ▪ Tiền tố: * -8 / + ▪ Hậu tố: -4 + / * (thực chất phép duyệt theo thứ tự giữa, trước sau) CuuDuongThanCong.com https://fb.com/tailieudientucntt .c om Cài đặt biểu thức co ng ▪ Mỗi nút có trỏ cu u du o ng th an struct TreeNode { InfoNode info ;// Dữ liệu TreeNode *left ;// Trỏ tới nút trái TreeNode *right ; // Trỏ tới nút phải }; CuuDuongThanCong.com https://fb.com/tailieudientucntt .c om Cài đặt biểu thức co ng ▪ InfoNode có dạng union cu u du o ng th an enum OpType { OPERATOR, OPERAND } ; struct InfoNode { OpType whichType; union // ANONYMOUS { char operator; int operand ; } }; CuuDuongThanCong.com https://fb.com/tailieudientucntt .c om Cài đặt biểu thức Eval(ptr->right) ) ; Eval(ptr->right) ) ; cu u du o ng th an co ng int Eval(TreeNode* ptr){ switch(ptr->info.whichType) { case OPERAND : return ptr->info.operand; case OPERATOR : switch ( tree->info.operation ){ case ‘+’: return ( Eval(ptr->left) + case ‘-’: return ( Eval(ptr->left) – case ‘*’: return ( Eval(ptr->left) * case ‘/’: return ( Eval(ptr->left) / } } } CuuDuongThanCong.com Eval(ptr->right) ) ; Eval(ptr->right) ) ; https://fb.com/tailieudientucntt ng ▪ Biểu diễn giống nhị phân? c om Cây tổng quát ng th an co ▫ Mỗi nút chứa giá trị trỏ trỏ đến nút nó? ▫ Bao nhiêu trỏ cho nút? du o Không hợp lý cu u ▪ Mỗi nút chứa giá trị trỏ trỏ đến “tập” nút ▫ Xây dựng “tập”? CuuDuongThanCong.com https://fb.com/tailieudientucntt .c om Cây tổng quát ng ▪ Mỗi nút có trỏ: cu u du o ng th an co ▫ trỏ trỏ đến nút nó, ▫ trỏ trỏ đến nút anh em kề với CuuDuongThanCong.com https://fb.com/tailieudientucntt cu u du o ng th an co ng c om Ví dụ Cây tổng quát CuuDuongThanCong.com https://fb.com/tailieudientucntt .c om Duyệt tổng quát ng ▪ Thứ tự trước: Thăm gốc Duyệt thứ theo thứ tự trước Duyệt lại theo thứ tự trước Duyệt thứ theo thứ tự Thăm gốc Duyệt lại theo thứ tự Duyệt thứ theo thứ tự sau Duyệt lại theo thứ tự sau Thăm gốc th an co cu ▪ Thứ tự sau: u du o ng ▪ Thứ tự CuuDuongThanCong.com https://fb.com/tailieudientucntt .c om Ứng dụng Cây định th an co ng ▪ Dùng để biểu diễn lời giải toán cần định lựa chọn ▪ Bài toán đồng tiền vàng: du o ng ▫ Có đồng tiền vàng a, b, c, d, e, f, g, h ▫ Có đồng có trọng lượng khơng chuẩn ▫ Sử dụng cân Roberval (2 đĩa) ▫ Output: cu u ▸ Đồng tiền k chuẩn nặng hay nhẹ ▸ Số phép cân CuuDuongThanCong.com https://fb.com/tailieudientucntt cu u du o ng th an co ng c om Cây định CuuDuongThanCong.com https://fb.com/tailieudientucntt cu u du o ng th an co ng c om void EightCoins(a, b, c, d, e, f, g, h) { if (a+b+c == d+e+f) { if (g > h) Compare(g, h, a); else Compare(h, g, a); } else if (a+b+c > d+e+f){ if (a+d == b+e) Compare(c, f, a); else if (a+d > b+e) Compare(a, e, b); else Compare(b, d, a); } else{ if (a+d == b+e) Compare(f,c,a); else if (a+d > b+e) Compare(d, b, a); else Compare(e, a, b); } } // so sánh x với đồng tiền chuẩn z void Compare(x,y,z){ if(x>y) printf(“x nặng”); else printf(“y nhẹ”); } CuuDuongThanCong.com https://fb.com/tailieudientucntt .c om th an co ng Thanks! du o ng Any questions? cu u Email me at trungtt@soict.hust.edu.vn CuuDuongThanCong.com Presentation template by SlidesCarnival https://fb.com/tailieudientucntt ... Kiểu liệu có cấu trúc (structured data type) ▪Được xây dựng từ kiểu liệu (cơ bản, có cấu trúc) khác ▪Có thể ngơn ngữ lập trình định nghĩa sẵn lập trình viên tự định nghĩa th cu u du o ng Kiểu liệu. .. cấu thành Mối liên kết mặt cấu trúc liệu an Cung cấp thao tác liệu Đặc trưng cho kiểu liệu cu u du o ng th cách tổ chức thao tác có hệ thống liệu co ng c om Cấu trúc liệu CuuDuongThanCong.com... CuuDuongThanCong.com https://fb.com/tailieudientucntt Machine Level Data Storage c om Dữ liệu, kiểu liệu & cấu trúc liệu an co ng 0100110001101001010001 3.1415 28 'A' du o ng th Primitive Data Types