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

Bài giảng Programming technique: Chương 4 - Lương Mạnh Bá (tt)

123 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

Thông tin cơ bản

Định dạng
Số trang 123
Dung lượng 3,74 MB

Nội dung

Bài giảng Programming technique - Chương 4: Một số cấu trúc dữ liệu và giải thuật căn bản trình bày các nội dung của phần Cấu trúc dữ liệu bao gồm: Các khái niệm cơ bản về cấu trúc dữ liệu, danh sách, các thao tác cơ bản trên Stack, ký pháp hậu tố, Queue, cấu trúc cây,... Mời các bạn cùng tham khảo nội dung chi tiết.

Chương Một số cấu trúc liệu giải thuật 1.Đệ qui 2.Cấu trúc liệu (5LT-3BT) 13/10/2015 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 liệu cách tổ chức thao tác có hệ thống liệu • Một cấu trúc 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 13/10/2015 Last Update 8-2010 SE-SoICT KTLT4-2.2 Các khái niệm 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ụ: • Kiểu liệu có cấu trúc (structured data type) • C/C++: int, long, char, boolean, v.v • Thao tác số nguyên: + - * / 13/10/2015 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 stack queue hash table 13/10/2015 Last Update 8-2010 'A' SE-SoICT list tree KTLT4-2.4 II Cấu trúc liệu • • • • 13/10/2015 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 ………………… 13/10/2015 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) – 13/10/2015 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 13/10/2015 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? 13/10/2015 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 13/10/2015 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? 13/10/2015 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 13/10/2015 Last Update 8-2010 SE-SoICT KTLT4-2.110 Ví dụ 13/10/2015 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ứ theo thứ tự trước 3.Duyệt lại theo thứ tự trước 2.Thứ tự 1.Duyệt thứ theo thứ tự 2.Thăm gốc 3.Duyệt lại theo thứ tự 3.Thứ tự sau: 1.Duyệt thứ theo thứ tự sau 2.Duyệt lại theo thứ tự sau 3.Thăm gốc 13/10/2015 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 13/10/2015 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 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 13/10/2015 Last Update 8-2010 SE-SoICT KTLT4-2.114 Biểu thức nhị phân 13/10/2015 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 13/10/2015 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 + / * 13/10/2015 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 }; 13/10/2015 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 ; } }; 13/10/2015 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 ) ) ; } } } 13/10/2015 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 13/10/2015 Last Update 8-2010 SE-SoICT KTLT4-2.121 13/10/2015 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ẹ”); } 13/10/2015 Last Update 8-2010 SE-SoICT KTLT4-2.123 ... Last Update 8-2 010 SE-SoICT KTLT 4-2 .47 Ứng dụng Stack Bài toán đổi số:Chuyển số từ hệ thập phân sang hệ số • (base 8) 2810 = 3•81+ 4? ??80= 348 • (base 4) 7210 = 1? ?43 + 0? ?42 + 2? ?41 + 0? ?40 = 102 04 • (base... (Cur->data < item) Cur = Cur->next; else break; } New->next = Cur; New->prev= Cur->prev; Cur->prev= New; (New->prev )-> next = New; } 13/10/2015 Last Update 8-2 010 SE-SoICT KTLT 4-2 .36 Bài tập Sử dụng danh... stack rỗng*/ stack->top = -1 ; stack->count = 0; stack->stackMax= max; stack->stackArr=malloc(max * sizeof(int)); return stack ; } 13/10/2015 Last Update 8-2 010 SE-SoICT KTLT 4-2 .44 Push Int PushStack(IntStack

Ngày đăng: 10/05/2021, 13:39