CHƯƠNG VIII
DANH SÁCH MÓC N I
Ta thương s d ng m ng c u trúc đ x lý
v i nhóm d li u. Đây là m t cách ti p c n ế đúng
khi ta bi t trế ư c chính xác s các c u trúc c n có.
Tuy nhiên, khi con s này không rõ ràng, mãng s
tr nên khá t n kém vì chúng ph i đưc c p phát
đ b nh đ ho t đng. B nh này đưc đăng ký
và s không dành cho nh ng tác v khác ngay c
khi ta ch dùng m t sô nh các ph n t m ng.
Phương hưng gi i quy t cho v n ế đ này là
cho phép c p phát b nh cho m t c u trúc m i khi
c n thi t. ế
C cho phép ta th c hi n đi u này thông qua cáhc
c p phát b nh đng b ng:
malloc() và calloc()
Nhưng các c u trúc n u ế đưc c p pháp xong s
không có đm báo nào r ng các c u trúc s đưc
đt liên ti p nhau trong b nh . Do ế đó đi u c n
thi t là k thu t ế đ n i k t t t c các c u trúc l i ế
v i nhau.
Phương cách thông d ng đ k t n i các ph n t ế
đó l i là dùng danh sách liên k t (Linked list) ế
I. Danh sách liên k t ếđơn:
1. Đnh nghĩa
Cú pháp:
struct <Tên_ki u_c u_trúc>
{
<Ki u c a ph n t > <Ph n t >;
struct <Tên_ki u_c u_trúc> *<Tên
pointer tr đn ph n c u trúc ti p theo trong ế ế
Danh sách>
}
Ví d : Đnh nghĩa m t danh sách liên k t ế đ
ch a các s nguyên.
struct Point
{
int info;
struct Point *Next;
};
2. Các phép toán trên danh sách liên k tế
a. C p phát bô nh cho bi n con tr m i ế
Cú pháp:
Point_New = (struct Point_Name *) malloc
(sizeof(struct Point_Name)
Ví d :
typedef struct Point POINT;
POINT Head, Last, p;
CreatNode()
{
p=(POINT *) malloc (POINT)
if (Head==(POINT* ) NULL)
Head=Last=p;
else
{
Last=Head;