Danh sách liên kết theo chiều thuận

Thảo luận trong 'C/C++' bắt đầu bởi LieuKyThien, 17 Tháng tám 2009.

  1. Offline

    LieuKyThien

    • Thành Viên Mới

    Số bài viết:
    79
    Đã được thích:
    49
    Điểm thành tích:
    0
    -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();
    }
    
    sunboyjinyotino thích bài này.

Chia sẻ trang này

Advertising: Linux system admin | nukeviet | nukeviet 4 | Upload ảnh miễn phí