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
XoakhoangsauSVV
lỗ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ứ
k
khô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