1. Trang chủ
  2. » Luận Văn - Báo Cáo

Bài 4 cấu TRÚC dữ LIỆU

121 2 0

Đ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

Nội dung

Trịnh Thành Trung (ThS) trungtt@soict.hust.edu.vn Bài CẤU TRÚC DỮ LIỆU Các toán thực tế thường phức tạp 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 Cấu trúc liệu cách tổ chức thao tác có hệ thống liệu Mô tả  Các liệu cấu thành  Mối liên kết mặt cấu trúc liệu Cung cấp thao tác liệu Đặc trưng cho kiểu liệu Dữ liệu, kiểu liệu & cấu trúc liệu Machine Level Data Storage Primitive Data Types 0100110001101001010001 3.1415 28 array Basic Data Structures High-Level Data Structures 'A' stack queue hash table list tree Các kiểu liệu 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/C++: int, long, char, bool ▫Thao tác số nguyên: + - * / 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 Nội dung Mảng Danh sách Ngăn xếp Hàng đợi Cây Mảng Array Mảng Array ▪ 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 ▫ C không giới hạn số chiều mảng Cú pháp DataType ArrayName[size]; mảng nhiều chiều DataType ArrayName[size 1][size 2] [size n]; Khởi tạo giá trị mảng ▪ C1 Khi khai báo 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; Danh sách List Ứng dụng nhị phân ▪ Cây biểu diễn biểu thức ▫ Tính giá trị biểu thức ▫ Tính đạo hàm ▪ Cây định Cây biểu diễn biểu thức ▪ loại nhị phân đặc biệt, đó: 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 Cây biểu diễn biểu thức ▪ Các mức thứ tự ưu tiên ▫ 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 tốn mức cao tính sau các phép tốn có mức thấp ▫ Phép tốn gốc ln thực cuối Cây biểu diễn biểu thức ▪ 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) Cài đặt biểu thức ▪ Mỗi nút có trỏ 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 }; Cài đặt biểu thức ▪ InfoNode có dạng enum OpType { OPERATOR, OPERAND } ; struct InfoNode { OpType whichType; union // ANONYMOUS { char operator; int operand ; } }; union Cài đặt biểu thức 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) / } } } Eval(ptr->right) ) ; Eval(ptr->right) ) ; Eval(ptr->right) ) ; Eval(ptr->right) ) ; Cây tổng quát ▪ Biểu diễn giống nhị phân? ▫ Mỗi nút chứa giá trị trỏ trỏ đến nút nó? ▫ Bao nhiêu trỏ cho nút? Không hợp lý ▪ Mỗi nút chứa giá trị trỏ trỏ đến “tập” nút ▫ Xây dựng “tập”? Cây tổng quát ▪ Mỗi nút có trỏ: ▫ trỏ trỏ đến nút nó, ▫ trỏ trỏ đến nút anh em kề với Ví dụ Cây tổng qt Duyệt tổng quát ▪ 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ứ tự ▪ Thứ tự sau: Ứng dụng Cây định ▪ 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: ▫ 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: ▸ Đồng tiền k chuẩn nặng hay nhẹ ▸ Số phép cân Cây định 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ẹ”); } Thanks! Any questions? Email me at trungtt@soict.hust.edu.vn Presentation template by SlidesCarnival ... đị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 Cấu trúc liệu cách tổ chức thao tác có hệ thống liệu Mô tả  Các liệu cấu thành  Mối liên kết mặt cấu trúc liệu Cung cấp... trúc liệu Cung cấp thao tác liệu Đặc trưng cho kiểu liệu Dữ liệu, kiểu liệu & cấu trúc liệu Machine Level Data Storage Primitive Data Types 0100110001101001010001 3. 141 5 28 array Basic Data Structures... return(stack->count==stack->stackMax); } Ứng dụng Bài toán đổi số Chuyển số từ hệ thập phân sang hệ số ▪ (cơ số 8) 2810 = × 81+ × 80= 348 ▪ (cơ số 4) 7210 = × 43 + × 42 + × 41 + × 40 = 102 04 ▪ (cơ số 2) 5310 = × 25+ × 24+ × 23+ × 22+

Ngày đăng: 22/12/2022, 10:09

w