Tải bản đầy đủ (.docx) (19 trang)

ĐỒ ÁN CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (441.8 KB, 19 trang )

ĐẠI HỌC ĐÀ NẴNG
TRƯỜNG ĐẠI HỌC BÁCH KHOA
KHOA CÔNG NGHỆ THÔNG TIN
ĐỒ ÁN
CẤU TRÚC DỮ LIỆU & GIẢI THUẬT
ĐỀ TÀI SỐ 07
GVHD : Nguyễn Thị Minh Hỷ
Sinh viên thực hiện : Trần Thanh Duy
Nguyễn Văn Hưng
Phan Đăng Mùi
Lớp : 09T4
Đà Nẵng tháng 12/2011
LỜI CẢM ƠN
ĐỒ ÁN CẤU TRÚC DỮ LIỆU
Chúng em xin chân thành cám ơn cô Nguyễn Thị Minh Hỷ đã tận tình
hướng dẫn và giúp đỡ chúng em trong quá trình thực hiện đề tài này.
Chúng em xin cám ơn các bạn trong và ngoài lớp đã động viên, đóng
góp ý kiến và hỗ trợ chúng em trong quá trình thực hiện đồ án.
Tuy nhiên do kinh nghiệm còn hạn chế và thời gian có hạn nên còn có
nhiều thiếu sót rất mong được sự thông cảm và đóng góp ý kiến của quý thầy cô
và các bạn.
Chúng em xin chân thành cám ơn!
Đà Nẵng, tháng 12 năm 2011
Nhóm sinh viên thực hiện:
1.Trần Thanh Duy
2. Nguyễn Văn Hưng
3. Phan Đăng Mùi
LỚP 09T4 TRANG 2
ĐỒ ÁN CẤU TRÚC DỮ LIỆU
MỤC LỤC
GIỚI THIỆU ĐỀ TÀI


Gia phả là cách ghi chép tên tuổi, tiểu sử, phần mộ, ngày giỗ của từng người
trong gia tộc, theo thứ tự các đời. Gia phả đã xuất hiện từ thời xa xưa ở phương Tây
cũng như ở phương Đông. Nội dung của gia phả thường gồm hai phần: phần đầu ghi
chép nguồn gốc của dòng họ, đó là phần phả kí. Tiếp theo là phần tộc hệ, lần lượt ghi
chép tên huý (tên tự, tên hiệu), ngày tháng năm sinh, năm mất, chức tước, phần mộ,
ngày giỗ của từng người trong họ. Ngoài ra, còn có phần kỉ sự, ghi chép sự nghiệp,
công trạng của ông tổ các đời. Để thấy rõ một cách tổng quát các chi lớn, nhỏ, xa, gần
của một họ, người ta còn lập ra các phả đồ, với những hình vẽ đơn giản kèm theo tên
tuổi ghi vắn tắt ở bên dưới.
Trong phạm vi đồ án này, chúng em xin xây dựng một chương trình nhỏ để lưu
trữ và hiển thị một cây gia phả đơn giản được biểu diễn dưới cấu trúc cây gồm các
chức năng:
+ Nhập một cây gia phả từ bàn phím.
+ Hiển thị cây gia phả lên màn hình.
+ Tìm kiếm một thành viên trong gia phả và hiển thị họ tên, ngày
tháng năm sinh và tình trạng gia đình của con cháu, những người ngang hàng với
người tìm thấy, và in ra gia phả của người này.
LỚP 09T4 TRANG 3
TRẦN VĂN A
TRẦN VĂN B TRẦN C
TRẦN VĂN D TRẦN THỊ E TRẦN F TRẦN G TRẦN H
ĐỒ ÁN CẤU TRÚC DỮ LIỆU
CẤU TRÚC DỮ LIỆU YÊU CẦU
I. Cấu trúc dữ liệu
- Để giải quyết bài toán lưu trữ một cây gia phả của một dòng họ gồm các thông
tin : họ và tên, ngày tháng năm sinh và tình trạng gia đình (có hoặc chưa có gia đình)
của từng thành viên ta có thể sử dụng cấu trúc cây n phân để lưu trữ.
- Đối với kiểu cấu trúc này, rất phù hợp để biểu diễn sơ đồ phả hệ của dòng họ
một cách minh bạch, rõ ràng trong tìm kiếm và thích hợp trong lưu trữ. Điều khó khăn
ở đây là bậc của cây phụ thuộc vào số con lớn nhất của một thành viên trong gia tộc, vì

thế khó có thể xác định trước được n trong lý thuyết.
- Với gốc cây lưu trữ thông tin của ông tổ của dòng họ, các nhánh con là thông
tin của các thành viên ở các đời tiếp theo.
Hình 1: Sơ đồ cây lưu giữ một gia phả.
I.1. Giới thiệu sơ lược cấu trúc cây
Trong khoa học máy tính, cây là một cấu trúc dữ liệu được sử dụng rộng rãi
gồm một tập hợp các nút (tiếng Anh: node) được liên kết với nhau theo quan hệ cha-
LỚP 09T4 TRANG 4
ĐỒ ÁN CẤU TRÚC DỮ LIỆU
con. Cây trong cấu trúc dữ liệu đầu tiên là mô phỏng (hay nói cách khác là sự sao
chép) của cây (có gốc) trong lý thuyết đồ thị. Hầu như mọi khái niệm trong cây của lý
thuyết đồ thị đều được thể hiện trong cấu trúc dữ liệu. Tuy nhiên cây trong cấu trúc dữ
liệu đã tìm được ứng dụng phong phú và hiệu quả trong nhiều giải thuật. Khi phân tích
các giải thuật trên cấu trúc dữ liệu cây, người ta vẫn thường vẽ ra các cây tương ứng
trong lý thuyết đồ thị.
Hình 2: Cây nhị phân
I.2. Các khái niệm trong cây
I.2.1. Các nút
Một nút có thể chứa một giá trị, một điều kiện, một cấu trúc dữ liệu riêng biệt
hoặc chính một cây. Mỗi nút trong một cây có thể không có hoặc có một số nút con,
các nút con có mức cao hơn nó (theo quy ước khác với cây tự nhiên, cây trong cấu trúc
dữ liệu phát triển từ trên xuống). Một nút có con được gọi là nút cha của các nút con.
Một nút có nhiều nhất một nút cha.
I.2.2. Nút gốc
Trong mỗi cây có một nút đặc biệt được gọi là nút gốc (hay nói đơn giản
là gốc). Nút gốc là nút duy nhất không có nút cha. Nút gốc là nơi khởi đầu của nhiều
giải thuật trên cây. Tất cả các nút khác được nối về nút gốc bằng một đường đi qua các
cạnh hay các liên kết.
I.2.3. Các nút lá
Các nút không có nút con được gọi là nút lá hay gọi đơn giản là lá.

LỚP 09T4 TRANG 5
ĐỒ ÁN CẤU TRÚC DỮ LIỆU
I.2.4. Các nút trong
Nút trong của một cây là nút trên cây có ít nhất một con, nghĩa là các nút không
phải là lá. Các khái niệm về mức của mỗi nút, chiều cao của cây được định nghĩa
giống như cây trong lý thuyết đồ thị.
I.2.5. Cây con
Một cây con là một bộ phận của cấu trúc dữ liệu cây mà tự nó cũng là một cây.
Một nút bất kỳ trong cây T, cùng với các nút dưới nó tạo thành một cây con của T.
I.3. Biểu diễn cây
Có nhiều phương pháp biểu diễn cây. Cách thường dùng nhất là biểu diễn mỗi
nút như một dữ liệu kiểu bản ghi, mỗi nút chứa các con trỏ tới các con hoặc cha của
nó, hoặc cả hai. Cây cũng có thể biểu diễn bằng các mảng cùng với quan hệ giữa các
vị trí trong mảng.
I.3.1. Biểu diễn bằng các nút với các con trỏ
Mỗi nút là một dữ liệu kiểu bản ghi với ba trường: Một trường thường gọi là
INFOR, chứa thông tin lưu trữ tại nút đó. Thông tin này có thể chỉ là một số, một kư
tự, cũng có thể là một tập hợp dữ liệu rất phức tạp. Hai trường LLINK và RLINK chứa
các liên kết trái và phải. Nếu cây là cây nhị phân, LLINK trỏ tới con trái của nút,
RLINK trỏ tới con phải của nút. Nếu cây là cây tổng quát, LLINK trỏ tới con cực trái
và RLINK trỏ tới em kế cận phải của nút đó. Do đó danh sách các nút biểu diễn một
cây tổng quát, khi được xem là biểu diễn của cây nhị phân sẽ cho một cây nhị phân.
Cây nhị phân này được gọi là cây nhị phân tương đương với cây tổng quát ban đầu.
I.3.2. Biểu diễn cây nhị phân bằng mảng
Cây nhị phân đầy đủ là cây nhị phân, trong đó mỗi nút trong chỉ có hai con. Cây
nhị phân hoàn chỉnh là cây nhị phân đầy đủ, trong đó tất cả các lá đều ở mức cao nhất.
Một cây nhị phân hoàn chỉnh chiều cao h chỉ có 2
h + 1
− 1 nút.
Do đó người ta có thể dùng một mảng gồm 2

h + 1
− 1 phần tử để biểu diễn cây
hoàn chỉnh, bằng cách lần lượt lưu trữ thông tin của mỗi nút vào mảng theo thứ tự từ
trên xuống dưới, từ trái sang phải. Khi đó con trái của nút thứ i là phần tử thứ 2*i, con
phải là phần tử thứ 2*i+1. Cha của phần tử thứ i là phần tử thứ int(i/2).
Nếu cây là không hoàn chỉnh, ta gán giá trị Null cho các vị trí còn thiếu so với
cây nhị phân hoàn chỉnh. Một cách khác, dùng một mảng hai chiều trong dòng thứ
nhất ghi các thông tin của nút, dòng thứ hai ghi chỉ số của nút cha của nút đó với dấu +
nếu nút hiện tại là con trái, với dấu - nếu nút hiện tại là con phải của nút cha.
I.4. Các phương pháp duyệt cây
Duyệt một cây là một trình tự làm việc với các nút trong cây, trình tự này giống
như một chuyến đi qua các nút trên cây theo các liên kết cha-con. Các giải thuật duyệt
LỚP 09T4 TRANG 6
ĐỒ ÁN CẤU TRÚC DỮ LIỆU
khác nhau về thứ tự “viếng thăm” giữa một nút cha và các nút con. Chúng được gọi
là duỵệt tiền thứ tự, nếu viếng thăm đỉnh cha trước rồi mới đến các con, là duyệt hậu
thứ tự nếu viếng thăm hết các con rồi mới đến cha.
II. Chương trình
II.1. Các thư viện sử dụng trong chương trình
- #include<conio.h> : Thư viện con trỏ màn hình
- #include<string.h> : Thư viện các hàm xử lý xâu chuổi
- #include<stdio.h> : Thư viện các hàm nhập xuất
II.2. Định nghĩa các cấu trúc dữ liệu
Để lưu trữ một gia phả, ta xây dựng một struct giapha để lưu các thông
tin sau:
- Họ tên , ngày tháng năm sinh , gia đình (đã kết hôn hay chưa).
- Cha: cho biết tên cha người đó.
- Số con : cho biết số con của người đó.
- Mức : cho biết thế hệ của người đó tính từ ông trưởng (thế hệ 0).
- Biến con trỏ trỏ tới những người con khai báo thành mảng sub[n]

struct giapha
{
infor ch;
infor ht;
LỚP 09T4 TRANG 7
ĐỒ ÁN CẤU TRÚC DỮ LIỆU
int n,t,ns;
int gd,socon,muc;
giapha *sub[50];
};
Để tạo một cây lưu gia phả ta định nghĩa Tree là con trỏ kiểu bản ghi gia phả và
khai báo cây T kiểu Tree.
typedef giapha *Tree;
Tree T;
Như vậy ta đã hoàn thành bước định nghĩa một cây để lưu dữ liệu của gia phả
II. 3. Các hàm sử dụng trong chương trình chính
Chương trình bao gồm các hàm sau:
- Tree taogiapha(infor x,int ngay,int thang,int nam,int z,int socon,int Muc): Hàm này trả
vể giá trị là dữ liệu kiểu Tree, nhiệm vụ của hàm này là biến đổi từ thông tin rời rạc
gồm họ tên, ngày sinh , gia đình thành một phần tử kiểu bản ghi giapha.
- void duyet(Tree T,Tree onggia,int *a): Hàm này duyệt cây theo thứ tự trước . Tức là
duyệt theo thứ tự : Gốc  Con1 Con2 Con3. Hàm duyệt qua tất cả các phần tử
của cây và in ra màn hình, hàm sử dụng trong hàm void hienthi(Tree T).
- void hienthi(Tree T): Hàm này để hiển thị toàn bộ cây ra màn hình.
- void Search(Tree T,infor x,Tree &vt ): Hàm này để tìm kiếm Người có tên “ x “ lưu
vào vùng nhớ Tree vt, nghĩa là tìm kiếm người đó và thông tin con cháu người đó.
- void SearchMuc(Tree T,int Muc,Tree vt): Hàm này để tìm thông tin tất cả những người
cùng thế hệ với người này.
- void nhapnguoi(Tree &T): Hàm này để nhập thông tin của một người vào gia phả từ
bàn phím, gồm có : Họ tên , Ngày sinh , Gia đình ,Người sinh thành (cha).

- void hienthitimnguoi(): Hàm này hiển thị tất cả thông tin của những người cùng thế
hệ.
- void inds(Tree T): Hàm này xuất gia phả dưới dạng danh sách.
LỚP 09T4 TRANG 8
ĐỒ ÁN CẤU TRÚC DỮ LIỆU
- void incc(Tree T): Hàm này để in con cháu của một người.
II.4. Hình ảnh chạy chương trình
LỚP 09T4 TRANG 9
ĐỒ ÁN CẤU TRÚC DỮ LIỆU
Hình 3. Menu của chương trình chính
Hình 4. Nhập thông tin một người vào gia phả
LỚP 09T4 TRANG 10
ĐỒ ÁN CẤU TRÚC DỮ LIỆU
Hình 5. Sơ đồ cây gia phả của chương trình
Hình 6. Tìm kiếm thông tin một người trong gia phả
Hình 7: Danh sách gia phả
II.5. Mã nguồn chương trình
LỚP 09T4 TRANG 11
ĐỒ ÁN CẤU TRÚC DỮ LIỆU
#include<stdio.h>
#include<conio.h>
#include<string.h>
typedef char infor[20];
struct giapha
{
infor ch;
infor ht;
int n,t,ns;
int gd,socon,muc;
giapha *sub[50];

};
typedef giapha *Tree;
Tree T;
infor x,a;
int ngay,thang,nam;
int z,boqua;
Tree u,vt;
int Muc,i,socon;
Tree taogiapha(infor cha,infor x,int ngay,int thang,int nam,int z,int
socon,int Muc);
void duyet(Tree T,Tree cha,int *a);
void inds(Tree T);
void hienthi(Tree T, int Muc1);
void Search(Tree T,infor x,Tree &vt );
void SearchMuc(Tree T,int Muc,Tree vt);
void nhapnguoi(Tree &T);
void hienthitimnguoi();
void thongtinnhom();
void incc(Tree T);
void main()
{
clrscr();
int cv;
T=NULL;
do {
clrscr();
printf("\n");
printf("\n *************** DO AN MON CAU TRUC DU LIEU ****************");
printf("\n * ****** *");
printf("\n * THEM MOT NGUOI VAO GIA PHA : An phim 1 *");

printf("\n * MO PHONG SO LUOC CAY GIA PHA : An phim 2 *");
printf("\n * TIM MOT NGUOI TRONG GIA PHA : An phim 3 *");
printf("\n * XEM DANH SACH GIA PHA : An phim 4 *");
printf("\n * XEM THONG TIN NHOM THUC HIEN : An phim 5 *");
printf("\n * THOAT CHUONG TRINH : An phim 0 *");
printf("\n
************************************************************");
printf("\n\n VUI LONG CHON CONG VIEC: ");
scanf("%d",&cv);
switch(cv)
LỚP 09T4 TRANG 12
ĐỒ ÁN CẤU TRÚC DỮ LIỆU
{
case 1:
nhapnguoi(T);
break;
case 2:
clrscr();
hienthi(T,0);
getch();
break;
case 3:
clrscr();
hienthitimnguoi();
getch();
break;
case 4:
clrscr();
printf("\nDANH SACH GIA PHA");
inds(T);

getch();
break;
case 5:
clrscr();
thongtinnhom();
getch();
break;
default: if(cv!=0){printf("\nChuc nang ban chon khong dung ");
printf("\nNhan Enter de chon lai!");
getch();}
break;
}
}while(cv!=0);
}
Tree taogiapha(infor cha,infor x,int ngay,int thang,int nam,int z,int
socon,int Muc)
{
Tree p;
p=new giapha;
strcpy((*p).ht,x);
strcpy((*p).ch,cha);
(*p).n = ngay;
(*p).t = thang;
(*p).ns = nam;
(*p).gd = z;
(*p).socon=socon;
if(socon)
{
int i;
for(i=1;i<=socon;i++)

(*p).sub[i]=NULL;
}
(*p).muc=Muc;
return p;
}
LỚP 09T4 TRANG 13
ĐỒ ÁN CẤU TRÚC DỮ LIỆU
void duyet(Tree T,Tree cha,int *a)
{
int Muc1,j;
Muc1=*a;
if(T!=NULL)
{
cha=T;
j= (*T).muc;
switch(j)
{
case 0:
gotoxy(33,3);
printf("%s",(*T).ht);
gotoxy(34,4);
printf("(%d/%d/%d)",(*T).n,(*T).t,(*T).ns);
break;
case 1:
gotoxy(16+Muc1,8);
printf("%s",(*T).ht);
gotoxy(17+Muc1,9);
printf("(%d/%d/%d)",(*T).n,(*T).t,(*T).ns);
break;
case 2:

gotoxy(11+Muc1,13);
printf("%s",(*T).ht);
gotoxy(12+Muc1,14);
printf("(%d/%d/%d)",(*T).n,(*T).t,(*T).ns);
break;
case 3:
gotoxy(5+Muc1,19);
printf("%s",(*T).ht);
gotoxy(6+Muc1,20);
printf("(%d/%d/%d)",(*T).n,(*T).t,(*T).ns);
break;
case 4:
gotoxy(1+Muc1,24);
printf("%s",(*T).ht);
gotoxy(2+Muc1,25);
printf("(%d/%d/%d)",(*T).n,(*T).t,(*T).ns);
break;
}
for(int i=1;i<=(*T).socon;i++)
duyet((*T).sub[i],cha,&Muc1);
if((*T).muc==1) Muc1+=14;
if((*T).muc==2) Muc1+=9;
if((*T).muc==3) Muc1+=4;
Muc1++;
}
*a=Muc1;
}
void inds(Tree T)
{
if (T!=NULL)

{
LỚP 09T4 TRANG 14
ĐỒ ÁN CẤU TRÚC DỮ LIỆU
if((*T).muc==0)
printf("\n%s (%d/%d/%d) Ong to The he:%d ",(*T).ht,(*T).n,
(*T).t,(*T).ns,(*T).muc);
else
printf("\n%s (%d/%d/%d) Cha: %s The he:%d ",(*T).ht,(*T).n,
(*T).t,(*T).ns,(*T).ch,(*T).muc);
for(int i=1;i<=(*T).socon;i++)
inds((*T).sub[i]);
}
}
void hienthi(Tree T, int Muc1)
{
gotoxy(29,2);printf("*****CAY GIA PHA*****");
Tree cha=NULL;
duyet(T,cha,&Muc1);
}
void Search(Tree T,infor x,Tree &vt )
{
if(T!=NULL)
{
if(strcmp((*T).ht,x)==0) vt=T;
else
{
for(int i=1;i<=(*T).socon;i++)
Search((*T).sub[i],x,vt);
}
}

}
void SearchMuc(Tree T,int Muc,Tree vt)
{
if(T!=NULL)
{
if(((*T).muc==Muc)&&(T!=vt))
{
printf("\n\t\tTen: %s - Nam sinh: %d/%d/%d",(*T).ht,(*T).n,(*T).t,
(*T).ns);
if((*T).gd==1) printf("\t - Da ket hon");
else printf("\t - Chua ket hon");
}
else
{
for(int i=1;i<=(*T).socon;i++)
SearchMuc((*T).sub[i],Muc,vt);
}
}
}
void nhapnguoi(Tree &T)
{
clrscr();
nhap:
LỚP 09T4 TRANG 15
ĐỒ ÁN CẤU TRÚC DỮ LIỆU
fflush(stdin);
printf("\n Nhap ten: ");
gets(x);
vt=NULL;
Search(T,x,vt);

if(vt!=NULL)
{
printf("\n Nguoi nay da co trong gia pha.\n Nhap lai (An phim 1) - Bo qua
(An phim 0): ");
scanf("%d",&boqua);
if(boqua) goto nhap;
else goto boqua;
}
if(T!=NULL)
{
lai:
printf("\n Nhap ten bo(me) cua nguoi do : ");
fflush(stdin);
gets(a);
vt=NULL;
Search(T,a,vt);
if(vt==NULL)
{
printf("\n Khong tim thay ten nay.Vui long nhap lai.");
printf("\n Nhap lai (An phim 1) - Bo qua (An phim 0): ");
scanf("%d",&boqua);
if (boqua) goto lai;
else goto boqua;
}
else if ((*vt).gd==0)
{
printf("\n Nguoi nay chua ket hon nen chua co con.");
printf("\n Nhap lai (An phim 1) - Bo qua (An phim 0): ");
scanf("%d",&boqua);
if (boqua) goto lai;

else goto boqua;
}
int i=1;
while((((*vt).sub[i])!=NULL)&&(i<=(*vt).socon))
i++;
if(i>(*vt).socon)
{
printf("\n Nguoi nay chi co %d con, ko the them nua.",(*vt).socon);
printf("\n Nhap lai (An phim 1) - Bo qua (An phim 0): ");
scanf("%d",&boqua);
if(boqua) goto lai;
else goto boqua;
}
}
do
{
printf("\n Ngay sinh (1-31): ");
scanf("%d",&ngay);
}
while (ngay<=0 || ngay>31);
do
LỚP 09T4 TRANG 16
ĐỒ ÁN CẤU TRÚC DỮ LIỆU
{
printf("\n Thang sinh (1-12): ");
scanf("%d",&thang);
}
while (thang<=0 || thang > 12);
nhapnam:
do

{
printf("\n Nam sinh(1900 - 2011): ");
scanf("%d",&nam);
}
while (nam<1900 || nam>2011);
if(T!=NULL)
{
if(nam <= (*vt).ns)
{
printf ("\n Bo (me) cua %s la %s sinh nam %d, nam sinh cua %s phai
lon hon %d",x,(*vt).ht,(*vt).ns,x,(*vt).ns);
goto nhapnam;
}
}
if(T!=NULL)
{
printf("\n Tinh trang gia dinh 1-Kethon / 0-Chuakethon :");
scanf("%d",&z);
}
else z=1;
if(z!=0)
{
printf("\n Nhap so con: ");
scanf("%d",&socon);
}
else socon=0;
if(T==NULL)
{
Muc=0;
T = taogiapha(a,x,ngay,thang,nam,z,socon,Muc);

printf("\n Them thong tin vao gia pha thanh cong.");
getch();
}
else
{
i=1;
while((((*vt).sub[i])!=NULL)&&(i<=(*vt).socon))
i++;
if(!(i>(*vt).socon))
{
Muc=(*vt).muc+1;
u=taogiapha(a,x,ngay,thang,nam,z,socon,Muc);
(*vt).sub[i]=u;
printf("\n Them thong tin vao gia pha thanh cong.");
getch();
}
}
boqua:
}
LỚP 09T4 TRANG 17
ĐỒ ÁN CẤU TRÚC DỮ LIỆU
void incc(Tree T)
{
if (T!=NULL)
{
printf("\n\tTen: %s Nam sinh:(%d/%d/%d) ",(*T).ht,(*T).n,(*T).t,
(*T).ns);
for(int i=1;i<=(*T).socon;i++)
incc((*T).sub[i]);
}

}
void hienthitimnguoi()
{
fflush(stdin);
printf("\n Nhap ten nguoi ban muon tim: ");
gets(x);
vt=NULL;
Search(T,x,vt);
if(vt==NULL)
{
printf("\n Khong tim thay %s trong gia pha",x);
getch();
}
else
{
printf("\n Cac thong tin cua %s",x);
printf("\n\t - Tinh trang hon nhan cua nguoi nay: ");
if((*vt).gd) printf("Da ket hon");
else printf("Chua ket hon");
if((*vt).socon)
{
printf("\n\t - Thong tin ve con chau:");
for(int k=1;k<=(*vt).socon;k++)
if((*vt).sub[k]!=NULL)
incc((*vt).sub[k]);
}
else printf("\n\t\tNguoi nay khong co con");
printf("\n\t - Nhung nguoi cung the he trong gia pha:");
SearchMuc(T,(*vt).muc,vt);
getch();

clrscr();
printf("\n Cay gia pha cua %s:",x);
hienthi(vt,0);
}
}
void thongtinnhom(){
printf("\n");
printf("\n
***********************************************************");
printf("\n * *");
printf("\n * THONG TIN NHOM *");
printf("\n * Ho va ten Lop *");
printf("\n * *");
printf("\n * 1. Tran Thanh Duy 09T4 *");
LỚP 09T4 TRANG 18
ĐỒ ÁN CẤU TRÚC DỮ LIỆU
printf("\n * 2. Nguyen Van Hung 09T4 *");
printf("\n * 3. Phan Dang Mui 09T4 *");
printf("\n
***********************************************************");
}
LỚP 09T4 TRANG 19

×