-Chức năng của chương trình: + Nhập dữ liệu và xuất ra màn hình. + Tìm kiếm theo quê quán. + Bổ sung một người vào cuối danh sách, vào vị trí thứ 2, vào một vị trí bất kỳ. Code: Mã: #include<stdio.h> #include<conio.h> #include<malloc.h> #include<string.h> typedef struct pp { char ht[25],qq[25]; int ns; struct pp *tiep; }person; void main() { person *p,*pdau,*p1,*p2; int ns,y,n=0,vitri,i; char ht[25],qq[25]; clrscr(); //Nhap danh sach nguoi tham gia pdau=NULL; while(1) //vong lap vo tan { printf("\nNhap ho ten (Bam enter de ket thuc): "); fflush(stdin); gets(ht); if(ht[0]==0) break; //Dk thoat lap if(pdau==NULL) { pdau=(person *)malloc(sizeof(person)); p=pdau; } else { p->tiep=(person *)malloc(sizeof(person)); p=p->tiep; } strcpy(p->ht,ht); printf("\nNhap que quan: "); fflush(stdin); gets(p->qq); printf("\nNhap nam sinh: "); scanf("%d",&ns); p->ns=ns; p->tiep=NULL; n++; } //In danh sach clrscr(); y=1; p=pdau; while(p!=NULL) { printf("Ho ten: %s",(*p).ht); gotoxy(30,y); printf("Que quan: %s",(*p).qq); gotoxy(56,y); printf("Nam sinh: %d.\n",(*p).ns); y++; p=p->tiep; } printf("\nTong so nguoi : %d",n); getch(); //Tim kiem theo que quan clrscr(); while(1) { printf("\nNhap que quan can tim kiem(Bam enter de ket thuc): "); fflush(stdin); gets(qq); if(qq[0]==0) break; //Dk thoat lap p=pdau; while(p!=NULL) { if(strcmp(p->qq,qq)==0) { printf("Ho ten: %s",(*p).ht); printf(" Que quan: %s",(*p).qq); printf(" Nam sinh: %d.\n",(*p).ns); } p=p->tiep; } } //Loai phan tu dau danh sach printf("Loai phan tu dau danh sach\n"); if(pdau!=NULL) { p=pdau; pdau=pdau->tiep; free(p); n--; } getch(); //Bo Sung mot nguoi vao cuoi danh sach printf("Bo sung mot nguoi vao cuoi danh sach: \n"); if(pdau==NULL) { pdau=(person *)malloc(sizeof(person)); p=pdau; } else { p=pdau; while(p->tiep!=NULL) p=p->tiep; p->tiep=(person *)malloc(sizeof(person)); p=p->tiep; } //Nhap thong tin nguoi can bo sung printf("Ho ten: "); fflush(stdin); gets(p->ht); printf("Que quan: "); fflush(stdin); gets(p->qq); printf("Nam sinh: "); scanf("%d",&ns); p->ns=ns; p->tiep=NULL; n++; getch(); //Chen them vao sau nguoi thu nhat printf("Chen them vao sau nguoi thu nhat: "); //Nhap thong tin nguoi can bo sung p=(person *)malloc(sizeof(person)); printf("\nHo ten: "); fflush(stdin); gets(p->ht); printf("Que quan: "); fflush(stdin); gets(p->qq); printf("Nam sinh: "); scanf("%d",&ns); p->ns=ns; n++; //Lien ket p1=pdau->tiep; //Vi tri thu 2 trong danh sach pdau->tiep=p; //pdau tro toi nguoi can bo sung p->tiep=p1; //Con tro nguoi can bo sung tro toi nguoi thu 2(Sau cau lenh nay se chuyen thanh nguoi thu 3) getch(); //Bo sung mot nguoi vao vi tri yeu cau while(1) { printf("\nNhap vi tri nguoi can bo sung(Bam 0 de ket thuc viec nhap): "); scanf("%d",&vitri); if(vitri==0) break; //Nhap thong tin nguoi can bo sung p=(person *)malloc(sizeof(person)); printf("\nHo ten: "); fflush(stdin); gets(p->ht); printf("Que quan: "); fflush(stdin); gets(p->qq); printf("Nam sinh: "); scanf("%d",&ns); p->ns=ns; i=0; p1=pdau; while(i==vitri) { p1=p1->tiep; i++; } //Lien ket p2=p1->tiep; p1->tiep=p; p->tiep=p2; } //In danh sach clrscr(); y=1; p=pdau; while(p!=NULL) { printf("Ho ten: %s",(*p).ht); gotoxy(30,y); printf("Que quan: %s",(*p).qq); gotoxy(56,y); printf("Nam sinh: %d.\n",(*p).ns); y++; p=p->tiep; } getch(); }