30/09/2018, 21:40
Danh sách liên kết đơn?
mình có bài dslk như sau, nó bị lỗi ở phần sắp xếp sinh viên theo điểm và hiện ds sinh viên có điểm lớn nhất, khi chọn vào 2 cái đó thì bị crash, không hiểu mình sai ở đâu.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
//Khoi tao cau truc du lieu cua danh sach lK don kieu SinhVien
struct SinhVien{
char masv[100];
char tensv[100];
float diemsv;
};
//Khoi tao 1 NODE
struct Node{
SinhVien data;
struct Node *pNext;
};typedef struct Node NODE;
//Khoi tao danh sách lien ket
struct List{
NODE *pHead;
NODE *pTail;
};typedef struct List LIST;
//Khoi tao danh sach rong
void Init(LIST &l){
l.pHead = l.pTail = NULL;
}
//Tao NODE chua data vao con tro pNext trong danh sach
NODE* get_node(SinhVien x){
NODE *p = new NODE;
if(p==NULL){
printf("Bo nho khong du");
return 0;
}
p->data = x; // Luu sinh vien x vao data
p->pNext = NULL; // Khoi tao moi lien ket
return p;
}
//Nhap sinh vien
void nhapsv(SinhVien &sv){
printf("
Nhap ma Sinh vien: ");
fflush(stdin);
gets(sv.masv);
printf("Nhap ho ten Sinh Vien: ");
gets(sv.tensv);
fflush(stdin);
printf("Nhap diem trung binh sinh vien: ");
scanf("%f",&sv.diemsv);
fflush(stdin);
}
//Xuat sinh vien
void xuatsv(SinhVien sv){
printf("
");
printf("%s %s %.2f",sv.masv,sv.tensv,sv.diemsv);
}
//Hoan vi 2 sinh vien
void hoanvi(SinhVien &sv1, SinhVien &sv2){
SinhVien t = sv1;
sv1 = sv2;
sv2 = t;
}
//Tim sinh vien co diem MAX
void diemMAX(LIST l){
int dem;
NODE *p = l.pHead;
NODE *max;
max = p;
for(p; p!=NULL; p=p->pNext){
if(p->data.diemsv > max->data.diemsv){
max = p; dem = 0;
}
if(p->data.diemsv == max->data.diemsv){
max = p; dem++;
}
}
if(dem == 0){
xuatsv(max->data);
}else{
NODE *q = l.pHead;
while(q!=NULL){
if(p->data.diemsv==max->data.diemsv){
xuatsv(q->data);
q=q->pNext;
}
}
}
}
//Sap xep sinh vien diem tang dan
void sapxeptang(LIST l){
for(NODE *p=l.pHead; p!=l.pTail; p=p->pNext){
for(NODE *p1=p->pNext; p!=NULL; p1=p1->pNext){
if(p->data.diemsv > p1->data.diemsv){
hoanvi(p->data,p1->data);
}
}
}
}
//Menu
int menu(){
SinhVien sv;
LIST l;
int luachon;
Init(l);//Khoi tao danh sach NODE
do
{
printf("
=====MENU=====");
printf("
1. Nhap danh sach sinh vien");
printf("
2. Hien danh sach sinh vien");
printf("
3. Tim sinh vien");
printf("
4. Xoa sinh vien");
printf("
5. Tim sinh vien co diem cao nhat");
printf("
6. Sap xep sinh vien theo diem so tang dan");
printf("
0. Thoat");
printf("
Moi ban chon chuc nang: ");
scanf("%d",&luachon);
switch(luachon)
{
case 1:
taods(l);
system("cls");
break;
case 2:
printf("
=====Danh sach sinh vien=====");
printf("
Ma sv Ten sv Diem sv");
hiends(l);
break;
case 3:
timsv(l,sv);
break;
case 4:
xoasv(l);
break;
case 5:
printf("
=====THONG TIN SINH VIEN CO DIEM LON NHAT=====");
printf("
Ma sv Ten sv Diem sv");
diemMAX(l);
break;
case 6:
printf("
=====DANH SACH SINH VIEN SAU KHI SAP XEP=====");
printf("
Ma sv Ten sv Diem sv");
sapxeptang(l);
break;
case 0:
break;
default:
printf("Ban da chon sai, vui long chon lai !");
}
}while(luachon!=0);
giaiphong(&l);
return 1;
}
int main(){
system("cls");
menu();
system("cls");
return 0;
}
Bài liên quan
Format code đi bạn ơi dài như vậy mà ko format thì sao người khác đọc cho bạn dc đây
mình sửa rồi đó…
Bạn nên debug, trích ra phần sai rồi đăng lên, chứ bạn đăng cả file code như vậy rối lắm
Việc gian nan nhất của lập trình viên không phải là code mà là đọc code người khác
mình bị sai ở 2 hàm này