1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng cấu trúc dữ liệu thuật toán chương 3 nguyễn đức nghĩa

130 184 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 130
Dung lượng 34,37 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Trang 1

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 2

CTDL & 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 3

CTDL & 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 4

CTDL & 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 5

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)

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 6

CTDL & TT – NGUY N C NGH A – B môn KHMT – HBK Hà n i

Trang 7

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 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 8

CTDL & 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 9

CTDL & 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 10

CTDL & 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 11

CTDL & 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 12

CTDL & 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 13

CTDL & 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 14

CTDL & 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 15

CTDL & 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 16

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

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 17

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

• 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 18

CTDL&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 19

t , 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 20

CTDL & 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 21

CTDL & 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 22

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

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 23

CTDL & 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 24

CTDL & 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 25

CTDL & 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 26

CTDL & 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 27

CTDL & 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 28

CTDL & 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 29

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)

• 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 30

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 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 31

CTDL & 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 32

CTDL & 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 33

Danh sách móc n i đ n

Hàm INSERT(x,p)

65

0x2000 TempPtr

0x3050 0x3080

0x3050 0x3080

First

Pred^.Next := TempPtr;

Trang 34

CTDL & 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 35

CTDL & 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 36

CTDL & 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 37

CTDL & 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 38

CTDL & 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 39

CTDL & 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 40

CTDL & 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)

Ngày đăng: 04/12/2015, 17:48

HÌNH ẢNH LIÊN QUAN

Hình v  sau đây: - Bài giảng cấu trúc dữ liệu thuật toán  chương 3   nguyễn đức nghĩa
Hình v sau đây: (Trang 119)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm