Tôi có đoạn code sau mong các bạn viết cho hàm tìm kiếm học sinh theo điểm.
Code:
#include <stdio.h>
#include <conio.h>
#include <alloc.h>
#include <string.h>
typedef struct SV
{
char ht[30];
float dtb;
struct SV *next;
}Sinhvien;
Sinhvien *pdau= NULL;
void tao_ds()
{
char ht [30];
float diem;
Sinhvien *p;
printf("Tao danh sach lien ket dong !\n");
do
{
fflush(stdin);
printf("Ho ten: "); gets(ht);
if(ht[0] !=0) //da nhap ten sinh vien
{
if(pdau ==NULL)
{
pdau = (Sinhvien*)malloc(sizeof(Sinhvien));
p = pdau;
}
else
{
p->next = (Sinhvien*)malloc(sizeof(Sinhvien));
p = p->next;
}
//day du lieu vao ptu moi dc tao
strcpy(p->ht, ht);
printf("Diem trung binh: "); scanf("%f", &diem);
p->dtb = diem;
p->next = NULL;
}
}while(ht[0]!=0);
}
void in_ds()
{
int stt = 1;
Sinhvien *p;
printf("Danh sach sinh vien\n");
printf("STT Ho ten Diem TB\n");
p= pdau;
while(p!= NULL)
{
printf("%d %s %6.2f\n", stt, p->ht, p->dtb);
p = p->next;
stt++;
}
}
Sinhvien search(char *ht)
{
Sinhvien *p, result={"",0.0};
p = pdau;
while(p != NULL)
{
if(strcmp(p->ht, ht)==0)
{
return *p;
}
p= p->next;
}
return result;
}
void insert(char ht[])
{
Sinhvien *p, *q, *kq;
char ten[30];
float dtb;
//nhap thong tin sv can them
q = (Sinhvien*)malloc(sizeof(Sinhvien));
printf("Ho ten:"); fflush(stdin); gets(ten);
strcpy(q->ht, ten);
printf("Diem TB:"); scanf("%f",&dtb);
q->dtb = dtb;
//ket thuc nhap tt sv
p = pdau;
kq = NULL;
while(p != NULL)
{
if(strcmp(p->ht, ht)==0)
{
kq = p;
break;
}
p = p->next;
}
//insert
if(kq==NULL)
printf("Khong tim thay vi tri chen\n");
else
{
if(kq->next ==NULL)
{
kq->next = q;
q->next = NULL;
}
else
{
q->next = kq->next;
kq->next = q;
}
printf("Inserted !!!");
}
free(q);
}
void xoa(char ht[])
{
Sinhvien *p, *q;
int kt = 0;
p=pdau;
if(strcmp(p->ht, ht) ==0)
{
q = pdau;
pdau = p->next;
free(q);
}
else
{
p=pdau; q=p->next;
while(q!=NULL)
{
if(strcmp(q->ht, ht)==0)//tim thay
{
kt = 1;
break;
}
p= p->next;
q= q->next;
}
if(kt != 0)
{
p->next = q->next;
free(q);
}
else
{
printf("Khong tim thay sv can xoa !");
}
}
}
void main()
{
Sinhvien kq;
char *s;
clrscr();
tao_ds();
in_ds();
//test function search(s);
printf("Tim kiem sinh vien: "); gets(s);
kq= search(s);
if(strcmp(kq.ht,"")==0)
{
printf("Khong tim thay");
}
else
{
printf("Ket qua: SV %s co diemtb = %.2f", kq.ht, kq.dtb);
}
//test function insert(s);
printf("\nInsert vao sau sinh vien nao? ");fflush(stdin); gets(s);
insert(s);
//test function xoa(s);
printf("\nDelete sinh vien nao? ");fflush(stdin); gets(s);
xoa(s);
in_ds();
getch();
}