Kteam Q&A Community

Cộng đồng hỏi đáp về các vấn đề trong lập trình, công nghệ thông tin.

0

Làm sao để xuất danh sách liên kết trong 1 cây nhị phân ra

E chào mọi người, e đang làm bài tập CTDL, e có 1 cây nhị phân như sau

struct DOCGIA
{
	int MaDG;
	char Ho[10];
	char Ten[15];
	char Phai[5];
	int trangthai;
	ListMuonTra *listmuontra;
};
typedef struct DOCGIA DocGia;
struct NODEDOCGIA
{
	DocGia dg;
	struct NODEDOCGIA *pLeft;
	struct NODEDOCGIA *pRight;
};
typedef struct NODEDOCGIA NodeDocGia;
typedef NodeDocGia* TREEDocGia;

lúc e nhập xong hết rồi thì e lại xuất thông tin trên cây nhị phân ra thì nó xuất ngang đến List thì nó báo lỗi. còn e thử nhập xong rồi xuất chỉ mỗi cái list thì nó được.

lỗi là  "Exception thrown: read access violation.  t->dg.listmuontra** was 0xCDCDCDCD. occurred** "

ở dòng 

		p = t->dg.listmuontra->pHead;

code đây đủ của e, đây là e chỉ demo nhập 1 người thôi ạ, mong mọi người giúp e ạ, e cám ơn nhiều !!!

#include<string.h>
using namespace std;
#define MaxList 200
//Danh mục sách
struct DANHMUCSACH 
{
	int MaSach;
	int TrangThai;
	int ViTri;
};
typedef struct DANHMUCSACH DMS;
struct NODEDANHMUCSACH
{
	DMS dms;
	NODEDANHMUCSACH *pNext;
};
typedef NODEDANHMUCSACH NodeDMS;
struct LISTDANHMUCSACH
{
	NodeDMS *pHead;
	NodeDMS *pTail;
};
typedef struct LISTDANHMUCSACH LISTDMS;
//Khởi tạo List Danh mục sách
void InitLISTDMS(LISTDMS &list)
{
	list.pHead = NULL;
	list.pTail = NULL;
}
//Đầu sách
struct DAUSACH 
{
	int ISBN;
	char TenSach[100];
	int SoTrang;
	char TacGia[50];
	int NamXB;
	char TheLoai[50];
	LISTDMS *ListDMS;
};

// Danh sách mượn trả
struct MUONTRA
{
	int MaSach;
	char NgayMuon[15];
	char NgayTra[15];
	int TrangThai;

};
typedef struct MUONTRA MuonTra;

struct NODEMUONTRA
{
	MuonTra muontra;
	NODEMUONTRA *pNext;
};

typedef struct NODEMUONTRA NodeMuonTra;
struct LISTMUONTRA
{
	NodeMuonTra *pHead;
	NodeMuonTra *pTail;
};
typedef struct LISTMUONTRA ListMuonTra;
// khởi tạo danh sách mượn trả ban đầu
void InitListMuonTra(ListMuonTra &list)
{
	list.pHead = NULL;
	list.pTail = NULL;
}


NodeMuonTra *CreateMT(int ms, char *nm, char *nt, int tt)
{
	NodeMuonTra *p = new NodeMuonTra;
	if (p == NULL)
		exit(1);
	else
	{
		p->muontra.MaSach = ms;
		strcpy_s(p->muontra.NgayMuon, nm);
		strcpy_s(p->muontra.NgayTra, nt);
		p->muontra.TrangThai = tt;
		p->pNext = NULL;

    }
return p;
}

void AddMuontra(ListMuonTra &l, NodeMuonTra *p)
{
	if (l.pHead == NULL)
	{
		l.pHead = l.pTail = p;
	}
	else
	{
		l.pTail->pNext = p;
		l.pTail = p;
	}
}
//Danh sách độc giả
struct DOCGIA
{
	int MaDG;
	char Ho[10];
	char Ten[15];
	char Phai[5];
	int trangthai;
	ListMuonTra *listmuontra;
};
typedef struct DOCGIA DocGia;
struct NODEDOCGIA
{
	DocGia dg;
	struct NODEDOCGIA *pLeft;
	struct NODEDOCGIA *pRight;
};
typedef struct NODEDOCGIA NodeDocGia;
typedef NodeDocGia* TREEDocGia;
// Khởi tại tree đọc giả
void InitTreeDocGia(TREEDocGia &t)
{
	t = NULL;
}
// Thêm đọc giả vào cây
void AddNDG(TREEDocGia &t,DocGia q)
{
	if (t == NULL)
	{
		NodeDocGia *d = new NodeDocGia;
		/*d->dg.MaDG = q.MaDG;
		strcpy_s(d->dg.Ho, q.Ho);
		strcpy_s(d->dg.Ten, q.Ten);
		strcpy_s(d->dg.Phai, q.Phai);
		d->dg.trangthai = q.trangthai;*/
		d->dg = q;
		d->pLeft = NULL;
		d->pRight = NULL;
		t = d;
	}
	else {
		if (t->dg.MaDG > q.MaDG)
		{
			AddNDG(t->pLeft, q);
		}
		else { if (t->dg.MaDG < q.MaDG)
			AddNDG(t->pRight, q);
		}
	}
}
void Xuatlist(ListMuonTra l)
{

    NodeMuonTra *p = new NodeMuonTra;
p = l.pHead;
while (p != NULL)
{
	cout << "\nMa sach: " << p->muontra.MaSach;
	cout << "\nNgay muon: " << p->muontra.NgayMuon;
	cout << "\nNgay tra: " << p->muontra.NgayTra;
	cout << "\nTrang thai: " << p->muontra.TrangThai;
	p = p->pNext;
}
}
//xuất các đọc giả
void XuatDG(TREEDocGia t)
{
	if (t != NULL)
	{
		cout << "\nMa doc gia: " << t->dg.MaDG;
		cout << "\nHo doc gia: " << t->dg.Ho;
		cout << "\nTen doc gia: " << t->dg.Ten;
		cout << "\nPhai: " << t->dg.Phai;
		cout << "\nTrang thai the: " << t->dg.trangthai;
		cout << "\nDanh sach muon tra: \n";
		NodeMuonTra *p = new NodeMuonTra;
		p = t->dg.listmuontra->pHead;
		while (p != NULL)
		{
			cout << "\nMa sach: " << p->muontra.MaSach;
			cout << "\nNgay muon: " << p->muontra.NgayMuon;
			cout << "\nNgay tra: " << p->muontra.NgayTra;
			cout << "\nTrang thai: " << p->muontra.TrangThai;
			p = p->pNext;
		}
		XuatDG(t->pLeft);
		XuatDG(t->pRight);
	}
}
void NhapDG(DocGia *&dg)
{
	int mdg, tt,x;
	int ms, tt2;
	char ngaytra[15], ngaymuon[15];
	char ho[30], ten[30], phai[5];
	dg = new DocGia;
	ListMuonTra l;
	InitListMuonTra(l);
	cout << "Nhap ma DG:"; cin >> mdg;
	dg->MaDG = mdg; 
	cin.ignore();
	cout << "Nhap Ho doc gia: "; cin.getline(ho, 30);
	strcpy_s(dg->Ho, ho);
	cout << "Nhap ten doc gia:"; cin.getline(ten, 30);
	strcpy_s(dg->Ten, ten);
	cout << "Nhap Phai: "; cin.getline(phai, 5);
	strcpy_s(dg->Phai, phai);
	cout << "Trang thai the: "; cin >> tt;
	dg->trangthai = tt;
	cout << "Nhap danh sach muon tra, ket thuc bang so 0:";
		do {
			cout << "Nhap ma sach: "; cin >> ms;
			cin.ignore();
			cout << "Nhap ngay muon: "; cin.getline(ngaymuon, 15);
			cout << "Nhap ngay tra:"; cin.getline(ngaytra, 15);
			cout << "Nhap trang thai: "; cin >> tt2;
			NodeMuonTra *p = CreateMT(ms, ngaymuon, ngaytra, tt2);
			AddMuontra(l, p);
			cout << "\ntiep tuc nhap bam <>0\n"; cin >> x;
		} while (x != 0);
}
// hàm main
int main()
{
	TREEDocGia t;
	DocGia *dg=new DocGia;
	InitTreeDocGia(t);	
	NhapDG(dg);
	AddNDG(t, *dg);
	XuatDG(t);
	system("pause");
	return 0;
}

 

0 câu trả lời Thêm câu trả lời

Câu trả lời của bạn

Bạn có thể trả lời câu hỏi này? Hãy chia sẻ nó cho mọi người.

Hủy bỏ hoặc

Chiến dịch

Kteam - Howkteam Free Education