30/09/2018, 19:56
Em chưa hiểu bản chất của câu lệnh khai báo danh sách liên kết đơn
#include <stdio.h>
#include <conio.h>
struct sinhvien
{
int maduan;
char tenduan[20];
char diadiem[30];
float tongtien;
};
struct NODE
{
sinhvien info;
NODE *next;
};
struct LIST
{
NODE *dau;
NODE *cuoi;
};
NODE *GETNOT(sinhvien x)
{
NODE *p;
p=new NODE;
p->info=x;
p->next=NULL;
return p;
}
void nhap(LIST &l)
{
l.dau=l.cuoi=NULL;
}
ai giải thích cho em từng dòng cái code trên với và chú ý giải thích phần này cho em với
void nhap(LIST &l)
{
l.dau=l.cuoi=NULL;
}
THANKS các anh chị và các bạn nhiều
Bài liên quan
Bạn yêu cầu thật bá đạo @@
Phần này gọi tới l.dau,.cuối và gán giá trị NULL cho nó.
Giá trị NULL tức là gì thì hẳn bạn biết rồi đấy.
Còn phần
LIST &l
hẳn cũng phải rõ rồi nhỉtheo minh thầy đó là hàm khởi tạo danh sách chứ. bạn đặt tên “nhap” nghe nguy hiểm quá
Bạn kiếm cuốn sách cấu trúc dữ liệu và giải thuật về đọc sẽ hiểu rõ và kỹ. chứ giải thích code thì bạn không áp dụng được vào các tính huống khác đâu. tập trung học code đừng lo ra sản phẩm vội
Bạn có thể tham khảo hai cuốn này
http://www.doko.vn/tai-lieu/cau-truc-du-lieu-va-giai-thuat-1747586
http://monhoc.vn/tai-lieu/giao-trinh-cau-truc-du-lieu-va-giai-thuat-917/
sinhvien là một kiểu dữ liệu nó giống như là int, char, float ,… chỉ khác là nó đa năng hơn có thể chứa nhiều kiểu dữ liệu khác nhau giống như 1 cái box chứa bánh, kẹo,…
NODE cũng tương tự như sinhvien
TÓM LẠI:
Để hiểu link list thì bạn phải hiểu rõ cách truy cập các thành phần của biến bình thường kiểu struct, biến con trỏ kiểu struct (goolge)
Phải biết debug để xem chương trình chạy từng bước và kết quả ra như thế nào
Mình học mà người ta dạy sơ sài quá, giáo viên cứ giảng mà học sinh cứ ngồi chăm chú nghe mà k vào nổi chữ nào. Cảm ơn bạn rất nhiều !
Bạn giải thích rất dễ hiểu mình đã hiểu phần trên. bạn có thể giải thích nốt code này cho mình với được k
Thì mình k hiểu j ms nhầm lẫn kiểu đó đấy. Giờ thì mình nhìn lại thấy mình nguy hiểm kinh khủng :))
Từ đây bạn có thể suy luận ra trường hợp thêm giữa, thêm cuối, và xoá…
Có gì thắc mắc thì cứ lên đây hỏi nhe
cái l.dau như hình bạn vẽ thì nó là node đầu tiên trong danh sách liên kết à? Hay nó chỉ là con trỏ đầu tiên của 1 danh sách liên kết ???
l.dau là con trỏ trỏ vào phần tử đầu tiên của 1 dslk, ko phải là con trỏ đầu tiên của dslk. Tưởng tượng dslk (đơn) chứa n phần tử là 1 nhóm n người:
người thú 1 sẽ biết người thứ 2 là ai (người thứ 1 có con trỏ tới người thứ 2)
người thứ 2 sẽ biết người thứ 3 là ai (người thứ 2 có con trỏ tới người thứ 3)
người thứ 3 sẽ biết người thứ 4 là ai (người thứ 3 có con trỏ tới người thứ 4)
…
người thứ n-1 sẽ biết người thứ n là ai (người thứ n-1 có con trỏ tới người thứ n)
để biết tất cả mọi người trong dslk này thì bạn chỉ cần biết người thứ 1 là ai, hay cần có con trỏ tới người thứ nhất.
sao cái l.dau là 1 con trỏ lại =được NODE p ?
NODE * p
p là con trỏ tới NODE. Có dấu * kìa.
l.dau=p; //gán ngược trở lại Node của đầu danh sách là p
cái này phải là // gán ngược trở lại con trỏ đầu danh sách là p đúng k ??
mà nếu p là con trỏ thì sao lại có next ở đây hả bạn ơi ?
Vạy chứ bạn khai báo
dau
là 1 biến con trỏ trỏ tới kiểu dữ liệu NODE sao nó lại không trỏ được tớip
p->next tức là
(*p).next
, mà(*p)
chính là phần tử mà p trỏ tới.(*p).next
tức là truy cập biến next của phần tử mà p trỏ tới.nó trỏ tới
*p
chứ ko phải trỏ tớip
.p
ở đây là con trỏ rồià à đã thông rồi thanks you 2 bạn nhiều
Bạn ơi cho mình hỏi là NODE* next và NODE *next có khác j nhau không hay là 1 ?
2 cách khai báo trên là giống nhau
bạn giải thích cái phần else = hình vẽ cho mình cái mình k hiểu 2 dòng đó