cấu trúc dữ liệu và thuật giải 1

128 98 0
cấu trúc dữ liệu và thuật giải 1

Đ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

Cấu trúc liệu thuật giải TRƯỜNG ĐẠI HỌC ĐÀ LẠT KHOA CÔNG NGHỆ THÔNG TIN NGUYỄN THỊ THANH BÌNH TRẦN TUẤN MINH BÀI GIẢNG TĨM TẮT CẤU TRÚC DỮ LIỆU THUẬT GIẢI Dành cho sinh viên ngành công nghệ thông tin (Lưu hành nội bộ) Đà Lạt 2008 Cấu trúc liệu thuật giải MỤC LỤC MỤC LỤC LỜI NÓI ĐẦU CHƯƠNG 1: GIỚI THIỆU CẤU TRÚC DỮ LIỆU PHÂN TÍCH THUẬT GIẢI 1.1 Từ tốn đến chương trình 1.1.1 Mơ hình hóa tốn thực tế 1.1.2 Thuật giải (algorithms) 1.2 Kiểu liệu trừu tượng (Abstract Data Type - ADT) 13 1.2.1 Khái niệm trừu tượng hóa 13 1.2.2 Trừu tượng hóa chương trình 13 1.2.3 Trừu tượng hóa liệu 14 1.2.4 Kiểu liệu, cấu trúc liệu kiểu liệu trừu tượng (Data Types, Data Structures, Abstract Data Types) 15 1.3 PHÂN TÍCH THUẬT GIẢI 16 1.3.1 Thuật giải vấn đề liên quan 16 1.3.2 Tính hiệu thuật giải 17 1.3.3 Ký hiệu O biểu diễn thời gian chạy ký hiệu O 20 1.3.4 Đánh giá thời gian chạy thuật giải 24 CHƯƠNG 2: TÌM KIẾM SẮP XẾP TRONG 33 2.1 Các phương pháp tìm kiếm 33 2.1.1 Phương pháp tìm kiếm tuyến tính 33 2.1.2 Tìm kiếm nhị phân 35 2.2 Các phương pháp xếp 37 2.2.1 Thuật giải xếp chọn (Selection Sort) 38 2.2.2 Thuật giải xếp chèn (Insertion Sort) 41 2.2.3 Thuật giải xếp đổi chỗ trực tiếp (Interchange Sort) 44 2.2.4 Thuật giải xếp bọt (Bubble Sort) 46 2.2.5 Thuật giải shaker (Shaker Sort) 48 2.2.6 Thuật giải Shell (Shell Sort) 49 2.2.7 Thuật giải vun đống (Heap Sort) 51 2.2.8 Thuật giải xếp nhanh (Quick Sort) 55 2.2.9 Thuật giải xếp trộn (Merge Sort) 59 2.2.10 Phương pháp xếp theo số (Radix Sort) 64 CHƯƠNG 3: CẤU TRÚC DANH SÁCH LIÊN KẾT 72 3.1 Giới thiệu đối tượng liệu trỏ 72 3.1.1 Cấu trúc liệu tĩnh cấu trúc liệu động 72 3.1.2 Kiểu trỏ 72 3.2 Danh sách liên kết 75 3.2.1 Định nghĩa 75 Cấu trúc liệu thuật giải 3.2.2 Tổ chức danh sách liên kết 76 3.3 Danh sách liên kết đơn 77 3.3.1 Tổ chức danh sách theo cách cấp phát liên kết 77 3.3.2 Định nghĩa cấu trúc danh sách liên kết 79 3.3.3 Các thao tác danh sách liên kết đơn 80 3.4 Sắp xếp danh sách 94 3.5 Một số cấu trúc đặc biệt danh sách liên kết đơn 97 3.5.1 Ngăn xếp (Stack) 97 3.5.2 Hàng đợi (Queue) 103 3.6 Một số cấu trúc liệu dạng danh sách liên kết khác 108 3.6.1 Danh sách liên kết vòng 108 3.6.2 Danh sách liên kết kép 112 TÀI LIỆU THAM KHẢO Cấu trúc liệu thuật giải LỜI NÓI ĐẦU Cấu trúc liệu thuật giải kiến thức tảng chương trình đào tạo ngành cơng nghệ thơng tin Trong hệ thống tín chương trình đào tạo khoa Công nghệ thông tin trường Đại học Đà Lạt, lĩnh vực tổ chức thành học phần: cấu trúc liệu thuật giải 1, cấu trúc liệu thuật giải Nội dung học phần cấu trúc liệu thuật giải tổ chức chương: • Chương trình bày tổng quan cấu trúc liệu thuật giải o Các bước lập trình để giải cho toán, o Các khái niệm kiểu liệu, kiểu liệu trừu tượng, o Tiếp cận phân tích thuật giải • Chương trình bày phương pháp tìm kiếm xếp o Phương pháp tìm kiếm tuyến tính, tìm kiếm nhị phân; o Các thuật giải xếp: Chọn trực tiếp, Chèn trực tiếp, đổi chỗ trực tiếp, Heap sort, Quick sort, • Chương trình bày cấu trúc liệu danh sách liên kết o Định nghĩa tổ chức danh sách liên kết o Danh sách liên kết đơn: định nghĩa, cách tổ chức thao tác o Các cấu trúc đặc biệt danh sách liên kết đơn: Ngăn xếp, Hàng đợi o Các cấu trúc liệu dạng danh sách liên kết khác danh sách liên kết vòng, danh sách liên kết kép Vì trình độ người biên soạn có hạn nên tập giáo trình không tránh khỏi nhiều khiếm khuyết, Chúng mong góp ý bạn đồng nghiệp sinh viên Cuối cùng, Chúng cảm ơn động viên, giúp đỡ bạn đồng nghiệp khoa Công nghệ thơng tin để tập giáo trình tóm tắt hoàn thành Các tác giả Cấu trúc liệu thuật giải Chương 1: Giới Thiệu Cấu Trúc Dữ Liệu Phân Tích Thuật Giải Mục tiêu Sau học xong chương này, sinh viên sẽ: - Nắm bước lập trình để giải cho toán - Nắm vững khái niệm kiểu liệu trừu tượng, khác kiểu liệu, kiểu liệu trừu tượng cấu trúc liệu - Tiếp cận phân tích thuật giải Kiến thức cần thiết Các kiến thức cần thiết để học chương bao gồm: Khả nhận biết giải toán theo hướng tin học hóa Nội dung cốt lõi Chương nghiên cứu vấn đề sau: - Cách tiếp cận từ tốn đến chương trình - Kiểu liệu trừu tượng (Abstract Data Type) - Kiểu liệu – Kiểu liệu trừu tượng – Cấu trúc liệu - Phân tích thuật giải 1.1 Từ tốn đến chương trình 1.1.1 Mơ hình hóa tốn thực tế Để giải toán thực tế máy tính ta phải việc xác định tốn Nhiều thời gian cơng sức bỏ để xác định toán cần giải quyết, tức phải trả lời rõ ràng câu hỏi "phải làm gì?" sau "làm nào?" Thơng thường, khởi đầu, hầu hết tốn khơng đơn giản, không rõ ràng Để giảm bớt phức Cấu trúc liệu thuật giải tạp tốn thực tế, ta phải hình thức hóa nó, nghĩa phát biểu lại toán thực tế thành tốn hình thức (hay gọi mơ hình tốn) Có thể có nhiều tốn thực tế có mơ hình tốn Ví dụ 1: Tơ màu đồ giới Ta cần phải tô màu cho nước đồ giới Trong nước tô màu hai nước láng giềng (cùng biên giới) phải tơ hai màu khác Hãy tìm phương án tơ màu cho số màu sử dụng Ta xem nước đồ giới đỉnh đồ thị, hai nước láng giềng hai đỉnh ứng với nối với cạnh Bài toán lúc trở thành tốn tơ màu cho đồ thị sau: Mỗi đỉnh phải tô màu, hai đỉnh có cạnh nối phải tơ hai màu khác ta cần tìm phương án tơ màu cho số màu sử dụng Ví dụ 2: Đèn giao thơng Cho ngã năm hình I.1, C E đường chiều theo chiều mũi tên, đường khác hai chiều Hãy thiết kế bảng đèn hiệu điều khiển giao thông ngã năm cách hợp lý, nghĩa là: phân chia lối ngã năm thành nhóm, nhóm gồm lối đi đồng thời khơng xảy tai nạn giao thông (các hướng không cắt nhau), số lượng nhóm Ta xem đầu vào (input) toán tất lối ngã năm này, đầu (output) toán nhóm lối đi đồng thời mà khơng xảy tai nạn giao thơng, nhóm tương ứng với pha điều khiển đèn hiệu, ta phải tìm kiếm lời giải với số nhóm để giao thơng khơng bị tắc nghẽn phải chờ đợi lâu Cấu trúc liệu thuật giải Trước hết ta nhận thấy ngã năm có 13 lối đi: AB, AC, AD, BA, BC, BD, DA, DB, DC, EA, EB, EC, ED Tất nhiên, để giải tốn ta phải tìm cách để thể mối liên quan lối Lối với lối đồng thời, lối lối đồng thời Ví dụ cặp AB EC đồng thời, AD EB khơng, hướng giao thông cắt Ở ta dùng sơ đồ trực quan sau: tên 13 lối viết lên mặt phẳng, hai lối đồng thời xảy đụng (tức hai hướng cắt qua nhau) ta nối lại đoạn thẳng, cong, ngoằn ngoèo tuỳ thích Ta có sơ đồ hình I.2 Như vậy, sơ đồ này, hai lối có cạnh nối lại với hai lối cho đồng thời Với cách biểu diễn ta có đồ thị (Graph), tức ta mơ hình hố tốn giao thơng theo mơ hình tốn đồ thị; lối trở thành đỉnh đồ thị, hai lối đồng thời nối đoạn ta gọi cạnh đồ thị Bây ta phải xác định nhóm, với số nhóm nhất, nhóm gồm lối đi đồng thời, ứng với pha đèn hiệu điều khiển giao thông Giả sử rằng, ta dùng màu để tô lên đỉnh đồ thị cho: - Các lối cho phép đồng thời có màu: Dễ dàng nhận thấy hai đỉnh có cạnh nối khơng tơ màu - Số nhóm nhất: ta phải tính toán cho số màu dùng Tóm lại, ta phải giải toán sau: Cấu trúc liệu thuật giải "Tơ màu cho đồ thị hình I.2 cho: - Hai đỉnh có cạnh nối với (hai gọi hai đỉnh kề nhau) khơng màu - Số màu dùng nhất." Hai tốn thực tế “tơ màu đồ giới” “đèn giao thông” xem khác biệt sau mơ hình hóa, chúng thực chất một, tốn “tơ màu đồ thị” Đối với tốn hình thức hố, tìm kiếm cách giải thuật ngữ mơ hình xác định có hay khơng chương trình có sẵn để giải Nếu khơng có chương trình tìm biết mơ hình dùng tính chất mơ hình để xây dựng thuật giải tốt 1.1.2 Thuật giải (algorithms) Khi có mơ hình thích hợp cho tốn ta cần cố gắng tìm cách giải tốn mơ hình Khởi đầu tìm thuật giải, chuỗi hữu hạn thị (instruction) mà thị có ý nghĩa rõ ràng thực lượng thời gian hữu hạn Knuth (1973) định nghĩa thuật giải chuỗi hữu hạn thao tác để giải tốn Các tính chất quan trọng thuật giải là: - Hữu hạn (finiteness): thuật giải phải luôn kết thúc sau số hữu hạn bước Cấu trúc liệu thuật giải - Xác định (definiteness): bước thuật giải phải xác định rõ ràng phải thực xác, quán - Hiệu (effectiveness): thao tác thuật giải phải thực lượng thời gian hữu hạn Ngoài thuật giải phải có đầu vào (input) đầu (output) Nói tóm lại, thuật giải phải giải xong công việc ta cho liệu vào Có nhiều cách để thể thuật giải: dùng lời, dùng lưu đồ, lối dùng phổ biến dùng ngơn ngữ mã giả, kết hợp ngôn ngữ tự nhiên cấu trúc ngơn ngữ lập trình Ví dụ: Thiết kế thuật giải để giải tốn “ tơ màu đồ thị” Bài tốn tơ màu cho đồ thị khơng có thuật giải tốt để tìm lời giải tối ưu, tức là, khơng có thuật giải khác "thử tất khả năng" hay "vét cạn" tất trường hợp có, để xác định cách tô màu cho đỉnh đồ thị cho số màu dùng Thực tế, ta "vét cạn" trường hợp đồ thị có số đỉnh nhỏ, trường hợp ngược lại ta "vét cạn" tất khả lượng thời gian hợp lý, ta phải suy nghĩ cách khác để giải vấn đề: Thêm thơng tin vào tốn để đồ thị có số tính chất đặc biệt dùng tính chất đặc biệt ta dễ dàng tìm lời giải, thay đổi u cầu tốn cho dễ giải quyết, lời giải tìm chưa lời giải tối ưu Một cách làm tốn "Cố gắng tơ màu cho đồ thị màu cách nhanh chóng" Ít màu có nghĩa số màu mà ta tìm khơng phải ln ln số màu lời giải tối ưu (ít nhất) đa số trường hợp trùng với đáp số lời giải tối ưu có chênh lệch "khơng chênh lệch nhiều" so với lời giải tối ưu, bù lại ta "vét cạn" khả có thể! Nói khác đi, ta không dùng thuật giải "vét cạn" khả để tìm lời giải tối ưu mà tìm giải pháp để đưa lời giải hợp lý cách khả thi thời gian Một giải pháp gọi HEURISTIC HEURISTIC cho tốn tơ màu đồ thị, thường gọi thuật giải "háu ăn" (GREEDY) là: Cấu trúc liệu thuật giải - Chọn đỉnh chưa tơ màu tơ màu C - Duyệt danh sách đỉnh chưa tô màu Đối với đỉnh chưa tơ màu, xác định xem có kề với đỉnh tơ màu C khơng Nếu khơng có, tơ màu C Ý tưởng Heuristic đơn giản: dùng màu để tơ cho nhiều đỉnh (các đỉnh xét theo thứ tự đó), khơng thể tơ với màu dùng dùng màu khác Như ta "hi vọng" số màu cần dùng Ví dụ: Đồ thị hình I.3 cách tơ màu cho Tơ theo GREEDY Tối ưu (xét theo số thứ tự đỉnh) (thử tất khả năng) 1: đỏ; 2: đỏ 1,3,4 : đỏ 3: xanh;4: xanh 2,5 : xanh 5: vàng Rõ ràng cách tô màu thuật giải "háu ăn" không ln cho lời giải tối ưu thực cách nhanh chóng Trở lại tốn giao thông áp dụng HEURISTIC Greedy cho đồ thị hình I.2 (theo thứ tự đỉnh liệt kê trên), ta có kết quả: - Tơ màu xanh cho đỉnh: AB,AC,AD,BA,DC,ED - Tô màu đỏ cho đỉnh: BC,BD,EA 10 Cấu trúc liệu thuật giải - Chèn nút vào trước phần tử p Chèn đầu danh sách - void AddFirst(DLIST &l, DNODE* new_ele) - { - if (l.pHead==NULL) //DS rỗng - { - l.pHead = new_ele; - l.pTail = l.pHead; - } - else - { - new_ele->pNext = l.pHead; - l.pHead->pPrev = new_ele;// (2) - l.pHead = new_ele; // (3) - // (1) } } Chèn phần tử vào cuối danh sách liên kết 114 Cấu trúc liệu thuật giải - void AddTail(DLIST &l, DNODE *new_ele) - { - if (l.pHead==NULL) - { - l.pHead = new_ele; - l.pTail = l.pHead; - } - else - { - l.pTail->Next = new_ele; // (1) - new_ele->pPrev = l.pTail; // (2) - l.pTail = new_ele; // (3) - } } Chèn phần tử sau phần tử q danh sách - void AddAfter(DLIST &l, DNODE* q,DNODE* new_ele) - { - DNODE* p = q->pNext; - if ( q!=NULL) - { - new_ele->pNext = p; //(1) - new_ele->pPrev = q; //(2) - q->pNext = new_ele; //(3) - if(p != NULL) p->pPrev = new_ele; //(4) 115 Cấu trúc liệu thuật giải - if(q == l.pTail) l.pTail = new_ele; - } - else //chèn đầu danh sách - AddFirst(l, new_ele); } Chèn phần tử vào trước phần tử q danh sách Hình III.10: chèn phần tử x trước phần tử q - void AddBefore(DLIST &l, DNODE q, DNODE* new_ele) - { - DNODE* p = q->pPrev; - if ( q!=NULL) - { - new_ele->pNext = q; //(1) - new_ele->pPrev = p; //(2) - q->pPrev = new_ele; //(3) - if(p != NULL) p->pNext = new_ele; //(4) - if(q == l.pHead) l.pHead = new_ele; - } - else //chèn vào cuối danh sách - AddTail(l, new_ele); } Hủy phần tử khỏi danh sách Có thao tác thông dụng để hủy phần tử khỏi danh sách liên kết kép 116 Cấu trúc liệu thuật giải - Hủy phần tử đầu danh sách - Hủy phần tử đầu danh sách - Hủy phần tử sau phần tử q - Hủy phần tử trước phần tử q - Hủy phần tử có khóa k Hủy phần tử đầu xâu - Data RemoveHead(DLIST &l) - { - DNODE *p; - Data x = NULLDATA; - if ( l.pHead != NULL) - { - p = l.pHead; x = p->Info; - l.pHead = l.pHead->pNext; - l.pHead->pPrev = NULL; - delete p; - if(l.pHead == NULL) l.pTail = NULL; - else l.pHead->pPrev = NULL; - } - return x; - } Hủy phần tử cuối xâu - Data RemoveTail(DLIST &l) - { - DNODE *p; - Data x = NULLDATA; - if ( l.pTail != NULL) - { 117 Cấu trúc liệu thuật giải - p = l.pTail; x = p->Info; - l.pTail = l.pTail->pPrev; - l.pTail->pNext = NULL; - delete p; - if(l.pHead == NULL) l.pTail = NULL; - else l.pHead->pPrev = NULL; - } - return x; - } Hủy phần tử đứng sâu phần tử q - Data RemoveTail(DLIST &l) - { - DNODE *p; - Data x = NULLDATA; - if ( l.pTail != NULL) - { - p = l.pTail; x = p->Info; - l.pTail = l.pTail->pPrev; - l.pTail->pNext = NULL; - delete p; - if(l.pHead == NULL) l.pTail = NULL; - else l.pHead->pPrev = NULL; - } - return x; - } Hủy phần tử đứng truớc phần tử q - void RemoveBefore (DLIST &l, DNODE *q) - { 118 Cấu trúc liệu thuật giải - DNODE *p; - if ( q != NULL) - { - p = q ->pPrev; - if ( p != NULL) - { - q->pPrev = p->pPrev; - if(p == l.pHead) l.pHead = q; - else p->pPrev->pNext = q; - delete p; - } - } - else - RemoveTail(l); } Hủy phần tử có khóa k - int RemoveNode(DLIST &l, Data k) - { - DNODE *p = l.pHead; - NODE *q; - while( p != NULL) - { - if(p->Info == k) break; - p = p->pNext; - } - if(p == NULL) return 0; //Khơng tìm k - q = p->pPrev; - if ( q != NULL) 119 Cấu trúc liệu thuật giải - { - p = q ->pNext ; - if ( p != NULL) - { - q->pNext = p->pNext; - if(p == l.pTail) l.pTail = q; - else p->pNext->pPrev = q; - } - } - else //p phần tử đầu danh sách - { - l.pHead = p->pNext; - if(l.pHead == NULL) l.pTail = NULL; - else l.pHead->pPrev = NULL; - } - delete p; - return 1; - } Sắp xếp danh sách liên kết kép Việc xếp danh sách liên kết kép khơng khác danh sách liên kết đơn Ta cần lưu ý điều cần bảo toàn mối liên kết hai chiều xếp Ví dụ: cài đặt thuật toán xếp QuickSort - void - { DListQSort(DLIST & l) - DNODE *p, *X; // X đến phần tử cầm canh - DLIST l1, l2; - if(l.pHead == l.pTail) return;//đã có thứ tự 120 Cấu trúc liệu thuật giải - l1.pHead == l1.pTail = NULL; //khởi tạo - l2.pHead == l2.pTail = NULL; - X = l.pHead; l.pHead = X->pNext; - while(l.pHead != NULL) //Tách l thành l1, l2; - { - p = l.pHead; - l.pHead = p->pNext; p->pNext = NULL; - if (p->Info Info) AddTail(l1, p); - else AddTail(l2, p); - } - DListQSort(l1); //Gọi đệ qui để l1 - DListQSort(l2); //Gọi đệ qui để l2 - //Nói l1, X, l2 thành l - if(l1.pHead != NULL) - { - l.pHead = l1.pHead; l1.pTail->pNext = X; - X->pPrev = l1.pTail; - } - else l.pHead = X; - X->pNext = l2; - if(l2.pHead != NULL) - { - l.pTail = l2.pTail; - l2->pHead->pPrev = X; - } - else l.pTail = X; - } Nhận xét 121 Cấu trúc liệu thuật giải Xâu kép co có tính chất giống xâu đơn, nhiên cómột số tính chất khác sau: - Xâu kép có mối liên kết hai chiều nên từ phần tử truy xuất phần tử khác Trong xâu đơn ta truy xuất đến phần tử đứng sau phần tử cho trước Điều dẫn đến việc ta dễ dàng hủy phần tử cuối xâu kép, xâu đơn thao tác tốnchi phí O(n) - Bù lại, xâu kép tốn chi phí gấp đơi so với xâu đơn cho việc lưu trữ mối liên kết Điều khiến việc cập nhật nặng nề số trường hợp Như ta cần cân nhắc lựa chọn CTDL hợp lý cài đặtcho ứng dụng cụ thể Bài tập: Bài 1: Kiểu Data định nghĩa sau: struct Data { char HoTen[30]; double Luong; 122 Cấu trúc liệu thuật giải char CMND[15]; } Viết chương trình thực thao tác danh sách liên kết đơn Yêu cầu chương trình : - In hình menu có chức sau : Xuất liệu danh sách hình Kiem tra danh sách rỗng hay không? 3, Đảo ngược danh sách cho Tìm phần tử danh sách Chèn phần tử vào danh sách Hủy phần tử khỏi danh sách Đếm số nút danh sách Copy danh sách cho sang danh sách khác Tách nút danh sách l sang danh sách đơn l1, l2 10 Tách danh sách l sang danh sách đơn l1, l2 l1 chứa nửa số nút đầu l, l2 chứa nút lại 11 Sắp xếp tăng dần danh sách liên kết theo khóa lương 12 Thốt - Nhập liệu cho danh sách , muốn thực thao tác chọn chức tương ứng menu Bài 2: Viết chương trình thực phép toán tập hợp (tập hợp cài đặt danh sách liên kết đơn) Yêu cầu chương trình : 123 Cấu trúc liệu thuật giải - In hình menu có chức sau: Xem tập hợp Tính hợp tập hợp Tính giao tập hợp Kiểm tra phần tử có thuộc vào tập hợp Tính A\B Tính hiệu đối xứng tập hợp: (A\B)U(B\A) Tính lực lượng tập hợp Thốt - Nhập liệu cho tập hợp, muốn thực thao tác chọn chức tương ứng menu Bài 3: Viết chương trình thực phép toán Đa thức (dùng danh sách liên kết đơn lưu trử hệ số khác số mũ tương ứng) Yêu cầu chương trình : - In hình menu có chức sau: Xuất đa thức hình Cộng đa thức Trừ đa thức Nhân đa thức Tính giá trị cuta đa thức x Thoát - Nhập liệu cho tập hợp, muốn thực thao tác chọn chức tương ứng menu Bài 4: Viết chương trình thực thao tác Stack Yêu cầu chương trình : 124 Cấu trúc liệu thuật giải - In hình menu có chức sau : Xuất liệu Stack hình Kiem tra Stack rỗng hay khơng? 3, Xem đỉnh Stack Tìm phần tử Stack Thêm phần tử vào đầu Stack Hủy phần tử đầu khỏi Stack Đếm số nút Stack Copy Stack cho sang Stack khác Thoát - Nhập liệu cho Stack , muốn thực thao tác chọn chức tương ứng menu Bài 5: Ứng dụng cấu trúc liệu Stack, viết chương trình đổi số nguyên dương hệ 10 sang hệ Bài 6: Viết chương trình thực thao tác Queue (cài đặt danh sách liên kết đơn).Yêu cầu chương trình : - In hình menu có chức sau : Xuất liệu Queue hình Kiem tra Queue rỗng hay khơng? Tìm phần tử Queue Thêm phần tử vào cuối Queue Hủy phần tử đầu khỏi Queue Đếm số nút Queue 125 Cấu trúc liệu thuật giải Thoát - Nhập liệu cho Queue , muốn thực thao tác chọn chức tương ứng menu Bài 7: Viết chương trình thực thao tác danh sách liên kết vòng (đơn) u cầu chương trình : - In hình menu có chức sau : Xuất liệu danh sách hình Kiem tra danh sách rỗng hay khơng? Tìm phần tử danh sách Chèn phần tử vào danh sách Hủy phần tử khỏi danh sách Thoát - Nhập liệu cho danh sách , muốn thực thao tác chọn chức tương ứng menu Bài (Bài tốn Josephus): Một nhóm binh sĩ bị kẻ thù bao vây binh sĩ chọn để cầu cứu Việc chọn thực theo cách sau đây: “ Một số nguyên n binh sĩ chọn ngẫu nhiên Các binh sĩ theo vòng tròn họ đếm từ binh sĩ chọn ngẫu nhiên Khi đạt đến n, binh sĩ tương ứng lấy khỏi vòng việc đếm lại binh sĩ Quá trình tiếp tục lại binh sĩ chọn để cầu cứu” Hãy viết thuật toán cài đặt cách chọn này, dùng danh sách liên kết vòng để lưu trữ tên binh sĩ 126 Cấu trúc liệu thuật giải 127 Cấu trúc liệu thuật giải TÀI LIỆU THAM KHẢO [1] ALFRED V AHO & JOHN E.HOPCROFT & JOHN D ULMANN (1983), “Data structures and algorithms”, Addison Wesley [2] LARRY NYHOFF & SANFORD LESSTMA, “Lập trình nâng cao Passcal với cấu trúc liệu” (bản dịch: Lê Minh Trung (1997)) [3] NIKLAUS WIRTH, “Algorithms + data structures = Programs”, Prentice-Hall INC (Bản dịch Nguyễn Quốc Cường (1983)) [4] S.E.GOODMAN & S.T HEDETNIEMI (1977), “Introduction to the design and analysis of algorithms”, Mcgraw-Hill [5] TRẦN HẠNH NHI (1997), “Cấu trúc liệu”, Trung tâm phát triển Cơng nghệ thơng tin t.p Hồ Chí Minh [] TRƯƠNG CHÍ TÍN (2000), “Cấu trúc liệu thuật giải 1”, Đại học Đà Lạt []ĐỖ XUÂN LÔI (1995), “Cấu trúc liệu giải thuật”, Nhà xuất Khoa học Kỹ thuật, Hà Nội   128 ... cấu trúc liệu thuật giải 1, cấu trúc liệu thuật giải Nội dung học phần cấu trúc liệu thuật giải tổ chức chương: • Chương trình bày tổng quan cấu trúc liệu thuật giải o Các bước lập trình để giải. .. cấp 10 18 Cấu trúc liệu thuật giải Nói chung, cỡ liệu lớn thời gian thực thuật giải lớn Nhưng thời gian thực thuật giải không phụ thuộc vào cỡ liệu vào mà phụ thuộc vào liệu vào Trong số liệu vào... ta chọn cấu trúc liệu thích hợp có ngơn ngữ lập trình cấu trúc liệu phức hợp xây dựng lên từ kiểu liệu ngôn ngữ lập trình 14 Cấu trúc liệu thuật giải 1. 2.4 Kiểu liệu, cấu trúc liệu kiểu liệu trừu

Ngày đăng: 16/05/2019, 17:51

Từ khóa liên quan

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

Tài liệu liên quan