30/09/2018, 16:27
Danh sách liên kết?
Em đang học danh sách liên kết, nhưng lại không tìm được tài liệu hay video nào hướng dẫn rõ ràng, ai có thì cho em cái tài liệu về nó. Bài giảng của anh Đạt em xem mấy lần nhưng càng xem càng mơ hồ ko biết gì luôn …
Nếu anh chị nào rảnh code giúp em 1 bài gì đó, rồi giải thích rõ từng dòng trên đó thì cám ơn nhiều. Không thì em có 1 code này, nhưng lại không hiểu, anh chị giải thích giúp em từ đầu đến cuối luôn nhé.
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct sv
{
char ten[20];
char MSSV[10];
int dtb;
};
struct NODE
{
sv info;
struct NODE* next;
};
struct LIST
{
NODE *head;
NODE *tail;
};
NODE* CreateNode (sv x)
{
NODE *p;
p=new NODE;
if(p==NULL) exit(1);
p->info=x;
p->next=NULL;
return p;
}
void CreateList (LIST &L)
{
L.head=L.tail=NULL;
}
void input (sv &x)
{
printf("
Nhap MSSV: "); fflush(stdin); gets(x.MSSV);
printf("
Nhap ten: "); fflush(stdin); gets(x.ten);
printf("
Nhap dtb: "); scanf("%d", &x.dtb);
}
void AddLast (LIST &L, NODE *p)
{
if(L.head==NULL) L.head=L.tail=p;
else
{
L.tail->next=p;
L.tail=p;
}
}
void nhap (LIST &L)
{
sv x;
char kt;
printf("
Nhan phim bat ki de tiep tuc nhap.");
printf("
Nhan 0 de dung nhap.");
do
{
kt=getch();
if(kt=='0') break;
input(x);
NODE *p=CreateNode(x);
AddLast(L,p);
} while (1);
}
void output (sv x)
{
printf("
%s %s %d",x.MSSV,x.ten,x.dtb);
}
void xuat (LIST L)
{
NODE *p;
p=L.head;
while(p!=NULL)
{
output(p->info);
p=p->next;
}
}
void maxdtb (LIST L)
{
NODE *p,*max;
int dem;
p=L.head;
max=p;
while (p!=NULL)
{
if(p->info.dtb>max->info.dtb) { max=p; dem=0; }
if(p->info.dtb==max->info.dtb) { max=p; dem++; }
p=p->next;
}
printf("
SV co dtb cao nhat la:
");
if(dem==0) output(max->info);
else
{
NODE *q=L.head;
while (q!=NULL)
{
if(q->info.dtb==max->info.dtb) output(q->info);
q=q->next;
}
}
}
void thongkedtb (LIST L)
{
NODE *p;
int dem=0;
p=L.head;
while (p!=NULL)
{
if(p->info.dtb>=5) dem++;
p=p->next;
}
if(dem==0) printf("
Ko co sv co dtb>=5.");
else printf("
Co %d sv co dtb >=5.",dem);
}
void tim (LIST L)
{
NODE *p;
int dem=0;
char k[20];
printf("
Nhap ten sv can tim: ");
fflush(stdin);
gets(k);
p=L.head;
while (p!=NULL)
{
if(strcmp(k,p->info.ten)==0) dem++;
p=p->next;
}
if(dem!=0)
{
printf("
Tim thay sv: "); output(p->info);
}
else printf("
Ko tim thay.");
}
void xoa (LIST &L)
{
NODE *p, *q;
char a[10];
p=L.head;
q=NULL;
printf("
Nhap MSSV can xoa: ");
fflush(stdin);
gets(a);
while (p!=NULL)
{
if(strcmp(a, p->info.MSSV)==0) break;
else printf("
Ko co sv can xoa.");
q=p;
p=p->next;
}
if(q!=NULL)
{
if(p!=NULL)
{
q->next=p->next;
delete (p);
if(p==L.tail) L.tail=q;
delete(p);
}
}
else
{
L.head=p->next;
delete(p);
if(L.head==NULL) L.tail=NULL;
}
}
void selectionsort (LIST &L)
{
NODE *p,*q,*min;
p=L.head;
sv temp;
while (p!=L.tail)
{
min=p;
q=p->next;
while (q!=NULL)
{
if(q->info.dtb<min->info.dtb) min=q;
q=q->next;
}
temp=p->info;
p->info=min->info;
min->info=temp;
p=p->next;
}
}
void menu()
{
LIST L;
NODE *p,*q,*moi;
sv x;
char chon;
CreateList(L);
do
{
printf("
MENU");
printf("
1. Nhap ds");
printf("
2. In ds");
printf("
3. Ds sv co dtb cao nhat");
printf("
4. Ds sv co dtb >=5");
printf("
5. Tim sv");
printf("
6. Xoa sv");
printf("
7. Sap xep ds");
printf("
8. Chen sv");
printf("
Nhap 0 de thoat");
chon=getch();
switch(chon)
{
case '1': { nhap(L); break;}
case '2': { xuat(L); break;}
case '3': { maxdtb(L); break;}
case '4': { thongkedtb(L); break;}
case '5': { tim(L); break;}
case '6': { xoa(L); printf("
Ds sau khi xoa: "); xuat(L); break;}
case '7': { selectionsort(L);printf("
Ds sau khi sap xep: "); xuat(L); break;}
case '8':
{
sv them;
printf("
Nhap thong tin sv can them: ");
input(them);
NODE *t= CreateNode(them);
AddLast(L,t);
selectionsort(L);
printf("
Ds sau khi them :");
xuat(L);
break;
}
case '0': exit(1);
default: printf("
Nhap lai.");
}
} while (chon!='0');
}
int main()
{
while(1)
{
menu();
getch();
}
}
Bài liên quan
Nếu e chịu khó search trên diễn đàn ở đây thì tối thiểu cũng có video của a @ltd về danh sách liên kết đó e.
Đây là danh sách các video của a @ltd . Danh sách liên kết đơn bài 44,liên kết đôi bài 53…Tuy là C++ nhưng a ngĩ sẽ giúp e hình dung dc phần nào về danh sách liên kết
Và đây nữa
À em xem video của anh Đạt rồi, xem mấy lần rồi nhưng cũng không hiểu gì hết ấy, rất khó hiểu.
Code này của ai?
Em không hiểu chỗ nào? Em cần phải xác định mình cần hiểu cái gì, hiện giờ ko hiểu cái gì thì anh mới giúp được.
Không thể
Code này của ai thì em pó tay, tại em search google thấy nên muốn xem thử ntn.
Em không hiểu ở chỗ, anh viết code rất nhiều, mà không có post cái code lên, em chẳng bik trong đó nó có cái gì, sao lại dùng tới nó, rồi sao lại có cái đó, … rất nhiều.
Nói giải thích từ đầu đến cuối thật ra không phải, giải thích chỗ nào liên quan tới danh sách liên kết thôi mà anh.
Cái bài code này em ko hiểu là không hiểu mấy cái tham số truyền vào, tham số truyền vào viết toàn 1 ký tự và nó là cái gì và có rất nhiều chỗ nữa …
Em hiểu cách nó liên kết như thế nào, nhưng lại không hiểu sao code lại như thế.
Anh không thể giải thích cái code mà thậm chí em còn không biết của ai viết được.
Anh viết nhiều nhưng em có thể pause lại và chép mà. Mục tiêu là em phải tự code chứ không phải copy + paste.
Em đã hiểu bản chất danh sách liên kết là gì chưa?
Khó hiểu chỗ nào, hỏi chỗ nấy.
Copy đoạn code em không hiểu, hỏi ngay đoạn đấy.
Em tưởng tượng
Em thấy nên hỏi như thế nào, cách 1 hay cách 2?
Em tự code mà anh, nhưng có nhiều cái anh đóng lại, em ko biết trong đó nó như thế nào là vậy đó anh.
Em sẽ tìm hiểu lại kỹ hơn rồi sẽ hỏi, vì thật sự em xem rất nhiều video về danh sách liên kết rồi, nhưng chỉ hiểu cái bản chất liên kết của nó, nhưng khi code thì rất lúng túng ko hiểu nó như thế nào. Em cũng ko biết hỏi kiểu ntn nữa.
Em gửi đoạn code em lúng túng lên anh sẽ giải thích.
Bìn tĩn phế bỏ võ công và tìm hiểu lại DSLK nào. Về cơ bản thì nó đâu có khó tới mức như những cmt trên, chắc do cát hạ bị khớp ngay từ ban đầu. Bìn tĩn lại sẽ dễ dàng tiếp cận vấn đề mới
bạn đó hiểu nhưng ko biết cách làm, em cũng thế, anh có thể làm lại video ko, làm từ cái cơ bản chỉ có kiểu node rùi từ từ mới tới cái sinhvien