Thực hành cấu trúc dữ liệu và giải thuật

16 2.7K 3
Thực hành cấu trúc dữ liệu và giải thuật

Đ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ực hành 1: TÌM KIẾM Nội dung Ôn lại cách viết chương trình C dạng hàm Nắm vững cấu trúc liệu mảng chiều Nắm vững giải thuật tìm kiếm a Tìm kiếm tuyến tính b Tìm kiếm nhị phân Bài tập Bài Viết chương trình thực hiện:  Sinh mảng ngẫu nhiên gồm N số nguyên (N>0), phần tử có giá trị (-100, 100)  Xuất mảng hình  Tìm phần tử có giá trị X mảng, có cho biết vị trí xuất X mảng (Làm theo cách tìm kiếm tuyến tính tìm kiếm nhị phân) Bài Viết chương trình quản lý thư viện, thông tin sách gồm: mã sách (int),tên sách(char[40]), giá (float)  Nhập danh sách gồm N sách  Xuất danh sách sách hình  Tìm sách có mã X (Làm theo cách: tìm tuyến tính tìm nhị phân)  Tìm sách có tên X (Làm theo cách: tìm tuyến tính tìm nhị phân)  Tìm sách có giá cao (nếu có nhiều sách có giá cao trùng xuất hết hình) Hướng dẫn Bài Nhắc lại, cấu trúc chung chương trình C: //Khai báo thư viện #include TH CTDL & GT Ths.Văn Thị Thiên Trang Page … //Khai báo có #define Tên_hằng Giá_trị // //Các hàm dùng chương trình Kiểu_dữ_liệu_trả_về Tên_hàm(khai báo tham số đầu vào) { } … // //Hàm void main() { clrscr(); //xóa hình //khai báo biến cần dùng … //cài đặt chương trình theo menu chức //dùng biến nguyên để lưu công việc mà người dùng chọn int chon; do{ clrscr(); //nhập chọn lựa người dùng printf(“1: Sinh mang\n”); printf(“2: Xuat mang\n”); printf(“3: Tim X theo Phuong phap tim tuyen tinh\n”); printf(“4: Tim X theo Phuong phap tim nhi phan\n”); printf(“0: Thoat\n”); printf(“Hay chon cong viec:”); scanf(“%d”, &chon); //thực công việc cho lựa chọn tương ứng switch (chon){ case 1: //Gọi hàm Sinh mảng … break; case 2: //Gọi hàm xuất mảng … break; case 3: //Nhập số nguyên X cần tìm … //Gọi hàm tìm tuyến tính … break; case 4: TH CTDL & GT Ths.Văn Thị Thiên Trang Page //Nhập số nguyên X cần tìm … //Gọi hàm tìm nhị phân … default: chon=0; break; } getch(); }while (chon!=0); }  Dựa vào cấu trúc cài đặt chương trình đầy dủ cho 1, đó:  Hàm sinh mảng:  Bước 1: Nhập số phần tử mảng cho N>0, nhập sai bắt buộc phải nhập lại  Bước 2: Sinh ngẫu nhiên giá trị cho phần tử a[i] mảng cho a[i](100, 100) VD: a[i]=random(100); // a[i] nhận giá trị ngẫu nhiên  [0, 100) a[i]=random(200)-100; //a[i] nhận giá trị ngẫu nhiên  (-100, 100)  Hàm xuất mảng  Hàm tìm phần tử X (tìm tuyến tính)  Nếu tìm thấy X mảng, hàm trả vị trí tìm thấy Nếu không tìm thấy, hàm trả -1  Mẫu hàm: int TimX_TuyenTinh(int a[], int n, int X);  Hàm tìm phần tử X (tìm nhị phân)  Nếu tìm thấy X mảng, hàm trả vị trí tìm thấy Nếu không tìm thấy, hàm trả -1  Mẫu hàm: int TimX_NhiPhan(int a[], int n, int X); Bài  Khai báo cấu trúc sách TH CTDL & GT Ths.Văn Thị Thiên Trang Page typedef struct Tên_cấu_trúc { //khai báo biến thành phần cấu trúc … }Tên_cấu_trúc_viết_gọn; VD: typedef struct CuonSach { int masach; char tensach[40]; long gia; }Sach;  Hàm nhập sách: nhập thông tin cho sách  Hàm xuất sách: xuất thông tin sách  Hàm nhập danh sách sách: dùng mảng chiều để lưu danh sách, phần tử mảng sách  Bước 1: Nhập số lượng sách (Nhập n)  Bước 2: Nhập thông tin cho sách (Nhập a[i], i=0, 1, n-1) cách gọi hàm nhập sách cho phần tử a[i]  Hàm xuất danh sách sách: Xuất thông tin sách a[i], i=0 n-1 cách gọi hàm xuất sách  Hàm tìm sách mã X: Làm theo hai cách tìm tuyến tính nhị phân  Hàm tìm sách có tên X: Làm theo hai cách tìm tuyến tính nhị phân  Lưu ý: tên sách kiểu chuỗi, so sánh tên sách phải dùng hàm strcmp()  VD: Hàm strcmp(s1, s2): Hàm trả chuỗi s1== chuỗi s2, trả giá trị s2  Hàm strcmp() nằm thư viện  Hàm tìm sách giá lớn nhất: TH CTDL & GT Ths.Văn Thị Thiên Trang Page Bước 1: Tìm giá lớn Bước 2: Duyệt mảng sách, sách có giá = giá lớn (tìm bước 1) xuất hình TH CTDL & GT Ths.Văn Thị Thiên Trang Page Thực hành 2: SẮP XẾP Nội dung Nắm vững phương pháp xếp: Sắp xếp chọn (Selection sort) Sắp xếp bọt (Bubble sort) Sắp xếp đổi chỗ trực tiếp (Interchange sort) Sắp xếp chèn (Insertion sort) Sắp xếp chèn dựa bước nhảy (Shell sort) Sắp xếp nhanh (Quick sort) Sắp xếp dựa số (Radix sort) Sắp xếp trộn (Merge sort) Bài tập Bài Viết chương trình thực hiện:  Sinh mảng ngẫu nhiên gồm N số nguyên (N>0), phần tử có giá trị (0, 100)  Xuất mảng hình  Sắp xếp mảng tăng dần (giảm dần) thuật toán xếp học Yêu cầu: Viết chương trình theo menu chức (cho phép người dùng chọn lựa công việc cần thực hiện) Bài Viết chương trình quản lý nhân viên, thông tin nhân viên gồm: mã nhân viên, họ tên, lương  Nhập danh sách gồm N nhân viên  Xuất danh sách nhân viên hình  Sắp xếp danh sách tăng dần theo mã nhân viên thuật toán xếp chọn  Sắp xếp danh sách giảm dần theo họ tên thuật toán xếp chèn TH CTDL & GT Ths.Văn Thị Thiên Trang Page Thực hành 3: DANH SÁCH LIÊN KẾT ĐƠN Nội dung Nắm vững cấu trúc danh sách Danh sách kiểu liệu trừu tượng gồm nhiều nút kiểu liệu, nút danh sách có thứ tự Có hai cách cài đặt danh sách:  Cài đặt theo kiểu kế tiếp, ta có danh sách kề: MẢNG MỘT CHIỀU  Cài đặt theo kiểu liên kết, ta có loại danh sách liên kết: DSLK ĐƠN, DSLK KÉP, DSLK VÒNG Nắm vững cấu trúc danh sách liên kết đơn Các thao tác dslk đơn: Khởi tạo danh sách Tạo nút có liệu X Thêm nút vào đầu danh sách Thêm nút vào sau nút cho trước Xóa nút đầu danh sách Xóa nút đứng sau nút cho trước Xóa toàn danh sách Duyệt danh sách Bài tập Bài Viết chương trình tạo danh sách có phần tử số nguyên Chương trình có chức sau: Thêm phần tử vào cuối danh sách Thêm phần tử vào đầu danh sách Xuất danh sách hình Bài Làm tiếp bổ sung chức sau: TH CTDL & GT Ths.Văn Thị Thiên Trang Page Chèn phần tử có giá trị x vào: a Sau phần tử có giá trị y, (với x, y nhập từ bàn phím) b Trước phần tử có giá trị y Cho biết giá trị node thứ k danh sách (k 0) Đếm số nút danh sách Tìm phần tử lớn (nhỏ nhất) danh sách Xóa phần tử có khóa x Sắp xếp danh sách tăng dần theo phương pháp Interchange Sort 10 *Cho biết phần tử danh sách có xếp tăng dần/ giảm dần? 11 *Cho biết phần tử dương danh sách có xếp tăng? 12 *Cho biết phần tử chẵn lẻ có xuất xen kẽ không? 13 Cho danh sách (h,t) Hãy tạo danh sách (h1,t1) chứa giá trị dương (h2,t2) chứa giá trị âm danh sách cho 14 * Sắp xếp phần tử dương danh sách tăng dần Hướng dẫn Hướng dẫn sau có tính chất minh họa, bạn làm theo cách khác Bài  Khai báo cấu trúc node: struct node { datatype info; //lưu thông tin phần tử danh sách struct node* next; //lưu địa nút }; typedef struct node Node; Vì danh sách có phần từ số nguyên nên kiểu liệu info int Cần cài đặt hàm sau: Khởi tạo danh sách liên kết: void init (Node* &phead) Kiểm tra danh sách có rỗng hay không: int isEmpty(Node* phead) Tạo node có liệu X: Node* createNode(int x) Thêm phần tử vào đầu danh sách: void insertFirst(Node* &phead, int x) TH CTDL & GT Ths.Văn Thị Thiên Trang Page Thêm phần tử vào cuối danh sách: void insertLast(Node* &phead, int x) Xuất danh sách hình: void showList(Node* phead)  Hàm main() cài đặt theo menu chức //Hàm void main() { clrscr(); //khai báo biến quản lý danh sách Node* phead; //biến trỏ đến nút danh sách init(phead); //khởi tạo danh sách liên kết ban dầu chưa có nút //dùng biến nguyên để lưu công việc mà người dùng chọn int chon; do{ clrscr(); //nhập chọn lựa người dùng printf(“1: Them phan tu vao dau\n”); printf(“2: Them phan tu vao cuoi\n”); printf(“3: Xuat danh sach\n”); printf(“0: Thoat\n”); printf(“Hay chon cong viec:”); scanf(“%d”, &chon); //thực công việc cho lựa chọn tương ứng switch (chon){ case 1: /Thêm đầu int x; printf("Nhap gia tri phan tu can them:"); scanf("%d", &x); insertFirst(phead, x); break; case 2: //Thêm cuối printf("Nhap gia tri phan tu can them:"); scanf("%d", &x); insertLast(phead, x); break; case 3: //Xuất danh sách showList(phead); break; default: chon=0; break; } getch(); }while (chon!=0); } TH CTDL & GT Ths.Văn Thị Thiên Trang Page Bài 2: Bạn tự làm :) TH CTDL & GT Ths.Văn Thị Thiên Trang Page 10 Thực hành 4: DANH SÁCH LIÊN KẾT ĐƠN (tt) Nội dung Cài đặt danh sách liên kết đơn, phần tử có kiểu struct Bài tập Bài 1: Viết chương trình quản lý danh sách sinh viên (sử dụng DSLKĐ), thông tin sv gồm: Mã sv - chuỗi tối đa 10 kí tự, Họ tên - chuỗi tối đa 40 kí tự, Điểm trung bình - số thực Chương trình có chức sau: 1) Nhập danh sách sinh viên 2) Xuất danh sách sinh viên 3) Xuất thông tin sv có DTB>5 4) Tìm sinh viên có mã X 5) Sắp xếp danh sách tăng dần theo điểm trung bình 6) Thêm sinh viên vào sau sinh viên có tên X (Vận dụng hàm tìm SV có tên X vào hàm thêm nút vào sau nút q) 7) Tìm SV có tên X 8) Xóa SV đầu danh sách 9) Xóa SV cuối danh sách 10) Xóa toàn danh sách 11) Xóa SV có tên X 12) Xóa sinh viên sau sinh viên có tên X 13) Xóa tất sinh viên có tên X 14) Sắp xếp DSSV tăng dần theo Mã sinh viên 15) In danh sách SV xếp loại 16) Cho biết SV có điểm trung bình cao / thấp 17) Cho biết SV có điểm trung bình thấp số SV xếp loại giỏi TH CTDL & GT Ths.Văn Thị Thiên Trang Page 11 Thực hành 5: DANH SÁCH LIÊN KẾT KÉP, DSLK VÒNG  Bài tập Cài đặt thao tác DSLK kép chứa số nguyên TH CTDL & GT Ths.Văn Thị Thiên Trang Page 12 Thực hành 6: NGĂN XẾP (STACK)  Nội dung Stack xem dạng danh sách đặc biệt tác vụ thêm vào xóa phần tử diễn đầu gọi đỉnh Stack Trên Stack nút thêm vào sau lại lấy trước nên cấu trúc Stack hoạt động theo chế vào sau trước LIFO (Last In First Out) Hai thao tác Stack:  Tác vụ push dùng để thêm phần tử vào đỉnh Stack  Tác vụ pop dùng để xoá phần tử khỏi đỉnh Stack Bài tập Câu 1: Hiện thực Stack tác vụ Stack danh sách liên kết Câu 2: Viết chương trình đổi số thập phân sang số vận dụng Stack TH CTDL & GT Ths.Văn Thị Thiên Trang Page 13 Thực hành 7: HÀNG ĐỢI (QUEUE)  Nội dung Queue (hàng đợi) dạng danh sách đặt biệt, phép thêm phần tử vào cuối hàng đợi lấy phần tử đầu hàng đợi Vì phần tử thêm vào trước lấy trước nên cấu trúc hàng đợi gọi cấu trúc FIFO( First In First Out) Hai tác vụ hàng đợi:  insert – thêm nút vào cuối hàng đợi  remove – dùng để xoá phần tử khỏi hàng đợi Bài tập Viết chương trình quản lý kho đơn giản thực chức sau: Cho phép thêm mặt hàng vào kho Xuất mặt hàng khỏi kho Xem tất hàng hoá kho Xem mặt hàng xuất kho Yêu cầu Cài đặt cấu trúc liệu HàngHoá: có liệu liệt kê Cài đặt Queue chứa hàng hoá kho Cài đặt thao tác Queue Cài đặt chức theo mô tả tập TH CTDL & GT Ths.Văn Thị Thiên Trang Page 14 Thực hành 8: CÂY NHỊ PHÂN  Bài tập Cho trước mảng a có n phần tử (mảng số nguyên/ mảng cấu trúc có trường khóa), tạo nhị phân có n node, nút lưu phần tử mảng Cài đặt hàm duyệt theo thứ tự: LNR, NLR, LRN, mức Tìm node có giá trị X Xác định chiều cao Đếm số node Đếm số node Đếm số node thỏa ĐK: đủ con, có giá trị nhỏ K, có giá trị lớn giá trị node trái nhỏ giá trị node phải, có chiều cao trái chiều cao phải Đếm số node có giá trị > X Cho biết node có giá trị lớn nhất/ nhỏ Kiểm tra có cân không? 10 Kiểm tra có cân hoàn toàn hay không? 11 Kiểm tra có phải “đẹp” hay không? (mọi nút có đủ nút trừ nút lá) 12 Cho biết node nhỏ X ( lớn X) hay không? 13 Cho biết có phải nhị phân tìm kiếm hay không? TH CTDL & GT Ths.Văn Thị Thiên Trang Page 15 Thực hành 9: CÂY NHỊ PHÂN TÌM KIẾM Bài tập Cho mảng chiều a có n phần tử (mảng số nguyên/ mảng cấu trúc có trường khóa), viết hàm tạo NPTK từ a Tìm node có khóa X Xóa phần tử Đếm số node mức thứ K( đệ qui không đệ qui) Cho biết chiều cao ( ĐQ *không ĐQ) Cho biết phần tử có > x hay không? (ĐQ không ĐQ) Tìm phần tử lớn nhất/ nhỏ Xuất phần tử theo chiều tăng/ giảm dần Tính tổng nút (khoâng ñq / ñq) Tính tổng giá trị dương 10 Đếm số giá trị > x / nhỏ x/ có giá trị từ x  y 11 Tạo NPTK từ mảng a (có n phần tử), nút gồm thành phần: giá trị (khóa) tần số xuất khóa mảng a Cài đặt hàm sau: a Tìm giá trị lớn b Tìm giá trị có số lần xuất nhiều c Đếm số giá trị có số lần xuất lớn d Đếm số khóa < x / đếm số giá trị nhỏ x (tính theo tần số xuất hiện) e In phần tử theo chiều tăng dần khóa (in khóa + tần số) TH CTDL & GT Ths.Văn Thị Thiên Trang Page 16 [...]... Trang Page 13 Thực hành 7: HÀNG ĐỢI (QUEUE)  Nội dung Queue (hàng đợi) là một dạng danh sách đặt biệt, trong đó chúng ta chỉ được phép thêm các phần tử vào cuối hàng đợi và lấy ra các phần tử ở đầu hàng đợi Vì phần tử thêm vào trước được lấy ra trước nên cấu trúc hàng đợi còn được gọi là cấu trúc FIFO( First In First Out) Hai tác vụ chính trên hàng đợi:  insert – thêm nút mới vào cuối hàng... dùng để xoá một phần tử ra khỏi hàng đợi Bài tập Viết chương trình quản lý kho đơn giản thực hiện các chức năng sau: 1 Cho phép thêm một mặt hàng vào kho 2 Xuất một mặt hàng ra khỏi kho 3 Xem tất cả hàng hoá trong kho 4 Xem mặt hàng nào kế tiếp sẽ được xuất kho Yêu cầu 1 Cài đặt cấu trúc dữ liệu HàngHoá: có các dữ liệu nào liệt kê ra 2 Cài đặt một Queue chứa các hàng hoá trong kho 3 Cài đặt các thao... Thị Thiên Trang Page 15 Thực hành 9: CÂY NHỊ PHÂN TÌM KIẾM Bài tập Cho mảng 1 chiều a có n phần tử (mảng số nguyên/ mảng cấu trúc có một trường là khóa), viết hàm tạo cây NPTK từ a 1 Tìm node có khóa là X 2 Xóa 1 phần tử trên cây 3 Đếm số node ở mức thứ K( đệ qui và không đệ qui) 4 Cho biết chiều cao của cây ( ĐQ và *không ĐQ) 5 Cho biết các phần tử trên cây có > x hay không? (ĐQ và không ĐQ) 6 Tìm phần... đỉnh Stack Trên Stack các nút được thêm vào sau lại được lấy ra trước nên cấu trúc Stack hoạt động theo cơ chế vào sau ra trước LIFO (Last In First Out) Hai thao tác chính trên Stack:  Tác vụ push dùng để thêm một phần tử vào đỉnh Stack  Tác vụ pop dùng để xoá đi một phần tử ra khỏi đỉnh Stack Bài tập Câu 1: Hiện thực Stack và các tác vụ của Stack bằng danh sách liên kết Câu 2: Viết chương trình đổi... Page 11 Thực hành 5: DANH SÁCH LIÊN KẾT KÉP, DSLK VÒNG  Bài tập Cài đặt các thao tác trên DSLK kép chứa các số nguyên TH CTDL & GT Ths.Văn Thị Thiên Trang Page 12 Thực hành 6: NGĂN XẾP (STACK)  Nội dung Stack có thể được xem là một dạng danh sách đặc biệt trong đó các tác vụ thêm vào hoặc xóa đi một phần tử chỉ diễn ra ở một đầu gọi là đỉnh Stack Trên Stack các nút được thêm vào sau... chứa các hàng hoá trong kho 3 Cài đặt các thao tác trên Queue 4 Cài đặt các chức năng theo mô tả của bài tập TH CTDL & GT Ths.Văn Thị Thiên Trang Page 14 Thực hành 8: CÂY NHỊ PHÂN  Bài tập Cho trước 1 mảng a có n phần tử (mảng số nguyên/ mảng cấu trúc có một trường là khóa), hãy tạo một cây nhị phân có n node, mỗi nút lưu 1 phần tử của mảng 1 Cài đặt hàm duyệt cây theo thứ tự: LNR, NLR, LRN, mức.. .Thực hành 4: DANH SÁCH LIÊN KẾT ĐƠN (tt) Nội dung Cài đặt danh sách liên kết đơn, mỗi phần tử có kiểu struct Bài tập Bài 1: Viết chương trình quản lý danh sách sinh viên (sử dụng DSLKĐ), thông tin mỗi sv gồm: Mã sv - chuỗi tối đa 10 kí tự, Họ tên - chuỗi tối đa 40 kí tự, Điểm trung bình - số thực Chương trình có các chức năng sau: 1) Nhập danh sách... Xuất danh sách sinh viên 3) Xuất thông tin các sv có DTB>5 4) Tìm sinh viên có mã là X 5) Sắp xếp danh sách tăng dần theo điểm trung bình 6) Thêm một sinh viên vào sau sinh viên có tên là X (Vận dụng hàm tìm SV có tên X vào hàm thêm một nút vào sau nút q) 7) Tìm SV có tên là X 8) Xóa SV đầu danh sách 9) Xóa SV cuối danh sách 10) Xóa toàn bộ danh sách 11) Xóa SV có tên là X 12) Xóa một sinh viên sau... cây (khoâng ñq / ñq) 9 Tính tổng các giá trị dương trên cây 10 Đếm số giá trị > x trên cây / nhỏ hơn x/ có giá trị từ x  y 11 Tạo cây NPTK từ mảng a (có n phần tử), mỗi nút trên cây gồm 2 thành phần: giá trị (khóa) và tần số xuất hiện của khóa trong mảng a Cài đặt các hàm sau: a Tìm giá trị lớn nhất trên cây b Tìm giá trị có số lần xuất hiện nhiều nhất c Đếm số giá trị có số lần xuất hiện lớn hơn 3 d... 2 Tìm node có giá trị là X 3 Xác định chiều cao của cây 4 Đếm số node trên cây 5 Đếm số node lá 6 Đếm số node thỏa ĐK: đủ 2 cây con, có giá trị nhỏ hơn K, có giá trị lớn hơn giá trị của node con trái và nhỏ hơn giá trị của node con phải, có chiều cao cây con trái bằng chiều cao cây con phải 7 Đếm số node lá có giá trị > X 8 Cho biết node có giá trị lớn nhất/ nhỏ nhất 9 Kiểm tra cây có cân bằng không? ... int n, int X); Bài  Khai báo cấu trúc sách TH CTDL & GT Ths.Văn Thị Thiên Trang Page typedef struct Tên _cấu_ trúc { //khai báo biến thành phần cấu trúc … }Tên _cấu_ trúc_ viết_gọn; VD: typedef struct... viên thuật toán xếp chọn  Sắp xếp danh sách giảm dần theo họ tên thuật toán xếp chèn TH CTDL & GT Ths.Văn Thị Thiên Trang Page Thực hành 3: DANH SÁCH LIÊN KẾT ĐƠN Nội dung Nắm vững cấu trúc. .. quản lý kho đơn giản thực chức sau: Cho phép thêm mặt hàng vào kho Xuất mặt hàng khỏi kho Xem tất hàng hoá kho Xem mặt hàng xuất kho Yêu cầu Cài đặt cấu trúc liệu HàngHoá: có liệu liệt kê Cài đặt

Ngày đăng: 30/12/2015, 04:13

Từ khóa liên quan

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

Tài liệu liên quan