Tìm hiểu và cài đặt cây gia phả đồ án tốt nghiệp đại học

31 8 0
Tìm hiểu và cài đặt cây gia phả   đồ án tốt nghiệp đại học

Đ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

Đồ án tốt nghiệp đại học Tìm hiểu cài đặt gia phả TRƯỜNG ĐẠI HỌC VINH KHOA CÔNG NGHỆ THÔNG TIN BOUAVAN PHANTHANIT ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC ĐỀ TÀI TÌM HIỂU VÀ CÀI ĐẶT CÂY GIA PHẢ Nghệ An, tháng 12 năm 2012 Buavan Phanthanit Lớp 49K – Khoa CNTT Đồ án tốt nghiệp đại học Tìm hiểu cài đặt gia phả TRƯỜNG ĐẠI HỌC VINH KHOA CÔNG NGHỆ THÔNG TIN ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC ĐỀ TÀI TÌM HIỂU VÀ CÀI ĐẶT CÂY GIA PHẢ Sinh viên thực hiện: Bouavan Phanthanit Mã sinh viên: 0851073260 Lớp: 49K Công nghệ Thông Tin Giáo viên hướng dẫn: TS Nguyễn Trung Hòa Nghệ An, tháng 12 năm 2012 Buavan Phanthanit -2- Lớp 49K – Khoa CNTT Đồ án tốt nghiệp đại học Tìm hiểu cài đặt gia phả MỤC LỤC MỞ ĐẦU CHƯƠNG CÂY 1.1 Khái niệm 1.2 Biểu diễn 1.2.1 Cài đặt mảng 1.2.2 Cài mảng danh sách kế 1.2.3 Cài danh sách liên kết 1.3 Các phép toán 10 1.3.1 Phép tìm cha 10 1.3.2 Phép tìm trưởng 10 1.3.3 Phép tìm em kế 10 1.4 Phép Duyệt 10 1.4.1 Duyệt tiền thứ tự 12 1.4.2 Duyệt trung thứ tự 12 1.4.3 Duyệt hâu thứ tự 12 CHƯƠNG CÂY GIA PHẢ 14 2.1 Mơ tả tốn chọn cấu trúc liệu 14 2.1.1 Đặt toán 14 2.1.2 Cấu trúc phần tử 15 2.1.3 Cấu trúc gồm 15 2.2 Tạo gia phả 15 2.2.1 Tạo 16 2.3 Các phép toán 17 2.3.1 Việc tìm cha nút i đơn giản DataTr[i].Parent 17 2.3.2 Hàm xác định trưởng nút 17 2.3.3 Hàm xác định em kề nút 18 2.4 Duyệt 18 2.4.1 Duyệt tiền thứ tự từ gốc n 18 2.4.2 Duyệt trung thứ tự 18 2.4.3 Duyệt hậu thứ tự 19 2.5 Quản lý gia phả 20 2.5.1 Tìm kiếm 20 2.5.2 Bổ sung 20 2.5.3 Ghi vào tệp 21 2.6 Một ví dụ gia phả cài đặt 22 2.6.1 Cây gia phả dòng họ Phathanit 22 2.6.2 Mảng/tệp lưu trữ gia phả dòng họ Phanthanit 23 KẾT LUẬN 24 TÀI LIỆU THAM KHẢO 24 PHỤ LỤC: MÃ CỦA CHƯƠNG TRÌNH 25 Buavan Phanthanit -3- Lớp 49K – Khoa CNTT Đồ án tốt nghiệp đại học Tìm hiểu cài đặt gia phả MỞ ĐẦU Các cấu trúc liệu sẵn có ngơn ngữ lập trình bậc cao tạo nên bới ba cách sau: Cách 1: Các liệu thành phần kiểu liên kết cách ghép thành dãy nhớ vật lý  Xâu ký tự, Mảng, Tệp Cách 2: Các liệu thành phần không thiết kiểu liên kết cách ghép thành đối tượng  Bản ghi (cấu trúc) Cách 3: Các liệu thành phần kiểu liên kết cách sử dụng trỏ Khi để sử dụng trỏ với mục đích liên kết liệu người ta tạo thành khối, khối ghi gồm thông tin chia thành hai phần: phần liệu phần quan hệ, Phần liệu có hay nhiều trường liệu, Phần quan hệ chứa hay nhiều trỏ trỏ đến khối khác có quan hệ với khối  Danh sách liên kết Khi tìm hiểu Cây, kiểu liệu trừu tượng, câu hỏi đặt sử dụng cấu trúc liệu cụ thể để thể Một ví dụ điển hình Cây gia phả, nhiên cài đặt nào? Dùng cấu trúc cụ thể vấn đề khó em Vì em chọn đề tài Tìm hiểu cài đặt gia phả Đồ án trình bày chương Chương trình bày tóm tắt kiến thức cây, gồm khái niệm cây, phép toán cây, phép duyệt cây, phương pháp biểu diễn Buavan Phanthanit -4- Lớp 49K – Khoa CNTT Đồ án tốt nghiệp đại học Tìm hiểu cài đặt gia phả Chương trình bày tốn tạo gia phả, gồm yếu cầu toán, cấu trúc liệu giải thuật tạo cây, duyệt cây, bổ sung lưu trữ Có kèm theo ví dụ minh họa Đồ án thực Trường Đại học Vinh hướng dẫn TS Nguyến Trung Hòa Nhân dịp em xin tỏ lòng biết ơn đến Thầy giáo Nguyến Trung Hòa Thầy, Cô giáo Khoa CNTT bạn tận tình giúp đỡ em suốt thời gian học tập Trường Đại học Vinh Nơi để lại em kỷ niệm khơng phai Vì thời gian có hạn nhiều khó khăn thơcj đồ án nên đồ án không tránh khỏi thiếu sót, mong góp ý Thầy, Cô bạn Em xin cám ơn Nghệ An, tháng 12 năm 2012 Người thực Bouavan Phanthanit Buavan Phanthanit -5- Lớp 49K – Khoa CNTT Đồ án tốt nghiệp đại học Tìm hiểu cài đặt gia phả CHƯƠNG CÂY 1.1 Khái niệm Cây số tập hợp phần tử gọi nút (nods) có nút phần biệt nút gốc (root) Trên tập hợp nút có quan hệ, gọi mối quan hệ cha-con (parenthood), xác định hệ thống cấu trúc nút Mỗi nút,trừ nút gốc,có nút cha Một nút có nhiều nút khơng có nút nao Mỗi nút biểu diễn phần tử tập hợp xét có kiểu náo bất kỳ,thường ta biểu diễn nút kí chuỗi chuỗi số ghi vòng tròn Mối quan hệ cha biểu diễn theo qui ước nút cha dòng nút dòng nối đoạn thẳng Có định nghĩa cách đệ qui sau  Một nút đơn độc Nút nút gốc  Giá sử ta có n nút đơn độc k T1,…,Tk với nút gốc tượng ứng n1,…,nk xây dựng cách cho nút n cha nút n1,…nk Cây có nút gốc nút n T1,…,Tk gọi  Tập rỗng coi gọi rỗng kí hiệu Ví dụ: xét mục lục Sách sách Mục lục xem C1 1.1 1.2 2.1 2.1.1 Buavan Phanthanit -6- C2 2.2 C3 2.3 2.1.2 Lớp 49K – Khoa CNTT Đồ án tốt nghiệp đại học Tìm hiểu cài đặt gia phả Nút gốc sách, có ba có gốc c1,c2,c3 Cây thứ có gốc c3 nút đơn độc hai (gốc c1 c2) có nút Số nút gọi cấp (degree) nút đo Ví dụ cấp nút c1 nút c2 Nút có cấp khơng gọi nút Lá (leaf) hay nút đơn độc, nút tận Ví dụ nút 1.1,2.1.1,2.2,2.3,c3 nút Cấp cấp cao nút cấp Ví dụ sách cấp Gốc người ta gán cho số mức (level) 0, nút cha có mức i nút mức i+1 Ví dụ nút Sách có mức 0, nút c2 có mức nút 2.1.1 có mức Chiền cao (height) hay chiều sâu (depth) mức lớn nút có Cây có nhiều cao Nều n1,…,nk chuỗi nút cho ni nút cha nút ni+1,với i=1…k-1,thì chuỗi gọi đường (hay ngắn đường đi) từ n1 đến nk Độ dài đường đinh nghĩa số nút đường trừ số cung đường Như độ dài đường từ nút đến khơng Ví dụ đường từ nút Sách đến nút 2.1 (sách, c2, 2.1) độ dài đường Nếu thứ tự (hay nút con) nút coi xét có thứ tự (ordered tree), ngược lại khơng có thứ tự (unordered tree) Thường thứ tự qui ước từ trái sang phải Như vậy, kế thứ tự hai sau khác nhau: Buavan Phanthanit -7- Lớp 49K – Khoa CNTT Đồ án tốt nghiệp đại học Tìm hiểu cài đặt gia phả A A B C C B 1.2 Biểu diễn 1.2.1 Cài đặt mảng Cho T, ta dùng mảng A chiều để lưu trữ cách cho phần tử mảng, việc chứa nội dung liệu cịn chứa thêm thơng tin (địa chỉ) cha Đặc biệt, nút gốc A[0] chứa thơng tin cha -1 Ví dụ A B D C E F G H Cây biểu diễn mảng A sau: Chỉ số phần tử mảng Dữ liệu A B C D E F G H Chỉ số cha -1 0 1 5 Buavan Phanthanit -8- Lớp 49K – Khoa CNTT Đồ án tốt nghiệp đại học Tìm hiểu cài đặt gia phả 1.2.2 Cài mảng danh sách kế Một cách biểu diễn khác thường dùng biểu diễn dạng nút mảng có danh sách nút Vì số nút nút khơng biết trước nên dùng dánh sách liên kết thích hợp Vậy lưu trữ sau (dấu ‘*’ biểu diễn giá trị Null) * * * * * * * * 1.2.3 Cài danh sách liên kết Mỗi Node gồm có n+1 trường n bậc cây, số trường liên kết cây, trường Info để chứa liệu Ta mơ sau: (* biểu diễn Null) * * * * * * * * * * * Buavan Phanthanit * * * * * -9- * * * * * Lớp 49K – Khoa CNTT Đồ án tốt nghiệp đại học Tìm hiểu cài đặt gia phả 1.3 Các phép tốn 1.3.1 Phép tìm cha Phép tìm cha đỉnh x việc thực hàm parent(x) trả địa địa đỉnh cha x Trường hợp x gốc hàm trả Null 1.3.2 Phép tìm trưởng Tìm bên trái ngồi (con trưởng) định Hàm EldestChild(x) cho ta trưởng đỉnh x Trong trường hợp x (x khơng có con) EldestChild (x) = Null 1.3.3 Phép tìm em kế Hàm Nextsibling (x) xác định em liền kế đỉnh x Trong trường hợp x khơng có em liền kế tức x bên phải đỉnh đó) Nextsibling (x) = Null Ví dụ: Giả sử T cho hình bên: Parent (A)= Null A Parent (D)= B, B Parent (F)= C, C EldestChild (B)= D D E F Nextsilbling (A)= Null Nextsilbling (G)= H G H Nextsilbling (H)= Null 1.4 Phép Duyệt Là qui tắc cho phép qua tất nút cây, nút lần Buavan Phanthanit - 10 - Lớp 49K – Khoa CNTT Đồ án tốt nghiệp đại học Tìm hiểu cài đặt gia phả Phần tử tệp số nguyên, số phần tử lưu trữ Tiếp theo phần tử cây, có kiểu kiểu DataType void Readfile(Tree *T) { FILE *fp; int i; DataType pt; fp=fopen("honguye2.dat","rt"); fscanf(fp,"%d",&T->MaxNode); for(i=0; iMaxNode; i++) fread(&(T- >DataTr[i]),sizeof(pt),1,fp); fclose(fp); } 2.3 Các phép toán 2.3.1 Việc tìm cha nút i đơn giản DataTr[i].Parent 2.3.2 Hàm xác định trưởng nút Con trưởng nút n phần tử sau n, có cha n Do ta duyệt mảng từ phần tử thứ i=n+1 tìm đến hết mảng (khơng có) int EldestChild(int n,Tree *T) { int i; int found,ct; if(nDataTr[i].Parent==n) found=1; else i++; if (found==1) return i; Buavan Phanthanit - 17 - Lớp 49K – Khoa CNTT Đồ án tốt nghiệp đại học Tìm hiểu cài đặt gia phả else return NIL; } 2.3.3 Hàm xác định em kề nút Em kề nút n n+1 n+1 có cha với n, khơng có int NextSibling(int n,Tree *T) { if (nDataTr[n].Parent==T- >DataTr[n+1].Parent) return (n+1); else return NIL; } 2.4 Duyệt 2.4.1 Duyệt tiền thứ tự từ gốc n  Thăm gốc n (in thông tin n)  Tìm trưởng i n  Khi i khác NIL thực  Duyệt tiền thứ tự i  i = em kề i void PreOrder(int n,Tree* T) { int i; printf("%25s ",T->DataTr[n].Name); i=EldestChild(n,T); while (i!=NIL) { PreOrder(i,T); i=NextSibling(i,T); } } 2.4.2 Duyệt trung thứ tự  Tìm trưởng i n Buavan Phanthanit - 18 - Lớp 49K – Khoa CNTT Đồ án tốt nghiệp đại học Tìm hiểu cài đặt gia phả  Nếu i khác NIL, duyệt trung thứ tự i  Thăm gốc n (in thông tin n)  i = em kề i  Khi i khác NIL thực  Duyệt trung thứ tự i  i = em kề i void InOrder(int n,Tree *T) { int i; i=EldestChild(n,T); if (i!=NIL) InOrder(i,T); printf("%25s ",Label_Node(n,T).Name); i=NextSibling(i,T); while (i!=NIL) { InOrder(i,T); i=NextSibling(i,T); } } 2.4.3 Duyệt hậu thứ tự  Tìm trưởng i n  Khi i khác NIL thực  Duyệt hậu thứ tự i  i = em kề i  Thăm gốc n (in thông tin n) void PostOrder(int n,Tree *T) { int i; i=EldestChild(n,T); while (i!=NIL) { PostOrder(i,T); i=NextSibling(i,T); Buavan Phanthanit - 19 - Lớp 49K – Khoa CNTT Đồ án tốt nghiệp đại học Tìm hiểu cài đặt gia phả } printf("%25s ",Label_Node(n,T).Name); } Với cách duyệt này, ta liệt kê danh thành viên họ tộc theo thứ tự ưu tiên từ “nhánh trưởng” đến “nhánh thứ”, vai trò gốc thay đổi qua kiểu phép duyệt 2.5 Quản lý gia phả 2.5.1 Tìm kiếm Có hai tốn tìm kiếm quan tâm  Thứ nhất, tìm tên cha phần tử có tên cho trước (biết (tên) con, tìm (tên) cha) o Xác định số n tên o Xác định số i cha Parent(n) o Tên cha n họ tên i  Thứ hai, tìm (tên) phần tử cha (có tên) cho trước (biết (tên) cha, tìm (tên) con) o Xác định số n tên cha o i=n+1 o Khi số (ID) cha i bé n i cc  Đề có chỗ bổ sung thêm nút vào vị trí thứ i cần chuyển liệu (và thay đổi giá trị trường Parent cần) phần tử từ phần tử thứ i sau  Đưa phần tử liệu pt vào nút i void Bosung1(Tree* T, DataType pt, int cc) { int i,j; i=cc+1; while((iMaxNode)&&(T- >DataTr[i].ParentMaxNode-1; j>=i; j ) { T->DataTr[j+1]=T->DataTr[j]; if(T->DataTr[j+1].Parent>=i) T- >DataTr[j+1].Parent++; } T->MaxNode++; T->DataTr[i]=pt; T->DataTr[i].Parent=cc; } 2.5.3 Ghi vào tệp Tệp lưu trữ gia phả tệp có cấu trúc  Phần tử số nguyên không âm, số nút có  Các phần tử tạo thành danh sách cá nhân gia phả, phần tử có thuộc tính: Họ tên, năm sinh, ID (chỉ số cha) void Writefile(Tree *T) { FILE *fp; int i; Buavan Phanthanit - 21 - Lớp 49K – Khoa CNTT Đồ án tốt nghiệp đại học Tìm hiểu cài đặt gia phả DataType pt; fp=fopen("buav.dat","wt"); if (fp == NULL) { printf("I couldn't open results.dat for appending.\n"); exit(0); } fprintf(fp,"%d",T->MaxNode); for(i=0; iMaxNode; i++) fwrite(&T>DataTr[i],sizeof(pt),1,fp); fclose(fp); } 2.6 Một ví dụ gia phả cài đặt 2.6.1 Cây gia phả dòng họ Phathanit Somsai 1910 Sompheng 1980 Sakda 2010 Saikham 2030 Sonjai 2012 Soukthida 2031 Buavan Phanthanit Manyvan 1983 Somphone 1981 Somsanouk 2014 Vanpheng 2030 Souksakhon e 2015 Vongsai 2032 - 22 - Somsani t 2033 Daovone 2016 Vilayphon e 2034 Duangcha n 2017 Soudjai 2036 Lớp 49K – Khoa CNTT Đồ án tốt nghiệp đại học Tìm hiểu cài đặt gia phả 2.6.2 Mảng/tệp lưu trữ gia phả dòng họ Phanthanit ID Họ tên Năm sinh ID cha 0 Ông Somsai Phanthanit 1910 -1 0.1 Ông Sompheng Phanthanit 1980 0.2 Ông Somphone phanthanit 1981 0.3 Bà Manyvan phanthanit 1983 1.1 Sakda Phanthanit 2010 1.2 Sonjai Phanthanit 2012 2.1 Somsanouk Phanthanit 2014 2.2 Souksakhone phanthanit 2015 3.1 Daovone phanthanit 2016 3.2 Duangchan phanthanit 2017 10 1.1.1 Saikham Phanthanit 2018 11 1.1.2 soudthida Phanthanit 2019 12 2.1.1 Vanphang Phanthanit 2030 13 2.1.2 Vongsai Phanthanit 2032 14 2.2.1 Somsanit phanthanit 2033 15 2.2.2 Vilayphone Phanthanit 2034 16 2.2.3 soudhai phanthanit 2036 Buavan Phanthanit - 23 - Lớp 49K – Khoa CNTT Đồ án tốt nghiệp đại học Tìm hiểu cài đặt gia phả KẾT LUẬN Đồ án thực nhiệm vụ sau  Tìm hiểu phép tốn cây, phương pháp biểu diễn cây, phép duyệt  Sử dụng ngôn ngữ C để thực việc cài đặt chương trình tạo gia phả, quản lý bổ sung thành viên họ tộc thể dạng thực phép duyệt  Việc cài đặt, tạo ghi gia phả giúp cho quản lý gia phả rõ ràng, thuận lợi Các dự kiến công việc tiếp tục bổ sung:  Trình bày dạng đồ họa gia phà quản lý  Thực cơng việc tìm kiến truy xuất thơng tin có u cầu liên quan đến tìm hiều họ tộc TÀI LIỆU THAM KHẢO [1] Đỗ Xuân Lôi, Cấu trúc liệu giải thuật, NXB ĐH Quốc gia Hà Nội, 2007 [2] Nguyễn Trung Hòa, Bài giảng cấu trúc liệu giải thuật, Đại học Vinh, PPT, 2009 Buavan Phanthanit - 24 - Lớp 49K – Khoa CNTT Đồ án tốt nghiệp đại học Tìm hiểu cài đặt gia phả PHỤ LỤC: MÃ CỦA CHƯƠNG TRÌNH /* Chuong trinh quan ly cay gia pha*/ #include #include #include #include #include #include #define MAXLENGTH 100 //chi so toi da cua mang #define NIL -1 typedef struct { char Name[25]; int DateBirth; //Luu gia tri cua nut int Parent; //ID cua Cha cua nut } DataType; //typedef int Node; typedef struct { DataType DataTr[MAXLENGTH]; int MaxNode; } Tree; int i; Tree *MakeNull_Tree (Tree *T); int EmptyTree(Tree *T); DataType Label_Node(int n,Tree *T); int EldestChild(int n,Tree *T); int NextSibling(int n,Tree *T); void PreOrder(int n,Tree* T); void InOrder(int n,Tree* T); void PostOrder(int n,Tree *T); void ReadTree(Tree *T); int Level(int n, Tree* T); void Bosung(Tree* T, DataType pt, int cc); void Bosung1(Tree* T, DataType pt, int cc); void ViewTree(Tree* T); void Writefile(Tree *T); void Readfile(Tree *T); void Readfile1(Tree *T,char s[]); int j,chucnang,chon,found; Tree *T; //int AdrName(char name[], Tree *T); //Chuong trinh chinh main() { DataType pt; char name[25],s[25]; { printf("\n\n\t\tChuong trinh quan ly cay bang mang"); Buavan Phanthanit - 25 - Lớp 49K – Khoa CNTT Đồ án tốt nghiệp đại học Tìm hiểu cài đặt gia phả printf("\n\nCac chuc nang chinh cua chuong trinh: \n"); printf("1: Tao cay\n"); printf("2: Bo sung them pt cua i vao cay\n"); printf("3: Duyet cay\n"); printf("4: Xem cay bang duyet mang\n"); printf("5: Ghi cay vao tep\n"); printf("6: Tim kiem\n"); printf("0: Ket thuc chuong trinh\n"); printf("Chon chuc nang: "); scanf("%d", &chucnang); switch(chucnang) { case 1: { T=MakeNull_Tree(T); printf("\nChon phep nhap cay 1: KeyBoard, 2: File "); scanf("%d",&chon); switch(chon) { case 1: { ReadTree(T); break; } case 2: { //Readfile(T); printf("\nTen cua tep: "); fflush(stdin); gets(s); Readfile1(T,s); break; } } break; } case 2: { printf("\nNhap du lieu can bo sung"); printf("\nTen cua node: "); fflush(stdin); gets(pt.Name); printf("\nNam sinh cua node: "); scanf("%d",&pt.DateBirth); printf("1: nhap ID cha; 2: nhap ten cha\n"); printf("Chon: "); scanf("%d",&chon); switch(chon) { case 1: { printf("\nNhap ID cha cua nut moi: "); scanf("%d",&i); break; } case 2: Buavan Phanthanit - 26 - Lớp 49K – Khoa CNTT Đồ án tốt nghiệp đại học Tìm hiểu cài đặt gia phả { printf("\nNhap ten cha cua nut moi: "); fflush(stdin); gets(name); j=0; found=0; while((jMaxNode1)&&(found==0)) if(strcmp(name,T>DataTr[j].Name)==0) { i=j; found=1; } else j++; break; } } //if(i>=0&&iMaxNode) Bosung(T,pt,i); if(i>=0&&iMaxNode) Bosung1(T,pt,i); break; } case 3: { printf("\nChon phep duyet (1: PreOrder, 2: InOrder, 3: PosOrder) : "); scanf("%d",&chon); switch(chon) { case 1: { printf("\nDanh sach duyet tien thu tu cua cay vua nhap la\n"); PreOrder(0,T); break; } case 2: { printf("\nDanh sach duyet trung thu tu cua cay vua nhap la\n"); InOrder(0,T); break; } case 3: { printf("\nDanh sach duyet hau thu tu cua cay vua nhap la\n"); PostOrder(0,T); break; } } break; } case 4: { ViewTree(T); break; } case 5: { Writefile(T); Buavan Phanthanit - 27 - Lớp 49K – Khoa CNTT Đồ án tốt nghiệp đại học Tìm hiểu cài đặt gia phả break; } } }while(chucnang!=0); getch(); } //Khoi tao cay rong Tree *MakeNull_Tree (Tree *T) { T=(Tree*)malloc(sizeof(Tree)); T->MaxNode=0; return T; } //Kiem tra cay rong int EmptyTree(Tree *T) { return(T->MaxNode == 0); } //Xac dinh gia tri cua nut tren cay DataType Label_Node(int n,Tree *T) { if (!EmptyTree(T) && (nMaxNode-1)) return T->DataTr[n]; } //Ham xac dinh truong cua mot nut int EldestChild(int n,Tree *T) { int i; int found,ct; if(nDataTr[i].Parent==n) found=1; else i++; if (found==1) return i; else return (-1); } //Ham xac dinh em ke cua mot nut int NextSibling(int n,Tree *T) { if (nDataTr[n].Parent==T->DataTr[n+1].Parent) return (n+1); else return (-1); } //Duyet tien thu tu void PreOrder(int n,Tree* T) { int i; printf("\n%25s%5d%3d ",T->DataTr[n].Name,T>DataTr[n].DateBirth,T->DataTr[n].Parent); i=EldestChild(n,T); while (i!=-1) { PreOrder(i,T); i=NextSibling(i,T); Buavan Phanthanit - 28 - Lớp 49K – Khoa CNTT Đồ án tốt nghiệp đại học Tìm hiểu cài đặt gia phả } } //Duyet trung thu tu void InOrder(int n,Tree *T) { int i; i=EldestChild(n,T); if (i!=-1) InOrder(i,T); printf("\n%25s%5d%3d ",Label_Node(n,T).Name,Label_Node(n,T).DateBirth,Label_Node(n, T).Parent); i=NextSibling(i,T); while (i!=-1) { InOrder(i,T); i=NextSibling(i,T); } } //Duyet hau thu tu void PostOrder(int n,Tree *T) { int i; i=EldestChild(n,T); while (i!=-1) { PostOrder(i,T); i=NextSibling(i,T); } printf("\n%25s%5d%3d ",Label_Node(n,T).Name,Label_Node(n,T).DateBirth,Label_Node(n, T).Parent); } //Nhap cay void ReadTree(Tree *T) { int i; char st[25]; for(i=0;iDataTr[i].Parent=-1; { printf("Cay co bao nhieu nut? "); scanf("%d",&T->MaxNode); } for (i=0; iMaxNode; i++) { if(i!=0) { printf("Nhap ID cha cua nut %d: ",i); scanf("%d",&(T->DataTr[i].Parent)); } printf("Nhap ten cua nut %d: ",i); fflush(stdin); gets(T->DataTr[i].Name); printf("Nhap nam sinh cua nut %d: ",i); scanf("%d",&(T->DataTr[i].DateBirth)); } } //Xac dinh muc cua node n cay T int Level(int n, Tree* T) { int i=0; Buavan Phanthanit - 29 - Lớp 49K – Khoa CNTT Đồ án tốt nghiệp đại học Tìm hiểu cài đặt gia phả while(T->DataTr[n].Parent!=-1) { n=T->DataTr[n].Parent; i++; } return i; } //Bo sung vào T phan tu du lieu pt la c?a node cc void Bosung(Tree* T, DataType pt, int cc) { int i,j; j=Level(cc,T); i=cc+1; while((iMaxNode)&&(Level(i,T)==j)&&(EldestChild(i,T)==-1)) i++; if(EldestChild(i,T)!=-1) i=EldestChild(i,T); else i=T->MaxNode; for(j=T->MaxNode-1; j>=i; j ) { T->DataTr[j+1]=T->DataTr[j]; if(T->DataTr[j+1].Parent>=i) T>DataTr[j+1].Parent++; } T->MaxNode++; T->DataTr[i]=pt; T->DataTr[i].Parent=cc; } void Bosung1(Tree* T, DataType pt, int cc) { int i,j; i=cc+1; while((iMaxNode)&&(T->DataTr[i].ParentMaxNode-1; j>=i; j ) { T->DataTr[j+1]=T->DataTr[j]; if(T->DataTr[j+1].Parent>=i) T>DataTr[j+1].Parent++; } T->MaxNode++; T->DataTr[i]=pt; T->DataTr[i].Parent=cc; } void ViewTree(Tree* T) { int i; int n=T->MaxNode; printf("\n"); for(i=0; iDataTr[i].Parent, T->DataTr[i].Name,T->DataTr[i].DateBirth); } void Writefile(Tree *T) { FILE *fp; int i; DataType pt; fp=fopen("buav.dat","wt"); Buavan Phanthanit - 30 - Lớp 49K – Khoa CNTT Đồ án tốt nghiệp đại học Tìm hiểu cài đặt gia phả if (fp == NULL) { printf("I couldn't open results.dat for appending.\n"); exit(0); } fprintf(fp,"%d",T->MaxNode); for(i=0; iMaxNode; i++) fwrite(&T>DataTr[i],sizeof(pt),1,fp); fclose(fp); } void Readfile(Tree *T) { FILE *fp; int i; DataType pt; fp=fopen("buav.dat","rt"); fscanf(fp,"%d",&T->MaxNode); for(i=0; iMaxNode; i++) fread(&(T>DataTr[i]),sizeof(pt),1,fp); fclose(fp); } void Readfile1(Tree *T,char s[]) { FILE *fp; int i; DataType pt; fp=fopen(s,"rt"); fscanf(fp,"%d",&T->MaxNode); for(i=0; iMaxNode; i++) fread(&(T>DataTr[i]),sizeof(pt),1,fp); fclose(fp); } Buavan Phanthanit - 31 - Lớp 49K – Khoa CNTT .. .Đồ án tốt nghiệp đại học Tìm hiểu cài đặt gia phả TRƯỜNG ĐẠI HỌC VINH KHOA CÔNG NGHỆ THÔNG TIN ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC ĐỀ TÀI TÌM HIỂU VÀ CÀI ĐẶT CÂY GIA PHẢ Sinh viên... 49K – Khoa CNTT Đồ án tốt nghiệp đại học Tìm hiểu cài đặt gia phả CHƯƠNG CÂY GIA PHẢ Gia phả họ tộc hiểu cây, xuất phát từ gốc ông tổ họ tộc Quản lý thành viên họ tộc bẳng gia phả cho ta thẫy... CNTT Đồ án tốt nghiệp đại học Tìm hiểu cài đặt gia phả KẾT LUẬN Đồ án thực nhiệm vụ sau  Tìm hiểu phép toán cây, phương pháp biểu diễn cây, phép duyệt  Sử dụng ngôn ngữ C để thực việc cài đặt

Ngày đăng: 16/09/2021, 16:31

Từ khóa liên quan

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

Tài liệu liên quan