CTDL&TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
Ch ng 3
CÁC C U TRÚC D LI U C B N
((Basic Data Structures Basic Data Structures ))
CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
Trang 2CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
d ng chung cho t t c các giá tr này và
t p các phép toán (set of operations) có th th c hi n
trên t t c các giá tr
Trang 3CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i BGA
Các ki u d li u d ng s n
(Built
(Built in in data data types) types)
• Trong các ngôn ng l p trình th ng có m t s ki u
d li u nguyên thu đã đ c xây d ng s n Ví d
Ki u s nguyên (Integer numeric types)
• byte, char, short, int, long
Ki u s th c d u ph y đ ng (floating point numeric types)
• float, doubleCác ki u nguyên thu khác (Other primitive types)
10 40
324
10 94
4
10 80
Trang 4CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i BGA
Phép toán đ i v i ki u d li u nguyên thu
(Abstract Data Data Types) Types)
• Ki u d li u tr u t ng (Abstract Data Type -ADT) bao
g m:
t p các giá tr (set of values) và
t p các phép toán (set of operations) có th th c hi n v i t t c
các giá tr này
• Ph n nào c a ki u d li u (Data Type) đã b b qua trongADT ?
cách bi u di n d li u (data representation) đ c s d ng
chung cho t t c các giá tr này
• Vi c làm này có ý ngh a làm tr u t ng hoá khái ni m ki u
d li u ADT không còn ph thu c vào cài đ t, không phthu c ngôn ng l p trình
Trang 5CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
Ki u d li u tr u t ng
Ki u d li u tr u t ng
(Abstract Data Type
(Abstract Data Type ADT) ADT)
Danh sách (List) các nút chèn, xoá, tìm,
th (Graphs) đ nh, c nh duy t, đ ng đi,
CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
Ki u d li u tr u t ng
Ki u d li u tr u t ng
(( Abstract Data Type Abstract Data Type ADT) ADT)
• i u d hi u là các ki u d li u nguyên thu mà các ngôn
ng l p trình cài đ t s n c ng đ c coi là thu c vào ki u d
ho c trong các ngôn ng h ng đ i t ng, là các l p(class) bao g m c d li u (data) và các ph ng th c x lý(methods)
Chap02-10
Trang 6CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
Trang 7CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
C u trúc d li u
(Data Structures)
• M t trong nh ng cách t o nhóm đ n gi n nh t trong cácngôn ng l p trình đó là m ng (array) M ng là m t dãy
các ô có cùng ki u xác đ nh nào đó
• Ví d : Khai báo trong PASCAL (C) sau đây
khai báo bi n name g m 10 ph n t ki u c s nguyên
(integer)
• Có th truy xu t đ n ph n t c a m ng nh ch ra tên m ngcùng v i ch s c a nó
• Ta s xét k h n ki u m ng trong m c ti p theo
Chap02-13
name: array[1 10] of integer; int name[10]
CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
C u trúc d li u
(( Data Structures)
• M t ph ng pháp chung n a hay dùng đ nhóm các ô là c u trúc b n ghi (record structure).
• Ví d : Trong PASCAL/C mô t
khai báo reclist là m ng 100 ph n t , m i ô là m t b n ghi g m 2
Trang 8CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
• Tuy nhiên, các ph n t trong file ch có th truy xu t đ c
m t cách tu n t , theo th t mà chúng xu t hi n trong file
• Trái l i, m ng và b n ghi là các c u trúc tr c truy("random-access"), ngh a là th i gian đ truy xu t đ n cácthành ph n c a m ng (hay b n ghi) là không ph thu c vào
• Khi l a ch n c u trúc d li u cài đ t ADT m t v n đ c n
đ c quan tâm là th i gian th c hi n các phép toán đ i v iADT s nh th nào B i vì, các cách cài đ t khác nhau có
th d n đ n th i gian th c hi n phép toán khác nhau
• Ví d : Xét cài đ t ADT t đi n (Dictionary ADT)
• ADT t đi n bao g m:
C n l u tr t p các c p <key, value> , đ tìm ki m value theo key M i key có không quá m t value.
Các phép toán c b n:
• insert(k,v) : chèn c p (k,v) vào t đi n
• find(k): N u (k,v) có trong t đi n thì tr l i v, trái l i tr v 0;
• remove(k) : Xoá b c p (k,v) trong t đi n
Chap02-16
Trang 9CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
Cây tìm ki m (Search tree).
• B ng d i đây cho đánh giá th i gian c a vi c th c hi n các phép toán:
Chap02-17
CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
celltype *ptr
Trang 10CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
Phân lo i các c u trúc d li u
• Trong nhi u tài li u v CTDL th ng s d ng phân lo i c u trúc d li u sau đây:
C u trúc d li u c s (Base data structures).
Ví d : trong Pascal: integer, char, real, boolean, ;
trong C: int, char, float, double,
C u trúc d li u tuy n tính (Linear data structures).
Ví d : M ng (Array), Danh sách liên k t (Linked list),
Ng n x p (Stack), Hàng đ i (Queue),
C u trúc d li u phi tuy n (Nonlinear data structures).
Ví d : Cây (trees), đ th (graphs), b ng b m (hash
Trang 11CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
• i t ng (object): t p các c p <index, value> trong đó v i
m i giá tr c a index có m t giá tr t t p item Index là t p có
th t m t chi u hay nhi u chi u, ch ng h n, {0, … , n-1} đ i
v i m t chi u, {(0,0), (0,1), (0,2), (1,0), (1,1), (1,2), (2,0),(2,1), (2,2)} đ i v i 2 chi u, v.v
Trang 12CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
Ki u d li u tr u t ng m ng
Ki u d li u tr u t ng m ng (ADT Array )
• Truy xu t ph n t : Item Retrieve(A, i)
if (i index) return item t ng ng v i giá tr ch s i trong m ng A
else return error
• C t gi ph n t : Array Store(A, i, x)
if (i in index) return m ng gi ng h t m ng A ngo i tr
c p m i <i, x> đ c chèn vào
else return error
• Ta xét vi c cài đ t m ng trong các ngôn ng l p trình Ta
CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
Chap02-24
Trang 13CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i 25
M ng trong các ngôn ng l p trình
• Các ch s có th là s nguyên (C, Java) ho c là các giá tr ki u r i r c (Pascal, Ada)
CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i 26
M ng trong các ngôn ng l p trình
• Chú ý: Có ngôn ng (nh PASCAL) th c hi n ki m tra l i
v t m ng (truy xu t đ n thành ph n v i ch s khôngtrong ph m vi t c n d i đ n c n trên) và ch m d t th c
hi n ch ng trình n u x y ra l i này Nh ng nhi u ngôn
ng khác (C, C++, JAVA) l i không th c hi n đi u này.Trong tr ng h p x y ra l i v t m ng, ch ng trình có
th ti p t c ch y, c ng có th b d ng, tu thu c vào thaotác truy xu t trong tình hu ng c th N u ch ng trìnhkhông d ng thì s r t khó phát hi n l i!
Trang 14CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
Khai báo m ng m t chi u trong PASCAL/C
<tên bi n>:
array[ch _s ] of ki u_thành_ph n;
Ví d : list: array[0 4] of integer
<ki u thành ph n> <tên bi n>[size]
for (i=0; i < rows; i++)
printf("%8u%5d\n", ptr+i, *(ptr+i));
Trang 15CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
M ng hai chi u
• Khai báo m ng hai chi u trong C:
<element-type> <arrayName> [size 1][size2];
Ví d :
double table[5] [4];
Truy xu t đ n ph n t c a m ng: table[2] [4];
• Khai báo m ng hai chi u trong PASCAL:
<arrayName> : array [ch _s 1][ch _s 2] of <ki u_ph n_t >;
Ví d :
table: array[0 4] [0 5] of real;
Truy xu t đ n ph n t c a m ng: table[2] [4];
Chap03-29
CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
Phân b b nh cho m ng hai chi u
• Xét khai báo
int a [4] [3];
• Thông th ng có th coi nó nh m t b ng
Chap03-30
dòng 0 a[0,0] a[0,1] a[0,2]
a[1,0] a[1,1] a[1,2]
a[2,0] a[2,1] a[2,2]
a[3,0] a[3,1] a[3,2]
dòng 1dòng 2dòng 3
c t 0 c t 1 c t 2
Trang 16CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
Phân b b nh cho m ng hai chi u
• Trong b nh (ch có m t chi u) các hàng c a m ng hai chi u
đ c s p x p k ti p nhau theo m t trong hai cách sau:
CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
Phân b b nh cho m ng hai chi u
• H t c t này đ n c t khác: Th t s p x p này g i là th
t u tiên c t (column major order).
Ví d FORTRAN, MATLAB s d ng cách s p x p này
Trang 17CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
Phân b b nh cho m ng hai chi u
• Chú ý: N u bi t đ a ch c a ph n t đ u tiên c a m ng, ta ddàng tính đ c đ a ch c a ph n t tu ý trong m ng
• Ví d : Xét cách phân b b nh cho bi n m ng khai báo b i
a[1][0] a[1][1] a[2][0] a[2][1] a[2][2] a[3][0] a[3][1] a[3][2]
CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
Phân b b nh cho m ng hai chi u
Trang 18CTDL&TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
• Ta có th th c hi n đi u này nh vi c chuy n d ch sang ph i m t
ô t t c các ph n t đ ng sau v trí đánh d u
T t nhiên, ta ph i lo i b 30 khi th c hi n đi u này
• Vi c d ch chuy n t t c các ph n t là m t thao tác ch m (đòi h i th i gian tuy n tính đ i v i kích th c m ng)
Trang 19t , ta ph i d ch sang trái t t c các ph n t sau nó
• Phép toán xoá là phép toán ch m; vi c th c hi n th ng xuyên thao tác này là đi u không mong mu n
Trang 20CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
3.3 Danh sách
3.3.1 Danh sách tuy n tính
3.3.2 Cài đ t danh sách tuy n tính
Bi u di n d i d ng m ngDanh sách móc n i
Danh sách n i đôi3.3.3 Các ví d ng d ng
3.3.4 Phân tích s d ng linked list
v trí i.
• Ví d
Danh sách các sinh viên đ c s p th t theo tên Danh sách đi m thi s p x p theo th t gi m d n
Trang 21CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
• Chèn x vào v trí p trong danh sách L
• N u p = END(L), chèn x vào cu i danh sách
• N u L không có v trí p, k t qu là không xác đ nh
CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
Danh sách tuy n tính: Các phép toán
tr l i v trí đi ngay sau v trí p
N u p là v trí cu i cùng trong L, thì NEXT(p, L) = END(L) NEXT không xác đ nh n u p là END(L) ho c p không t n t i.
Chap03-42
Trang 22CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
Danh sách tuy n tính: Các phép toán
6 Prev (p, L)
tr l i v trí tr c p Prev là không xác đ nh n u p là 1 ho c n u L không có v trí p.
7 Makenull (L)
hàm này bi n L tr thành danh sách r ng và tr l i v trí END(L)
Danh sách n i đôi3.3.3 Các ví d ng d ng
3.3.4 Phân tích s d ng linked list
3.3.5 M t s bi n th c a danh sách móc n i
Chap03-44
Trang 23CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
3.3.2 Các cách cài đ t danh sách tuy n tính(Implementations of Linear List)
• Dùng m ng (Array-based)
C t gi các ph n t c a danh sách vào các ô liên ti p c a m ng
• Danh sách liên k t (Linked list / Pointer-based)
Các ph n t c a danh sách có th c t gi các ch tu ý trong b
nh
M i ph n t có con tr (ho c móc n i - link) đ n ph n t ti p theo
• a ch không tr c ti p (Indirect addressing)
Các ph n t c a danh sách có th c t gi các ch tu ý trong b nh
T o b ng trong đó ph n t th i c a b ng cho bi t n i l u tr ph n t
th i c a danh sách
• Mô ph ng con tr (Simulated pointer)
T ng t nh bi u di n liên k t nh ng các s nguyên đ c thay b i con tr c a C++
CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
3.3.4 Phân tích s d ng linked list
3.3.5 M t s bi n th c a danh sách móc n i
Chap03-46
Trang 24CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
3.3.2.1 Bi u di n d i d ng m ng
3.3.2.1 Bi u di n d i d ng m ng
(Array
(Array based based Representation of Linear Representation of Linear List) List)
• Ta c t gi các ph n t c a danh sách tuy n tính vào các ô (liên
ti p) c a m ng (array).
• Danh sách s là c u trúc g m hai thành ph n.
Thành ph n 1 : là m ng các ph n t Thành ph n 2 : last - cho bi t v trí c a ph n t cu i cùng
trong danh sách
• V trí có ki u nguyên (integer) và ch y trong kho ng t 0 đ n
maxlength-1 Hàm END(L) tr l i giá tr last+1.
CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
typedef int elementtype; /* elements are integers */
typedef struct list_tag {
elementtype elements [maxlength];
Trang 25CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
Cài đ t Insert
Insert (x, p,L): Chèn x vào v trí p trong danh sách
void insert (elementtype x , int p , list_type * lp)
{ int v; // running position
Chap03-49
CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
Cài đ t DELETE
Delete (p, L): lo i ph n t v trí p trong danh sách L
void deleteL(int p , list_type * lp)
{
int q; /* running position */
if ((p > lp-> last) || (p < 0)) { printf("\n%s ","position does not exist");
return;
} else /* shift elements */ {
lp -> last ;
for (int q = p; q <= lp ->last; q++)
lp -> elements [q] = lp -> elements [q+1];
} }
Chap03-50
Trang 26CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
Cài đ t LOCATE
Locate (x, L): tr l i v trí c a x trong danh sách L
int locate (elementtype x , list_type * lp)
{
int q;
for (q = 0; q <= lp ->last; q++)
if (lp -> elements [q] == x) return (q);
return (lp -> last + 1); /* if not found */ }
3.3.4 Phân tích s d ng linked list
3.3.5 M t s bi n th c a danh sách móc n i
Chap03-52
Trang 27CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
Phân tích cách bi u di n d i d ng m ng
Phân tích cách bi u di n d i d ng m ng
(Array
(Array based based Representation of Linear Representation of Linear List) List)
• Có th nh n th y m t s u - khuy t đi m sau đây c a cách
ph n t kh i danh sách đ c th c hi n ch m (v i th i gian tuy n tính đ i v i kích th c danh sách)
CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
L u tr móc n i đ i v i danh sách tuy n tính
(( Linked List)
• L u tr k ti p có nh ng nh c đi m c b n đã đ c phântích trên: đó là vi c b sung và lo i tr ph n t là r t t nkémth i gian, ngoài ra ph i k đ n vi c s d ng m t khônggian liên t c trong b nh Vi c t ch c con tr (ho c móc
n i) đ t ch c danh sách tuy n tính - mà ta g i là danhsách móc n i là gi i pháp kh c ph c nh c đi m này, tuynhiên cái giá mà taph i tr là b nh dành cho con tr
• Ta s xét các cách t ch c danh sách móc n i sau đây:
Danh sách n i đ n (Singly linked list) Danh sách n i vòng (Circulary linked list) Danh sách n i đôi (Doubly Linked List)
Chap03-54
Trang 28CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
Khi nào dùng danh sách móc n i
• Khi không bi t kích th c c a d li u - hãy dùng
pointers & dynamic storage).
• Khi không bi t ki u d li u - hãy dùng con tr
void (Unknown data type – use void pointers).
sách móc n i (Unknown number of data – linked
structure).
Chap03-55
CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
Danh sách móc n i đ n
(Singly linked list)
• Trong cách bi u di n này, danh sách bao g m các ô (các nút node) , m i ô ch a m t ph n t c a danh sách và con tr đ n ô
không có ô nào khác.
• Các ô có th n m v trí b t k trong b nh
Chap03-56
Element Link/Pointer
Trang 29CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
Danh sách móc n i đ n
(Singly linked list)
• Danh sách móc n i đ c t ch c nh trong hình v sau:
• M i n i ch ra đ a ch b nh c a nút ti p theo trong danh sách
list
CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
Danh sách móc n i đ n
(Singly linked list)
• Mô t danh sách n i đ n trong PASCAL:
LIST = PointerType; { ki u LIST đ mô t danh sách }
• Khai báo trên đ nh ngh a ki u PointerType tr t i Node, trong đó Node là ki u b n ghi mô t m t nút g m hai tr ng:
Inf - l u d li u có ki u là DataType đã đ c đ nh ngh a, có th g m nhi u thành ph n
Next thu c ki u PointerType, l u đ a ch c a nút k ti p
• C n có bi n First thu c ki u PointerType l u đ a ch c a nút đ u tiên trong danh sách:
Var First: PointerType;
Chap03-58
Trang 30CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
Danh sách móc n i đ n
(( Singly linked list)
• Mô t danh sách n i đ n trong C:
typedef <Ki u d li u ph n t > ElementType;
struct NodeType{
ElementType Inf;
NodeType *Next; };
typedef struct NodeType LIST;
• Khai báo trên đ nh ngh a ki u NodeType, trong đó NodeType là
ki u b n ghi mô t m t nút g m hai tr ng:
Inf - l u d li u có ki u là ElementType (đã đ c đ nh ngh a, có
th g m nhi u thành ph n) Next thu c ki u NodeType, l u đ a ch c a nút k ti p
• C n có bi n con tr First l u đ a ch c a nút đ u tiên trong danh sách:
Hàm này làm vi c không hi u qu vì nó ph i duy t qua toàn b danh sách
N u nh th ng xuyên ph i dùng đ n hàm này ng i ta th ng t o thêm
m t con tr đ tr đ n v trí cu i cùng c a danh sách.
Chap03-60
Trang 31CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
Vi c chèn m t nút không nh h ng đ n m i liên k t c a các nút đ ng sau
v trí chèn, do đó không ph i th c hi n d n ph n t nh trong cài đ t
m ng.
Chap03-62
(1) TempPtr
Trang 32CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
Danh sách móc n i đ n
Hàm INSERT(x,p): Cài đ t trên C
NodeType *Insert_Middle(NodeType *Pred, ElementType X)
{ Chèn m t nút m i v i thông tin X vào sau nút đ c tr b i Pred }
{ NodeType *TempNode;
TempNode = (NodeType *) malloc(sizeof(NodeType)); //(1) TempNode->Inf=X; //(1) TempNode->Next=Pred->Next; //(2) Pred->Next=TempNode; //(3) return TempNode;
0x3050 0x3080
Pred 0x3080
First
New(TempPtr); { xin c p phát nút m i } TempPtr^.Inf := x; { ghi nh n d li u }
Trang 33Danh sách móc n i đ n
Hàm INSERT(x,p)
65
0x2000 TempPtr
0x3050 0x3080
0x3050 0x3080
First
Pred^.Next := TempPtr;
Trang 34CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
• S d ng con tr TempPtr đ ghi nh n nút c n xóa, thao tác
xoáđ c ti n hành theo các b c sau:
Trang 35CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
Danh sách móc n i đ n
Hàm DELETE(p): Cài đ t trên C
ElementType Delete(NodeType *Pred)
{ Xoá nút sau nút đ c tr b i Pred và tr l i giá tr nút b xoá }
{ ElementType X; NodeType *TempNode;
TempNode=Pred->Next; //(1)
Pred->Next=Pred->Next->Next; //(2)
X=TempNode->Inf;
free(TempNode); //(3) return X;
Trang 36CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
Chèn vào đ u danh sách
Procedure ChenVaoDau(Var First : LIST; X : DataType);
{ Chèn m t nút vào đ u danh sách đ c tr b i First }
Var TempPtr : PointerType;
Procedure ChenVaoCuoi(Var First : LIST; X : DataType);
{ Chèn m t nút vào cu i danh sách đ c tr b i First Gi s danh sách khác r ng } Var TempPtr, prev, cur : PointerType;
Begin
New(TempPtr); TempPtr^.Inf := X; (* T o nút m i ch a X *)
prev := nil; {kh i t o con tr prev và cur.}
Trang 37CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
Xoá ph n t đ u danh sách
Procedure XoaDau(Var First : LIST; Var X : DataType);
{ Xoá nút đ u danh sách đ c tr b i First }
Var TempPtr : PointerType;
procedure DeleteLast (First: LIST; X: DataType);
(* Xoá nút cu i c a danh sách Gi s danh sách khác r ng *)
var cur, prev: PointerType;
begin
cur := First; {kh i t o con tr prev và cur.}
prev := nil;
while (cur^.next <> nil) do {l p đ n khi cur ch đ n nút cu i danh sách}
begin prev :=cur; cur := prev^.next; end;
X:= cur^.Inf; { tr l i X nút cu i }
prev^.next := nil; { đ t set the LINK portion of the node pointed by prev}
dispose(cur); { thu h i vùng nh c p cho nút cu i }
end;
Chap03-74
First
Trang 38CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
while ( cur^.Inf <> e) and (cur^.next <> nil) do
begin prev := cur;
{ a ra toàn b thông tin các nút }
Procedure PrintLIST(First : LIST);
End;
End;
Chap03-76
Trang 39CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
Cài đ t trên C
Chap03-77
CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
Chèn vào đ u danh sách
//Chèn m t nút vào đ u danh sách đ c tr b i First
NodeType *Insert_ToHead(NodeType *First, ElementType X) { NodeType *TempNode;
TempNode = (NodeType *) malloc(sizeof(NodeType));
Trang 40CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i
Chèn vào cu i danh sách
//Chèn m t nút vào cu i danh sách đ c tr b i head Gi s danh sách khác r ng
NodeType *Insert_ToLast(NodeType *head, ElementType X) { NodeType *NewNode; NodeType *TempNode;
NewNode = (NodeType *) malloc(sizeof(NodeType));
// Xoá nút đ u danh sách đ c tr b i First
NodeType *Delete_Head(NodeType *First)