Từ 1 tới 2 trên tổng số 2 kết quả

Đề tài: cách sắp xếp trong danh sách liên kết

  1. #1
    Ngày gia nhập
    04 2012
    Bài viết
    1

    Angry cách sắp xếp trong danh sách liên kết

    Mọi người xem hàm sắp xếp này sai chỗ nào mình sắp xếp không được
    Code:
    #include "stdafx.h"
    #include "stdio.h"
    #include "stdlib.h"
    #include "conio.h"
    #define MAX 80
    #define BACK_TO_MENU printf("\n\n nhan phim bat ky de tro ve menu. . ."); getch();
    
    struct student
    {
    	int id;
    	char name[30];
    	float tk;
    };
    //ham tao danh sach tuy chon
    int menu()
    {
    	int choice;
    	do{
    		system("cls");
    		printf(" MENU\n"
    		   " ----------------\n"
    		   " 1. Them sinh vien.\n"
    		   " 2. In danh sach sinh vien.\n"
    		   " 3. Tim kiem sinh vien.\n"
    		   " 4. Sua sinh vien.\n"
    		   " 5. Xoa sinh vien.\n"
    		   " 6. Sap xep sinh vien.\n"
    		   " 0. Thoat.\n");
    		printf("\n Ban chon 1,2,3,4,5,6: ");
    		scanf("%d",&choice);
    	} while (choice<0 || choice>6);
    	return choice;
    }
    
    int IdExist(struct student sinhvien[], int ID)
    {
    	for(int i=0; i<MAX; i++)
    		if(sinhvien[i].id==ID) return i;
    	return -1;
    }
    
    int find_free(struct student sinhvien[])
    {
    	int t=-1;
    	for (t=0;t<MAX && sinhvien[t].id !=0;t++);
    	return t;		
    }
    //ham them sinh vien
    void add(struct student sinhvien[]) //1
    {
    	system("cls");
    	int node=find_free(sinhvien), id, valid=0;
    	if(node==-1)
    		printf("Het cho trong roi, xoa bot");
    	else
    	{
    		do
    		{
    			system("cls");
    			printf("ID: ");
    			scanf("%d",&id);	
    			if(IdExist(sinhvien,id)==-1)
    			{
    				sinhvien[node].id=id;
    				valid=1;
    			} else 
    			{
    				printf("ID da ton tai, nhan enter de nhap lai. . . ");
    				getch();
    				valid=0;
    			}
    		} while(!valid);
    		printf("Nhap ten: ");
    		fflush(stdin);
    		scanf("%[^\n]",sinhvien[node].name);
    
    
    		printf("Nhap diem tong ket: ");
    		scanf("%f",&sinhvien[node].tk);
    
    	}	
    	BACK_TO_MENU;
    }
    //ham in danh sach sinh vien
    void list(struct student sinhvien[]) //2
    {
    	system("cls");
    	for(int i=0; i<MAX; i++)
    	{
    		if(sinhvien[i].id)
    			printf("\n ID: %04d - %s - diem TK: %.1f",sinhvien[i].id,sinhvien[i].name,sinhvien[i].tk);
    	}
    	BACK_TO_MENU;
    }
    //ham tim kiem
    void find(struct student sinhvien[]) //3
    {
    	int id=0, node;
    	system("cls");
    	printf("Nhap ID: ");
    	scanf("%d",&id);
    	node=IdExist(sinhvien,id);
    	if(node==-1)
    		{
    			printf("ID khong ton tai, nhan phim bat ki de tiep tuc. . . ");
    			getch();
    			return;
    		}
    	system("cls");
    	printf("\n Sinh vien: %s\n",sinhvien[node].name);
    	printf("\n   ID  : %d", sinhvien[node].id);
    	printf("\n   Tong ket: %0.2f",sinhvien[node].tk);
    
    	BACK_TO_MENU;
    }
    //ham sua diem tong ket
    void edit(struct student sinhvien[]) //4
    {
    	system("cls");
    	int id=0, node;
    	printf("Nhap ID: ");
    	scanf("%d",&id);
    	node=IdExist(sinhvien,id);
    	if(node==-1)
    		{
    			printf("ID khong ton tai, nhan phim bat ki de tiep tuc. . . ");
    			getch();
    			return;
    		};
    	system("cls");
    	printf("Sua sinh vien: %s\n",sinhvien[node].name);
    	printf("  Nhap diem tong ket: ");
    	scanf("%f",&sinhvien[node].tk);
    
    	BACK_TO_MENU;
    }
    //ham xoa sinh vien 
    void del(struct student sinhvien[]) //5
    {
    	system("cls");
    	int id=0, node;
    	system("cls");
    	printf("Nhap ID: ");
    	scanf("%d",&id);
    	node=IdExist(sinhvien,id);
    	if(node==-1)
    		{
    			printf("ID khong ton tai, nhan phim bat ki de tiep tuc. . . ");
    			getch();
    			return;
    		}
    	sinhvien[node].id=0;
    	system("cls");
    	printf("Da xoa sinh vien %s ra khoi danh sach!",sinhvien[node].name);
    	BACK_TO_MENU;
    }
    //ham sap xep
    void sort(struct student sinhvien[])//6
    {
        int i,j,n;
        for (i=0;i<n-1;i++)
            for (j=i+1;j<n;j++) if (sinhvien[i].tk < sinhvien[j].tk)
            {
                student tmp;
                tmp= sinhvien[i];
                sinhvien[i]=sinhvien[j];
                sinhvien[j]=tmp;
            }
        for (i=0;i<n;i++) printf("\n ID: %04d - %s - diem TK: %.1f",sinhvien[i].id,sinhvien[i].name,sinhvien[i].tk);
    }
    
    
    void main(void)
    {
    	struct student sinhvien[MAX];
    	int mode=0,i=0;
    	for(i=0; i<MAX; i++)
    		sinhvien[i].id=0;
    	do
    	{
    		mode=menu();
    		switch(mode)
    		{
    		case 1: add(sinhvien); break;
    		case 2: list(sinhvien); break;
    		case 3: find(sinhvien); break;
    		case 4: edit(sinhvien); break;
    		case 5: del(sinhvien); break;
    		case 6: sort(sinhvien); break;
    		}
    	} while(mode);
    }

  2. #2
    Ngày gia nhập
    03 2009
    Bài viết
    1

    1. Đây chỉ là 1 array struct, không phải danh sách liên kết.

    2. Hàm find_tree là để đếm số sinhvien trong mảng. Nhưng bạn đặt biến int t=-1; Sau đó lại for(t=0;...). Vậy thì lúc nào hàm cũng sẽ return về 0. Kéo theo hàm add sai: if(node==-1).
    Và sao bạn không đặt 1 biến đếm toàn cục, hoặc trong hàm main. Mỗi khi add 1 sinh viên thì tăng lên 1, và không phải chạy hàm find_tree.

    3. Hàm sort của bạn: int i,j,n; for (i=0;i<n-1;i++)
    n của bạn chưa gán giá trị (hình như mặc định khi không gán giá trị thì VC++ tự động gán =0, lâu rồi không nhớ), nên i=0<0 hay i=0<(không có giá trị) thì làm sao chạy được.

Các đề tài tương tự

  1. Lập trình C Các bác giải dùm em bài trộn 2 danh sách có thứ tự thành 1 danh sách có thứ tự trong DS liên kết đơn
    Gửi bởi letranhoangtai trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 05-09-2012, 02:03 AM
  2. Bài tập C++ Tách chẵn lẽ thành 2 danh sách trong danh sách liên kết đơn?
    Gửi bởi leo009394 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 8
    Bài viết cuối: 01-01-2012, 04:52 PM
  3. đảo ngược vùng liên kết trong danh sách liên kết đơn
    Gửi bởi khongcochi trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 07-07-2011, 10:18 PM
  4. Nhập và xuất danh sách liên kết lồng danh sách liên kết?
    Gửi bởi nvluong_it trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 22-04-2011, 11:30 AM
  5. Lập trình C Danh sách liên kết - Xử lý danh sách liên kết trong lập trình C
    Gửi bởi phucduan trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 08-11-2010, 10:25 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn