Bài tập phần II Phần: Cáccấutrúcliệu bản- Mảng,Danhsáchliênkết,danhsáchtuyếntính Bài Kiểu liệu ? cho ví dụ minh họa Bài Kiểu liệu trừu tượng gì? Nó khác so với định nghĩa kiểu liệu? Bài Cấutrúcliệu ? Bài Phân loại cấutrúc liệu? So sánh đặc điểm phân loại Bài Trình bày ưu nhược điểm mảng (bao gồm mảng cấp phát tĩnh mảng cấp phát động) Bài Viết hàm để thực thêm phần tử vào vị trí sau phần tử thứ k hai trường hợp : mảng,danhsáchliên kết đơn Bài Viết hàm reverse để in phần tử danhsáchliên kết đơn theo thứ tự đảo ngược typedef struct Node { int data; struct Node *pNext; } NODE; //pHead trỏ đến đầu danhsách cần đảo ngược void reverse(NODE *pHead) { //Thân hàm } Ví dụ: với danhsáchban đầu chứa phần tử {2, 27, 5, 14, 9}, kết 9, 14, 5, 27, Hãy đánh giá thời gian thực thuật toán bạn theo O-lớn Bài Hoàn phần thân hàm reverse để đảo ngược danhsáchliên kết đơn typedef struct Node { int data; struct Node *pNext; } NODE; //pHead trỏ đến đầu danhsách cần đảo ngược void reverse(NODE *&pHead) { //Thân hàm } Ví dụ với danhsáchban đầu chứa phần tử {2, 27, 5, 14, 9}, kết danhsách {9, 14, 5, 27, 2} CuuDuongThanCong.com https://fb.com/tailieudientucntt Hãy đánh giá thời gian thực thuật toán bạn theo O-lớn Bài Viết lại hàm thực thao tác chèn, tìm kiếm xóa phần tử danhsáchliên kết đơn dùng vòng lặp thay dùng đệ quy Bài 10 Viết lại hàm xóa phần tử danhsáchliên kết đơn mà không cần dùng thêm hàm search_list, predecessor_list Bài 11 Cho dãy số nguyên có số lượng phần tử lớn Hãy viết hàm find để tìm in hình hai cặp phần tử có độ chênh lệch lớn nhỏ dãy cho Độ chệnh lệch số 𝑎, 𝑏 định nghĩa 𝑑 = |𝑎 − 𝑏| //A tên mảng chứa phần tử //n số lượng phần tử mảng, n>2 void find(int A[], int n) { //thân hàm } Ví dụ với dãy {1,5,3,2,7,4} cặp phần tử có chêch lệch lớn (1, 7), cặp phần tử có độ chêch lệch nhỏ (2,3) Trong trường hợp có nhiều cặp cần đưa cặp thỏa mãn Hãy đưa đánh giá thời gian thực thuật toán bạn theo O-lớn Bài 12 Cho dãy số nguyên khác theo thứ tự tăng dần Viết chương trình kiểm tra xem có tồn phần tử mà giá trị vị trí Ví dụ dãy {−10,−3, 3, 5, 7}, ta tìm a3 = Trong dãy {2, 3, 4, 5, 6, 7}, khơng tồn phần tử Chú ý: Vị trí phần tử tính Bài 13 Để biểu diễn kiểu liệu ADT xâu ký tự máy tính người ta làm theo cách sau Lưu trữ mảng, dùng ký tự đăc biệt để báo hiệu kết thúc xâu (ký tự ‘\0’) Mảng phải khai báo có số phần tử tối đa lớn số lượng ký tự xâu Lưu trữ mảng, phần tử mảng ta dùng để chứa số ký tự thời xâu ký tự, phần tử ký tự CuuDuongThanCong.com https://fb.com/tailieudientucntt Dùng danhsáchliên kết để chứa ký tự, kết thúc xâu phần tử cuối NULL Hãy nhận xét hiệu phương pháp theo tiêu chí a) Kích thước nhớ cần dùng để lưu trữ xâu ký tự b) Các ký tự mà xâu biểu diễn c) Thời gian để truy cập vào ký tự thứ 𝑖 xâu d) Thời gian thực phép chèn, xóa ký tự xâu Bài 14 Giả sử có trỏ trỏ đến phần tử cần xóa danh sách, có cách khác để xóa phần tử khỏi danhsách mà không cần phải duyệt danhsách để tìm phần tử đứng trước khơng ? Nếu có mơ tả phương pháp bạn Bài 15 Viết chương trình tìm phần tử có giá trị lớn nhất, nhỏ danhsách móc nối đơn Bài 16 Xây dựng chương trình biểu diễn đa thức 𝑃𝑛 (𝑥) = 𝑎𝑛 𝑥 𝑛 + 𝑎𝑛−1 𝑥 𝑛−1 + +𝑎1 𝑥 + 𝑎0 với thao tác hiển thị, cộng, trừ, nhân hai đa thức Bài 17 So sánh ưu nhược điểm mảng cấutrúcliên kết dùng để lưu trữ kiểu liệu trừu tượng danhsáchtuyếntính Bài 18 Cần phải lưu trữ danhsáchtuyếntính thông tin khách hàng ngày tháng siêu thị Ta chọn cấutrúcliệu để lưu trữ cho thao tác tìm kiếm nhanh tiết kiệm nhớ biết: a) Không biết trước số lượng khách hàng tối đa b) Biết trước số lượng khách hàng tối đa số lượng khách hàng ngày khác biến động lớn c) Biết trước số lượng khách hàng tối đa, số lượng khách hàng ngày chênh lệch không nhiều Cáccấutrúc lựa chọn : Mảng tĩnh, mảng động, cấutrúc móc nối Hãy giải thích lựa chọn bạn trường hợp Bài 19 Cài đặt chương trình mơ tốn Josephus slide Bài 20 Cho dãy số gồm 𝑛 số, viết chương trình in phần tử dãy theo chiều tăng dần tần số xuất Ví dụ : dãy 1, 3, 4, 5, 7, 2, 3, ta in 1, 2, 4, 7, 3, Bài 21 Cài đặt hàm thực thao tác thêm, xóa tìm kiếm danhsáchliên kết đôi Bài 22 Cài đặt hàm thực thao tác thêm, xóa tìm kiếm danhsáchliên kết đơi nối vòng (danh sách nối đôi sử dụng nút đầu giả) Bài 23 Viết chương trình cài đặt mảng động để lưu trữ danhsách phần tử theo cách sau: • Ban đầu ta cấp phát nhớ động 10 phần tử • Nếu mà ta phải thêm phần tử mảng đầy ta gấp đơi kích thước mảng copy toàn phần tử mảng cũ vào nửa đầu mảng mới, sau thêm phần tử vào mảng • Nếu mà xóa phần tử mà sau xóa số phần tử mảng nhỏ 1/2 kích thước mảng ta tiến hành tạo mảng với kích thước ½ kích thước mảng cũ Sau copy tồn phần tử mảng cũ sang mảng CuuDuongThanCong.com https://fb.com/tailieudientucntt Hãy đánh giá thời gian thực trường hợp tốt nhất, tồi thao tác thêm xóa phần tử Chỉ trường hợp mà cách làm cho kết tồi Bạncó cách để cải thiện hiệu ? Bài 24 Cho hai xâu ký tự s1 s2 Hãy viết hàm stringmatch để kiểm tra xem xâu ký tự s2 có xuất s1 hay khơng Nếu có trả vị trí xuất nó, ngược lại trả giá trị -1 Ví dụ: s1=”AbbAbbbabbb”, s2=”ab” hàm stringmatch(s1,s2) trả giá trị Hãy đánh giá hiệu thuật toán bạn Bài 25 Trò chơi dò mìn Giả sử mơ tả bãi mìn ma trận với kích thước 𝑁 × 𝑀 (𝑁 hàng 𝑀 cột) Những vị trí có mìn đánh dấu ký tự ‘*’, vị trí khơng có mìn ký tự ‘.’ Hãy xây dựng ma trận tương đương để mơ tả cảnh báo có mìn xung quanh Với có mìn ta biểu diễn ký tự ‘*’, ô xung quanh ta biểu diễn chữ số mơ tả số có mìn mà lân cận với Ở lân cận với xung quanh Ví dụ Bãi mìn kích thước × biểu diễn lại sau Hãy xây dựng hàm Calculate(char MineField[10][10], char Output[10][10], int N, int M) Để tính tốn giá trị cho mảng Output với đầu vào mảng mơ tả bãi mìn MineField ≤ 𝑁, 𝑀 ≤ 10 kích thước thực bãi mìn Bài 26 Cho kiểu liệu trừu tượng tập hợp với • Các phần tử tập hợp số nguyên • Các phép toán tập hợp gồm : CuuDuongThanCong.com https://fb.com/tailieudientucntt o Member(x,S): Kiểm tra xem phần tử x có thuộc tập hợp S hay không o Union(A,B): Hợp hai tập hợp A, B, trả tập hợp 𝐴 ∪ 𝐵 thông qua tập hợp A, B, hàm o Intersection(A,B): Giao hai tập hợp, trả 𝐴 ∩ 𝐵 thông qua tập hợp A, B, hàm o Substract(A,B): Hiệu hai tập hơp, trả 𝐴 − 𝐵 thông qua tập hợp A, B, hàm o Insert(x,S): thêm phần tử x vào tập hợp S o Delete(x,S) : loại bỏ phần tử x khỏi tập S (nếu x có S) Hãy cài đặt ADT sử dụng phương pháp biểu diễn a) Mảng b) Danhsáchliên kết c) Xâu bit (bit biểu diễn phần tử có tập hợp bit biểu diễn phần tử khơng có) Chú ý: Đối với cách biểu diễn thứ phần tử phải biểu diễn theo thứ tự xác định Các phần tử tập hợp không trùng Bài 27 Cho dãy số nguyên dương gồm n số, khoảng cách hai vị trí độ chênh lệch giá trị hai số vị trí Ví dụ cho dãy gồm số 1, 3, 4, 3, Chêch lệch số thứ − = Chọn vị trí k bất dãy n số, tổng độ chệnh lệch vị trí k với tất 𝑛 − vị trí lại tính tổng độ chênh lệch số vị trí 𝑘 tới 𝑛 − vị trí lại Ví dụ với k=2 (số giá trị 3) tổng độ chêch lệch ứng với 2+1+0+4=7 Hãy viết chương trình tìm vị trí k cho có tổng độ chênh lệch nhỏ Bài 28 Viết chương trình đảo ngược thứ tự từ câu nhập vào từ bàn phím Ví dụCâu đầu vào “ the quick brown fox jumps over the lazy dog” Thì kết hiển thị hình câu “dog lazy the over jumps fox brown quick the” Bài 29 Nhập vào từ bàn phím dãy số thực gồm n số (0