TỔNG QUAN VỀ CẤU TRÚC DỮ LIỆU VÀ THUẬT GIẢI pptx

35 519 0
TỔNG QUAN VỀ CẤU TRÚC DỮ LIỆU VÀ THUẬT GIẢI pptx

Đ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 I : TỔNG QUAN VỀ CẤU TRÚC DỮ LIỆU VÀ THUẬT GIẢI CHƯƠNG II : MỘT SỐ THUẬT TOÁN TÌM KIẾM VÀ SẮP XẾP CHƯƠNG III : DANH SÁCH LIÊN KẾT - NGĂN XẾP VÀ HÀNG ĐỢI CHƯƠNG IV : CÂY 0 1 2 3 4 5 6 7 8 I. KHÁI NIỆM & KHAI BÁO BIẾN a 4 4 14 14 22 22 38 38 27 27 15 15 n 6 6 Cú pháp khai báo các phần tử của mảng #define size 200 int n; // số phần tử thực tế <Kiểu dữ liệu> <Tên mảng> [size]; 1. Nhập & Xuất mảng II. MỘT SỐ TÁC VỤ CƠ BẢN #include <iostream.h> #define size 200 int a[size]; void main() { int n, i; //Nhap so phan tu cin >> n //Nhap day for (i=0;i<n;i++) cin >> a[i]; //Xuat day for (i=0;i<n;i++) cout << a[i] << “ ”; } 1. Nhập & Xuất mảng II. MỘT SỐ TÁC VỤ CƠ BẢN void Input (int mang[ ], int n) { int i; for (i = 0 ; i < n ; i++) { cout << " Nhap phan tu thu " << i + 1 <<" : "; cin >> mang[i]; } } void Output (int mang[ ], int n) { int i; for (i = 0 ; i < n ; i++) cout << mang[i] << “ ”; cout <<"\n"; } 0 1 2 3 4 5 6 7 8 2. Chèn 1 phần tử x vào mảng tại vị trí thứ k a 4 4 14 14 22 22 38 38 27 27 15 15 n=6 n=6 n=7 n=7 II. MỘT SỐ TÁC VỤ CƠ BẢN k 19 19 void Insert (int x, int a[ ], int& n, int k) { int i; if ( k > n + 1 ) cout <<"Khong the chen \n"; else { n++; for (i = n; i >= k; i ) a[i] = a[i-1]; a[i] = x; } } 0 1 2 3 4 5 6 7 8 2. Xóa 1 phần tử x trong mảng tại vị trí thứ k A 4 4 14 14 22 22 38 38 27 27 15 15 n=6 n=6 n=5 n=5 II. MỘT SỐ TÁC VỤ CƠ BẢN k void Delete (int a[ ], int& n , int k) { int i; if ( k > n ) cout <<" Khong the xoa \n"; else { for (i = k-1; i < n; i++) a[i]=a[i+1]; n ; } } II. TÌM KIẾM 1. Tuần tự Ý Tưởng : 13 1 2 n 3 5 10 13 6 9 a[0] a[n-1] i=0 i=1 i i=2 i=3 3 Tìm thấy tại vị trí 419 i=4 i=5 -1 Tìm không thấy II. TÌM KIẾM 1. Tuần tự Ý Tưởng :  Duyệt từ đầu đến phần tử cần tìm  Nếu tìm thấy thì dừng, ngược lại thì duyệt tới cuối mảng thì cho kết quả tìm không thấy II. TÌM KIẾM 1. Tuần tự Giải thuật : Bước 1 : Cho i = 0 Bước 2 : Nếu a[i] == x thì dừng chương trình, xuất kết quả tìm thấy Bước 3 : Ngược lại tăng i lên một đơn vị Bước 4 : Lặp lại bước 2 và 3 đến khi i >= n thì qua bước 5 Bước 5 : Kết luận không tìm thấy II. TÌM KIẾM 1. Tuần tự Giải thuật : Hàm Sequence_Search Cho i = 0 Thực hiện Nếu a[i] == x thì dừng ct, trả về kết quả tìm thấy ngược lại tăng i thêm 1 Lặp lại thực hiện đến khi i >= n Trả về kết quả tìm không thấy Hàm Sequence_Search Cho i = 0 Thực hiện Nếu a[i] == x thì dừng ct, trả về kết quả tìm thấy ngược lại tăng i thêm 1 Lặp lại thực hiện đến khi i >= n Trả về kết quả tìm không thấy int Sequence_Search (int a[ ], int n, int x) { int i = 0; do { if (a[i] == x) return i; else i++; } while (i < n); return -1; } int Sequence_Search (int a[ ], int n, int x) { int i = 0; do { if (a[i] == x) return i; else i++; } while (i < n); return -1; } Cài đặt chương trình Input : a : mảng x : giá trị phần tử cần tìm Output : i : vị trí của x trong mảng -1 : tìm không thấy Input : a : mảng x : giá trị phần tử cần tìm Output : i : vị trí của x trong mảng -1 : tìm không thấy [...]... = M[Mid]: Tìm thấy  Nếu X < M[Mid]: Rút ngắn phạm vi tìm kiếm về nửa đầu của dãy M (Right = Mid–1)  Nếu X > M[Mid]: Rút ngắn phạm vi tìm kiếm về nửa sau của dãy M (Left = Mid+1)  Lặp lại quá trình này cho đến khi tìm thấy phần tử có giá trị X hoặc phạm vi tìm kiếm của chúng ta không còn nữa (Left > Right) II TÌM KIẾM 2 Nhị Phân Giải thuật : Bước 1 : Cho L = 0; R = n-1 Bước 2 : m = (L + R) /2 Bước... qua bước 7 Bước 7 : Kết luận không tìm thấy II TÌM KIẾM 2 Nhị Phân Giải thuật: Hàm Binary_Search Cho Left = 0, Right = n-1 Thực hiện trong khi Left a[m] thì Left = m+1 ngược lại Right = m-1 Kết thúc tìm kiếm trong mảng tìm không thấy Trả về kết quả tìm không thấy (-1) Cài đặt chương trình int Binary_Search(int... n-1 III SẮP XẾP 3 Sắp xếp Nổi bọt (Bubble Sort) Giải thuật: void BubbleSort() { for i=1 to n { for j=n down to i { nếu (a[j] < a[j-1]) đổi chỗ a[j] với a[j-1] } } } Cài đặt chương trình void BubbleSort(int a[ ], int n) { int i, j; } for (i = 0; i < n-1; i++) for (j = n-1; j > i; j ) { if (a[j] < a[j-1]) swap(a[j] , a[j-1]); } III SẮP XẾP 4 So sách các thuật toán sắp xếp cơ bản  Selection Sort   Trung... bình  Bubble Sort   Trung bình cần n2/2 phép so sánh, n2/2 thao tác đổi chỗ Xấu nhất cũng như vậy III SẮP XẾP 5 Các phương pháp Sắp xếp khác  Thuật toán sắp xếp lắc (shaker sort)  Thuật toán sắp xếp giảm độ tăng hay độ dài bước giảm dần (shell sort)  Thuật toán sắp xếp dựa trên sự phân hoạch (quick sort) ... (Straight Insertion Sort) Ý Tưởng :  Nó lần lượt lấy các phần tử của danh sách chèn vào vị trí thích hợp trong một danh sách mới đã được sắp  Bắt chước cách sắp xếp quân bài của những người chơi bài Muốn sắp một bộ bài theo trật tự người chơi bài rút lần lượt từ quân thứ 2, so với các quân đứng trước nó để chèn vào vị trí thích hợp III SẮP XẾP 2 Sắp xếp chèn trực tiếp (Straight Insertion Sort) Ý... XẾP 2 Sắp xếp chèn trực tiếp (Straight Insertion Sort) Ý Tưởng : III SẮP XẾP 2 Sắp xếp chèn trực tiếp (Straight Insertion Sort) Ý Tưởng : III SẮP XẾP 2 Sắp xếp chèn trực tiếp (Straight Insertion Sort) Giải thuật: Cài đặt chương trình Hàm Insertion Sort { } for i=1 to n – 1 { x = a[i]; j = i - 1; while (x < a[j] and j >= 0) { a[j+1] = a[j]; j = j – 1; } a[j+1] = x; } void InsertionSort(int a[ ], int n)... Ta chọn phần tử có giá trị nhỏ nhất trong N Là phương pháp sắp xếp bằng cách chọn phần tử bé phần tử chưa có thứ tự này để đưa lên đầu nhóm xếp vào vị trí thứ nhất, tương tự với các phần tử nhất nhỏ lần hai, thứ ba,  Sauthứthứ nhất chọn lựa phần tử nhỏ nhất và đưa lên đầu nhóm chúng ta còn lại N-1 phần tử đứng ở phía sau dãy M chưa có thứ tự  Chúng ta tiếp tục chọn phần tử có giá trị nhỏ nhất trong... tử có giá trị nhỏ nhất trong N-1 phần tử chưa có thứ tự này để đưa lên đầu nhóm chưa thứ tự này (N-1)  Làm tiếp tục cho đến cuối dãy III SẮP XẾP 1 Sắp xếp chọn trực tiếp (Straight Selection Sort ) Giải thuật: Hàm Selection Sort { for i=0 to n – 2 { min = i Cài đặt chương trình void SelectionSort (int a[ ], int n) { int i, j, min; for(i = 0; i . CHƯƠNG I : TỔNG QUAN VỀ CẤU TRÚC DỮ LIỆU VÀ THUẬT GIẢI CHƯƠNG II : MỘT SỐ THUẬT TOÁN TÌM KIẾM VÀ SẮP XẾP CHƯƠNG III : DANH SÁCH LIÊN KẾT - NGĂN XẾP VÀ HÀNG ĐỢI CHƯƠNG IV : CÂY 0. 1. Tuần tự Giải thuật : Hàm Sequence_Search Cho i = 0 Thực hiện Nếu a[i] == x thì dừng ct, trả về kết quả tìm thấy ngược lại tăng i thêm 1 Lặp lại thực hiện đến khi i >= n Trả về kết quả. 1. Tuần tự Giải thuật : Bước 1 : Cho i = 0 Bước 2 : Nếu a[i] == x thì dừng chương trình, xuất kết quả tìm thấy Bước 3 : Ngược lại tăng i lên một đơn vị Bước 4 : Lặp lại bước 2 và 3 đến khi

Ngày đăng: 02/08/2014, 18:21

Từ khóa liên quan

Mục lục

  • Slide 1

  • Slide 2

  • Slide 3

  • Slide 4

  • Slide 5

  • Slide 6

  • Slide 7

  • Slide 8

  • Slide 9

  • Slide 10

  • Slide 11

  • Slide 12

  • Slide 13

  • Slide 14

  • Slide 15

  • Slide 16

  • Slide 17

  • Slide 18

  • Slide 19

  • Slide 20

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

Tài liệu liên quan