CHƯƠNG 4 một số cấu TRÚC dữ LIỆU và GIẢI THUẬT căn bản 2 cấu TRÚC dữ LIỆU

123 2K 0
CHƯƠNG 4 một số cấu TRÚC dữ LIỆU và GIẢI THUẬT căn bản 2 cấu TRÚC dữ LIỆU

Đ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

Chương Một số cấu trúc liệu giải thuật 1.Đêê qui 2.Cấu trúc dữ liêêu (5LT-3BT) 11/11/15 Last Update 8-2010 SE-SoICT KTLT4-2.1 Các khái niệm Cấu trúc liệu • Cấu trúc dữ liệu cách tổ chức thao tác có hệ thống dữ liệu • Một cấu trúc dữ 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 – Xác định thao tác liệu 11/11/15 Last Update 8-2010 SE-SoICT KTLT4-2.2 Các khái niệm Kiểu liệu • Kiểu dữ 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ụ: • Kiểu dữ liệu có cấu trúc (structured data type) • C/C++: int, long, char, boolean, v.v • Thao tác số nguyên: + - * / 11/11/15 Last Update 8-2010 SE-SoICT – Đượ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 KTLT4-2.3 Các khái niệm Dữ liệu, kiểu liệu, cấu trúc liệu Machine Level Data Storage 0100110001101001010001 3.1415 28 Primitive Data Types array Basic Data Structures High-Level Data Structures 11/11/15 Last Update 8-2010 'A' SE-SoICT stack queue hash table list tree KTLT4-2.4 II Cấu trúc liệu • • • • 11/11/15 Last Update 8-2010 Mảng ( tự đọc ) Danh sách Cây Bảng băm SE-SoICT KTLT4-2.5 • Danh sách (list) Danh sách : – Tập hợp phần tử kiểu – Số lượng phần tử danh sách khơng cố định • Phân loại: – Danh sách tuyến tính: • Có phần tử đầu tiên, phần tử cuối • Thứ tự trước / sau phần tử xác định rõ ràng – Danh sách khơng tuyến tính: phần tử danh sách khơng thứ tự • Có nhiều hình thức lưu trữ danh sách – Sử dụng vùng ô nhớ liên tiếp nhớ  danh sách – Sử dụng vùng ô nhớ không liên tiếp nhớ  danh sách móc nối • Danh sách nối đơn • Danh sách nối kép ………………… 11/11/15 Last Update 8-2010 SE-SoICT KTLT4-2.6 Danh sách • Thao tác danh sách tuyến tính – Khởi tạo danh sách (create) – Kiểm tra danh sách rỗng (isEmpty) – Kiểm tra danh sách đầy (isFull) – Tính kích thước (sizeOf) – Xóa rỗng danh sách (clear) – Thêm phần tử vào danh sách ví trí cụ thể (insert) – Loại bỏ phần tử vị trí cụ thể khỏi danh sách (remove) – Lấy phần tử vị trí cụ thể (retrieve) – Thay giá trị phần tử vị trí cụ thể (replace) – Duyệt danh sách thực thao tác vị trí danh sách (traverse) – 11/11/15 Last Update 8-2010 SE-SoICT KTLT4-2.7 1.1 Danh sách • Sử dụng vector lưu trữ gồm số ô nhớ liên tiếp để lưu trữ danh sách tuyến tính – Các phần tử liền kề lưu trữ ô nhớ liền kề – Mỗi phần tử danh sách gán số thứ tự lưu trữ vector – Tham chiếu đến phần tử sử dụng địa tính giống lưu trữ mảng 11/11/15 Last Update 8-2010 i SE-SoICT last n-1 KTLT4-2.8 1.1 Danh sách • Ưu điểm cách lưu trữ – Tốc độ truy cập vào phần tử danh sách nhanh • Nhược điểm cách lưu trữ – Cần phải biết trước kích thước tối đa danh sách • Tại sao? – Thực phép toán bổ sung phần tử loại bỏ phần tử cũ tốn • Tại sao? 11/11/15 Last Update 8-2010 SE-SoICT KTLT4-2.9 • 1.1.a Thêm phần tử vào danh sách trường hợp – insert(index, element): thêm phần tử element vào vị trí cụ thể index – insert(list, element): thêm phần tử element vào vị trí danh sách list • Điều kiện tiên quyết: – Danh sách phải khởi tạo – Danh sách chưa đầy – Phần tử thêm vào chưa có danh sách • Điều kiện hậu nghiệm: – Phần tử cần thêm vào có danh sách insert(3, ‘z’) z a b c d e f g h 11/11/15 Last Update 8-2010 SE-SoICT KTLT4-2.10 count=9 count=8 Cây tổng quát 3.1 Biểu diễn 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” nào? 11/11/15 Last Update 8-2010 SE-SoICT KTLT4-2.109 Biểu diễn tổng quát • Sử dụng trỏ mở rộng hơn: – �Mỗi nút có trỏ: trỏ trỏ đến nút nó, trỏ trỏ đến nút anh em kề với – �Cách cho phép quản lý số lượng tùy ý nút 11/11/15 Last Update 8-2010 SE-SoICT KTLT4-2.110 Ví dụ 11/11/15 Last Update 8-2010 SE-SoICT KTLT4-2.111 3.2 Duyệt tổng quát 1.Thứ tự trước: 1.Thăm gốc 2.Duyệt thứ nhất theo thứ tự trước 3.Duyệt lại theo thứ tự trước 2.Thứ tự giữa 1.Duyệt thứ nhất theo thứ tự giữa 2.Thăm gốc 3.Duyệt lại theo thứ tự giữa 3.Thứ tự sau: 1.Duyệt thứ nhất theo thứ tự sau 2.Duyệt lại theo thứ tự sau 3.Thăm gốc 11/11/15 Last Update 8-2010 SE-SoICT KTLT4-2.112 Ứ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 11/11/15 Last Update 8-2010 SE-SoICT KTLT4-2.113 Cây biểu diễn biểu thức Một loại nhị phân đặc biệt, đó: Mỗi nút chứa toán hạng Mỗi nút giữa 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 11/11/15 Last Update 8-2010 SE-SoICT KTLT4-2.114 Biểu thức nhị phân 11/11/15 Last Update 8-2010 SE-SoICT KTLT4-2.115 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 11/11/15 Last Update 8-2010 SE-SoICT KTLT4-2.116 • 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 + / * 11/11/15 Last Update 8-2010 SE-SoICT KTLT4-2.117 (thực chất phép duyệt theo tt 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 }; 11/11/15 Last Update 8-2010 SE-SoICT KTLT4-2.118 • InfoNode có dạng enum OpType { OPERATOR, OPERAND } ; struct InfoNode { OpType whichType; union // ANONYMOUS union { char operator; int operand ; } }; 11/11/15 Last Update 8-2010 SE-SoICT KTLT4-2.119 int Eval(TreeNode* ptr){ switch(ptr->info.whichType) { case OPERAND : returnptr->info.operand ; case OPERATOR : switch ( tree->info.operation ){ case ‘+’: return ( Eval( ptr->left ) + Eval( ptr->right ) ) ; case ‘-’: return ( Eval( ptr->left ) -Eval( ptr->right ) ) ; case ‘*’: return ( Eval( ptr->left ) * Eval( ptr->right ) ) ; case ‘/’: return ( Eval( ptr->left ) / Eval( ptr->right ) ) ; } } } 11/11/15 Last Update 8-2010 SE-SoICT KTLT4-2.120 Cây định (tự đọc) • Dùng để biểu diễn lời giải toán cần định lựa chọn • Bài tố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 11/11/15 Last Update 8-2010 SE-SoICT KTLT4-2.121 11/11/15 Last Update 8-2010 SE-SoICT KTLT4-2.122 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ẹ”); } 11/11/15 SE-SoICT Last Update 8-2010 KTLT4-2.123 ... Update 8 -20 10 SE-SoICT KTLT4 -2 .47 Ứng dụng Stack �Bài toán đổi số: Chuyển số từ hệ thập phân sang hệ số bất kỳ • (base 8) 28 10 = 3•81+ 4? ??80= 348 • (base 4) 721 0 = 1? ?43 + 0? ? 42 + 2? ? ?41 + 0? ?40 = 1 02 04 • (base... 0? ?40 = 1 02 04 • (base 2) 5310 = ? ?25 + • 24 + ? ?23 + ? ?22 + ? ?21 + ? ?20 = 11010 12 11/11/15 Last Update 8 -20 10 SE-SoICT KTLT4 -2 .48 Đầu vào số thập phân n, số a Đầu số hệ số b tương đương 1.Chữ số bên phải nhất... niệm Cấu trúc liệu • Cấu trúc dữ liệu cách tổ chức thao tác có hệ thống dữ liệu • Một cấu trúc dữ 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 – Xác định thao tác liệu

Ngày đăng: 11/11/2015, 16:56

Từ khóa liên quan

Mục lục

  • Slide 1

  • 1. Các khái niệm cơ bản Cấu trúc dữ liệu

  • 1. Các khái niệm cơ bản Kiểu dữ liệu

  • 1. Các khái niệm cơ bản Dữ liệu, kiểu dữ liệu, cấu trúc dữ liệu

  • II. Cấu trúc dữ liệu

  • 1. Danh sách (list)

  • 1. Danh sách

  • 1.1. Danh sách kế tiếp

  • Slide 9

  • 1.1.a. Thêm một phần tử vào một danh sách kế tiếp

  • Slide 11

  • 1.1.b.Xóa 1 phần tử khỏi danh sách kế tiếp

  • Slide 13

  • 1.1.c.Duyệt danh sách kế tiếp

  • 1.2. Danh sách nối đơn

  • Tổ chức danh sách móc nối

  • Khởi tạo và truy cập danh sách móc nối

  • Truyền danh sách móc nối vào hàm

  • Thêm một nút mới

  • Thêm vào danh sách rỗng

Tài liệu cùng người dùng

Tài liệu liên quan