//7.Viet ham chen 1 node sinh vien vao danh sach lien ket
//7.1.1. Chen sau
void AddTail(LIST &l, NODE *p)
{
if (l.Head == NULL)
{
l.Head = l.Tail = p;
}
else
{
p->prev = l.Tail;
l.Tail->next = p;
l.Tail = p;
}
}
//7.1.2 Chen truoc
void AddHead(LIST &l, NODE *p)
{
if (l.Head == NULL)
{
l.Head = l.Tail = p;
}
else
{
p->next = l.Head;
l.Head->prev = p;
l.Head = p;
}
}
//7.2. Ham duyet danh sach
NODE* Search(LIST l, int masv)
{
NODE *p = l.Head; //cho node p duyet mang tu node dau
while (p != NULL) //duyet cho den khi het danh sach
{
if (p->info.masv != masv) //neu masv bang vs ma sv nhap vao
{
p = p->next; //neu k tro toi node tiep theo
}
}
return p; //return p
}
//7.3. Chen vao trc q
void AddBeforeq(LIST &l, NODE *p, NODE *q)//p la node ms, q la node sau p
{
//kiem tra cac tr.hop dac biet
if (l.Head == NULL)
return;
if (l.Head == p)
AddHead(l, p);
//xac dinh node trc p
NODE *left = q->prev;
//gan node moi vao node trai left
p->prev = left;
left->next = p;
//gan node ms vao node ben phai q
p->next = q;
q->prev = p;
}
//7.4. ham chen in ra ds
void Chen1SV(LIST &l)
{
int y;
sv a;
printf("\nNhap thong tin sv moi : ");
Nhap1Sv(a);
NODE *p = GetNode(a);
printf("\nNhap ma sinh vien can tim de chen vo truoc: ");
scanf_s("%d", &y);
NODE *q = Search(l, y);
if (q != NULL)
{
AddBeforeq(l, p, q);
}
printf("\n-------Mang sau khi them---------- ");
for (NODE *k = l.Head; k != NULL; k = k->next)
{
printf("\n--------------");
Xuat1SV(k->info);
}
}
Ai giúp e với e sắp tới hạn nộp bài r. Em cảm ơn!!!








83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?