30/09/2018, 17:03

Danh sách liên kết đơn Sinh viên

Em mới viết đến đây, debug thì nó chạy tá lả. Mọi người giúp em tìm lỗi với !


#include <stdio.h>
#include <conio.h>
#include <string.h>

struct SinhVien
{
	int MSSV;
	char HoTen[30];
	float DiemTB;
};




void NhapSV(SinhVien &sv)
{
	printf("Nhap ma so sinh vien: ");
	scanf("%d",&sv.MSSV);
	printf("Nhap ho ten sinh vien: ");
	fflush(stdin);
	gets(sv.HoTen);
	printf("Nhap diem TB cua sinh vien: ");
	scanf("%f",&sv.DiemTB);
}




void XuatSV(SinhVien sv)
{
	printf("
MSSV: %d",sv.MSSV);
	printf("
Ho va ten: ");
	puts(sv.HoTen);
	printf("Diem TB: %.2f",sv.DiemTB);
}




struct Node
{
	SinhVien Data;
	Node *Next;
};




struct List
{
	Node *Head;
	Node *Tail;
};




void CreateList(List &l)
{
	l.Head=l.Tail=NULL;
}




Node* CreateNode(SinhVien sv)
{
	Node *p = new Node;
	p->Data = sv;
	p->Next = NULL;
	return p;
}




void AddHead(List &l, SinhVien sv)
{
	Node *p = CreateNode(sv);
	if(l.Head==NULL)
		l.Head=l.Tail=p;
	p->Next=l.Head;
	l.Head=p;
}



void XemList(List l)
{
	Node *p = l.Head;
	while(p!=NULL)
	{
		XuatSV(p->Data);
		printf("
");
		p=p->Next;
	}
}




void main()
{
	List l;
	CreateList(l);
	SinhVien sv1, sv2, sv3;
	NhapSV(sv1);
	NhapSV(sv2);
	NhapSV(sv3);
	AddHead(l,sv3);
	AddHead(l,sv2);
	AddHead(l,sv1);
	XemList(l);
	getch();
}

Nguyễn Minh Dũng viết 19:11 ngày 30/09/2018

Em so sánh với code ở đây xem:

Dropbox

Dropbox - Error

Dropbox is a free service that lets you bring your photos, docs, and videos anywhere and share them easily. Never email yourself a file again!

Gió viết 19:08 ngày 30/09/2018

AddHead trong if == NULL thì return luôn, còn không thì head-> next = head nên bị lặp vô hạn

799 viết 19:13 ngày 30/09/2018

Bạn nói đúng, mình đã thực hiện luôn 2 dòng phía dưới lệnh l.Head=l.Tail=p; Lẽ ra phải rẽ nhánh, mình quên dùng else

void AddHead(List &l, SinhVien sv)
{
	Node *p = CreateNode(sv);
	if(l.Head==NULL)
		l.Head=l.Tail=p;
	else
	{
		p->Next=l.Head;
		l.Head=p;
	}
}
Bài liên quan
0