01/10/2018, 10:48
Xóa node trong linked list
em có làm một bài quản lý sinh viên sử dụng Linked List thế này
#include <iostream>
#include <iomanip>
#include <string.h>
#include <stdlib.h>
#include <fstream>
#include <stdio.h>
using namespace std;
typedef struct sinhvien
{
char name[30];
char account[10];
char subject[10];
int score;
} STUDENT;
typedef struct node
{
STUDENT sSV;
struct node *pNext;
} NODE;
typedef struct list
{
NODE *pHead;
NODE *pTail;
} LIST;
void KhoiTaoDS(LIST *l)
{
l->pHead = NULL;
l->pTail = NULL;
}
NODE *KhoiTaoNODE(STUDENT sv)
{
NODE *p;
p = new NODE;
if(p == NULL)
{
cout << "Cap phat bo nho khong thanh cong";
}
strcpy(p->sSV.name, sv.name);
strcpy(p->sSV.account, sv.account);
strcpy(p->sSV.subject, sv.subject);
p->sSV.score = sv.score;
p->pNext = NULL;
return p;
}
void ThemDau(LIST *l, NODE *p)
{
if(l->pHead == NULL)
{
l->pHead = l->pTail = p;
}
else
{
p->pNext = l->pHead;
l->pHead = p;
}
}
void ThemCuoi(LIST *l, NODE *p)
{
if(l->pHead == NULL)
{
l->pHead = l->pTail = p;
}
else
{
l->pTail->pNext = p;
l->pTail = p;
}
}
void InDS(LIST l)
{
cout << setw(30) << left << "Name" << setw(10) << left << "Account" << setw(10) << left << "Subject" << setw(5) << left << "Score" << endl;
for(NODE *i = l.pHead; i != NULL; i = i->pNext)
{
cout << setw(30) << left << i->sSV.name;
cout << setw(10) << left << i->sSV.account;
cout << setw(10) << left << i->sSV.subject;
cout << setw(5) << left << i->sSV.score;
cout << "
";
}
}
void TimScore(LIST l, int score)
{
for(NODE *i = l.pHead; i != NULL; i = i->pNext)
{
if(i->sSV.score == score)
{
cout << "Name: " << i->sSV.name << "
";
cout << "Account: " << i->sSV.account << "
";
cout << "Subject: " << i->sSV.subject << "
";
cout << "Score: " << i->sSV.score << "
";
cout << "
";
}
}
}
void XoaSinhVien(LIST *l, char acc[10])
{
if(l->pHead == NULL)
{
cout << "Khong ton tai danh sach
";
}
else
{
for(NODE *i = l->pHead; i != NULL; i = i->pNext)
{
if(strcmp(i->pNext->sSV.account,acc) == 0)
{
NODE *d;
d = i->pNext;
i->pNext = d->pNext;
delete d;
}
else
{
cout << "Khong ton tai Account nay";
}
}
}
}
void NhapDanhSachSinhVien(LIST *l)
{
int n;
cout << "Nhap so luong sinh vien: ";
cin >> n;
for(int i = 1; i <= n; i ++)
{
STUDENT a;
cout << "
Nhap thong tin cho sinh vien thu " << i << "
";
cout << "Name: ";
fflush(stdin);
gets(a.name);
cout << "Account: ";
fflush(stdin);
gets(a.account);
cout << "Subject: ";
fflush(stdin);
gets(a.subject);
do
{
cout << "Score: ";
cin>>a.score;
}
while(a.score<0||a.score>10);
NODE *p = KhoiTaoNODE(a);
ThemCuoi(l, p);
}
cout << "
";
}
void LuuFile(LIST l)
{
ofstream outfile;
outfile.open("STUDENT.LOG");
outfile << setw(30) << left << "Name" << setw(10) << left << "Account" << setw(10) << left << "Subject" << setw(5) << left << "Score" << endl;
for(NODE *i = l.pHead; i != NULL; i = i->pNext)
{
outfile << setw(30) << left << i->sSV.name;
outfile << setw(10) << left << i->sSV.account;
outfile << setw(10) << left << i->sSV.subject;
outfile << setw(5) << left << i->sSV.score;
outfile << "
";
}
}
int main()
{
LIST l;
KhoiTaoDS(&l);
int a;
do
{
cout << "*********************************************
";
cout << "* STUDENT MANAGEMENT *
";
cout << "*********************************************
";
cout << "
1. INSERT STUDENT";
cout << "
2. DELETE STUDENT";
cout << "
3. SEARCH STUDENT BASE ON SCORE";
cout << "
4. SHOW STUDENT INFORMATION";
cout << "
5. SAVE STUDENT INFORMATION";
cout << "
6. EXIT
";
cin >> a;
switch(a)
{
case 1:
{
NhapDanhSachSinhVien(&l);
cout << "
";
break;
}
case 2:
{
char acc[10];
cout << "Ban muon xoa Account nao: ";
fflush(stdin);
gets(acc);
XoaSinhVien(&l,acc);
cout << "
";
break;
}
case 3:
{
int score;
cout << "Nhap diem ban muon tim: ";
cin >> score;
TimScore(l, score);
break;
}
case 4:
{
InDS(l);
cout << "
";
break;
}
case 5:
{
LuuFile(l);
cout << "Luu thanh cong vao file STUDENT.LOG
";
break;
}
case 6:
{
break;
}
default:
{
cout << "
Moi ban nhap lai
";
}
}
}
while(a != 6);
return 0;
}
thế nhưng phần xóa một node bị lỗi và em không biết sửa thế nào.
mọi người giúp em với
em cảm ơn
Bài liên quan
Bạn muốn được hỗ trợ gì thì nên đề cập ở topic.
sai rồi! bạn cần tìm node cần tìm rồi mới xóa nó chứ vừa tìm mà nếu node đó không phải thì thông báo là sau!