30/09/2018, 18:43
Lỗi hàm xoá Cuối trong danh sach liên kết đơn
#include<iostream>
#include<string>
using namespace std;
struct data
{
long ma;
string ten;
int thuTusv;
};
struct SinhVien
{
struct data dulieu;
struct SinhVien *pNExt = NULL;
};
typedef SinhVien SVV;
struct List
{
SVV *pHead = NULL;
SVV *pTail = NULL;
};
SVV *GetNode(data dulieunhap){
SVV*p = new SVV;
p->dulieu = dulieunhap;
p->pNExt = NULL;
return p;
}
void AddHead(List &l, SVV *p){
if (l.pHead == NULL)l.pHead = l.pTail = p;
else
{
p->pNExt = l.pHead;
l.pHead = p;
}
}
void AddTail(List &l, SVV*p){
if (l.pHead == NULL)l.pHead = l.pTail = p;
else
{
l.pTail->pNExt = p;
l.pTail = p;
}
}
void Input(List &l){
int n;
data dulieu;
cout << "
Nhap So Luong Sinh Vien : ";
cin >> n;
for (int i = 0; i < n; i++)
{
cout << "
Nhap Thong Tin Sinh Vien Thu : ";
cin >> dulieu.thuTusv;
cout << "
Nhap MA SInh Vien Thu " << i + 1 << " : ";
cin >> dulieu.ma; cin.ignore();
cout << "
Nhap Ho va Ten Sinh Vien Thu " << i + 1 << " : ";
getline(cin, dulieu.ten);
SVV*p = GetNode(dulieu);
AddHead(l, p);
}
}
void outPut(List l){
int dem = 1;
for (SVV*p = l.pHead; p != NULL; p = p->pNExt)
{
cout << "
THong Tin Sinh Vien Thu : " << p->dulieu.thuTusv;
cout << "
MA Sinh Vien Thu: " << p->dulieu.ma << endl;
cout << "
Ho va Ten Sinh Vien Thu: " << p->dulieu.ten << endl;
}
}
void xoadau(List &l){
SVV*p = l.pHead->pNExt;
delete l.pHead;
l.pHead = p;
}
void xoaCuoi(List &l)
{
SVV *qxoa, *q;
for (qxoa = l.pHead; qxoa != l.pTail; qxoa = qxoa->pNExt)
{
q = qxoa;
}
if (qxoa == l.pHead)
xoadau(l);
else
{
qxoa = l.pTail;
q->pNExt = NULL;
delete[]qxoa;
}
}
void XoaKhoangsauSVV(List &l, SVV*p){
for (SVV*g = l.pHead; g != NULL; g = g->pNExt)
{
SVV *q = new SVV;
if (g->dulieu.thuTusv == p->dulieu.thuTusv){
q = g->pNExt;
g->pNExt = q->pNExt;
delete q;
return;
}
}
}
void xoaPhantuThuk(List &l){
int k;
cout << "
Nhap Phan Tu Can Xoa Thu : ";
cin >> k;
SVV*z = l.pHead;
for (SVV*p = l.pHead->pNExt; p != NULL; p = p->pNExt)
{
if (p->dulieu.thuTusv == k){
XoaKhoangsauSVV(l, p);
p = z;
}
z = p;
}
if (l.pHead->dulieu.thuTusv == k)xoadau(l);
if (l.pTail->dulieu.thuTusv == k)xoaCuoi(l);
}
void Breakpoint(List &l){
SVV*p = new SVV;
while (p != NULL)
{
p->pNExt = l.pHead;
delete p;
p->pNExt = l.pHead->pNExt;
}
}
void main(){
List l;
Input(l);
outPut(l);
xoaPhantuThuk(l);
Breakpoint(l);
}
------------------- Lỗi ở hàm xoá cuối
Bài liên quan





Phải xét 3 th:
Hàm xoá đầu chưa xét phead==NULL mà đã truy cập phead->pnext? Khi phead=ptail thì xoá xong cũng phải gán =Null của node bị xoá
Tương tự ở hàm xoá cuối
oke,nhưng nó báo lỗi ở hàm
XoakhoangsauSVVlỗig->pNExt = q->pNExt;Mình dùng g++ (bộ gcc) để build không thấy báo lối gì cả.
Bạn dùng compiler gì? message báo lỗi là gì?
bạn có hàm xoá phần tử thứ
kkhông.Mình copy full chương trình của bạn và build không lỗi.
sao mình bị lỗi nhỉ. VD mình nhập
số sinh viên cần nhập là 2, thêm vào đầu danh sách và xoáthutusinhvien==1; thì nó bị lỗi , chẳng nhé code sai