You are on page 1of 52

Danh sch lin k t

C u trc d li u - Khoa CNTT

N i dung
Danh sch lin k t vng Danh sch lin k t kp Danh sch lin k t i vng (v a n i kp v a n i vng)

C u trc d li u - Khoa CNTT

C u trc d li u - Khoa CNTT

Circular Linked List


T ng t nh danh sch lin k t Tr ng next c a nt cu i ch n n. u danh sch

A1

A2

A3

An

Tr ng Next c a nt cu i ko cn tr NULL, m tr n nt u

C u trc d li u - Khoa CNTT

Circular Linked List


M t CLL
- S d ng pList tr n ph n t cu i c a danh sch

pList

A1

A2

A3

An

Node
C u trc d li u - Khoa CNTT

Tail Node
6

Circular Linked List


Khai bo & kh i t o
typedef struct node { DataType info; struct node * next; }NODE; typedef NODE * NodePtr; NodePtr pList; pList = NULL; pList tr nt cu i ds Kh i t o dslk

C u trc d li u - Khoa CNTT

Circular Linked List


Cc thao tc
InsertFirst InsertLast DeleteFirst DeleteLast ShowList Search

C u trc d li u - Khoa CNTT

Circular Linked List


Chn vo
pList

u pList = NULL
pList newnode new

pList

newnode

pList

newnode

C u trc d li u - Khoa CNTT

Circular Linked List


Chn vo
pList

u pList NULL
newnode new pList

newnode pList pList

newnode

C u trc d li u - Khoa CNTT

10

Circular Linked List


void InsertFirst(NodePtr &pList, int x) { NodePtr newNode; newNode = NewNode(); newNode->Info = x; if (pList == NULL){ pList = newNode; pList->next = pList } else { newNode->next = pList->next; pList->next = newNode; } }
C u trc d li u - Khoa CNTT

11

Circular Linked List


InsertLast: pList = NULL
pList pList

newnode new

pList

newnode

pList

newnode

C u trc d li u - Khoa CNTT

12

Circular Linked List


InsertLast: pList NULL
newnode new pList pList

newnode pList

pList

newnode

C u trc d li u - Khoa CNTT

13

Circular Linked List


void InsertLast(NodePtr &pList, int x) { NodePtr newNode; newNode = NewNode(); newNode->Info = x; if (pList == NULL){ pList = newNode; pList->next = pList; } else { newNode->next = pList->next; pList->next = newNode; pList = newNode; } }
C u trc d li u - Khoa CNTT

14

Circular Linked List


DeleteFirst: pList->next = pList

pList

pList

C u trc d li u - Khoa CNTT

15

Circular Linked List


DeleteFirst: pList->next pList
p pList pList

p pList

p pList

C u trc d li u - Khoa CNTT

16

Circular Linked List


void DeleteFirst(NodePtr &pList) { NodePtr p; if (pList == NULL) return; else if (pList == pList->next) { FreeNode(pList); pList = NULL; } else { p = pList->next; pList->next = p->next; FreeNode(p); } }
C u trc d li u - Khoa CNTT

17

Circular Linked List


DeleteLast: pList->next = pList

pList

pList

C u trc d li u - Khoa CNTT

18

Circular Linked List


DeleteLast: pList->next pList
pList q p pList

p pList

pList

C u trc d li u - Khoa CNTT

19

Circular Linked List


void DeleteLast(NodePtr &pList) {

}
C u trc d li u - Khoa CNTT

20

Circular Linked List


ShowList:
- Duy t t u danh sch n khi no quay l i ph n t u th d ng

C u trc d li u - Khoa CNTT

void ShowList(NodePtr pList) { NodePtr p; if (pList == NULL ) return; p = pList->next; do { ShowNode(p); p = p->next; } while (p!=pList->next); }

21

Circular Linked List


pList p 8000 5000 1000 1000

Tran 5000 Tran

Ngoc 1000 Ngoc

Thao 8000 Thao

p = pList->next; do { ShowNode(p); p = p->next; } while (p != pList->next);


C u trc d li u - Khoa CNTT

22

Circular Linked List


pList p 8000 8000 5000 1000 1000

Tran 5000 Tran

Ngoc 1000 Ngoc

Thao 8000 Thao

p = pList->next; do { ShowNode(p); p = p->next; } while (p != pList->next);


C u trc d li u - Khoa CNTT

23

Circular Linked List


pList p 8000 8000 5000 1000 1000

Tran 5000 Tran

Ngoc 1000 Ngoc

Thao 8000 Thao

p = pList->next; do { ShowNode(p); p = p->next; } while (p != pList->next);


C u trc d li u - Khoa CNTT

24

Circular Linked List


pList p 8000 8000 5000 1000 1000

Tran 5000 Tran

Ngoc 1000 Ngoc

Thao 8000 Thao

p = pList->next; do { ShowNode(p); p = p->next; } while (p != pList->next);


C u trc d li u - Khoa CNTT

Tran Tran

25

Circular Linked List


pList p 5000 8000 5000 1000 1000

Tran 5000 Tran

Ngoc 1000 Ngoc

Thao 8000 Thao

p = pList->next; do { ShowNode(p); p = p->next; } while (p != pList->next);


C u trc d li u - Khoa CNTT

Tran Tran

26

Circular Linked List


pList p 5000 8000 5000 1000 1000

Tran 5000 Tran

Ngoc 1000 Ngoc

Thao 8000 Thao

p = pList->next; do { ShowNode(p); p = p->next; } while (p != pList->next);


C u trc d li u - Khoa CNTT

Tran Tran

true
27

Circular Linked List


pList p 5000 8000 5000 1000 1000

Tran 5000 Tran

Ngoc 1000 Ngoc

Thao 8000 Thao

p = pList->next; do { ShowNode(p); p = p->next; } while (p != pList->next);


C u trc d li u - Khoa CNTT

Tran Ngoc

28

Circular Linked List


pList p 1000 8000 5000 1000 1000

Tran 5000 Tran

Ngoc 1000 Ngoc

Thao 8000 Thao

p = pList->next; do { ShowNode(p); p = p->next; } while (p != pList->next);


C u trc d li u - Khoa CNTT

Tran Ngoc

29

Circular Linked List


pList p 1000 8000 5000 1000 1000

Tran 5000 Tran

Ngoc 1000 Ngoc

Thao 8000 Thao

p = pList->next; do { ShowNode(p); p = p->next; } while (p != pList->next);


C u trc d li u - Khoa CNTT

Tran Ngoc true


30

Circular Linked List


pList p 1000 8000 5000 1000 1000

Tran 5000 Tran

Ngoc 1000 Ngoc

Thao 8000 Thao

p = pList->next; do { ShowNode(p); p = p->next; } while (p != pList->next);


C u trc d li u - Khoa CNTT

Tran Ngoc Thao

31

Circular Linked List


pList p 8000 8000 5000 1000 1000

Tran 5000 Tran

Ngoc 1000 Ngoc

Thao 8000 Thao

p = pList->next; do { ShowNode(p); p = p->next; } while (p != pList->next);


C u trc d li u - Khoa CNTT

Tran Ngoc Thao

32

Circular Linked List


pList p 8000 8000 5000 1000 1000

Tran 5000 Tran

Ngoc 1000 Ngoc

Thao 8000 Thao

p = pList->next; do { ShowNode(p); p = p->next; } while (p != pList->next);


C u trc d li u - Khoa CNTT

Tran Ngoc false Thao

33

Circular Linked List


Search:
Xu t pht t u danh sch N u tm th y tr v a ch nt Ng c l i qua ph n t ti p theo i u ki n d ng khi quay l i ph n t Khng tm th y tr v NULL

u tin

C u trc d li u - Khoa CNTT

34

Circular Linked List


NodePtr Search(NodePtr pList, int x) { NodePtr p; if (pList ==NULL) return NULL; p = pList->next; while (p->info != x && p != pList->next) p = p->next; if ( p->info == x) return p; return NULL; }

C u trc d li u - Khoa CNTT

35

Circular Linked List


N i danh sch vng pList2 vo pList 1
pList1

pList2

C u trc d li u - Khoa CNTT

36

Circular Linked List


N i danh sch vng pList2 vo pList 1
pHead pList1

pList2

C u trc d li u - Khoa CNTT

37

Circular Linked List


N i danh sch vng pList2 vo pList 1
pHead pList1

pList2

C u trc d li u - Khoa CNTT

38

Circular Linked List


N i danh sch vng pList2 vo pList 1
pHead

pList2

pList1

C u trc d li u - Khoa CNTT

39

Circular Linked List


void AddList(NodePtr &pList1, NodePtr &pList2) {

}
C u trc d li u - Khoa CNTT

40

C u trc d li u - Khoa CNTT

41

Doubly Linked List


Cho php di chuy n 2 chi u
- Lin k t nt tr c l: prev - Lin k t nt sau l: next

n nt tr

c v sau.

Nt u c prev l NULL Nt cu i c next l NULL

A1

A2

An

C u trc d li u - Khoa CNTT

42

Doubly Linked List


Khai bo
typedef struct node { DataType info; struct node * prev; struct node * next; }NODE; typedef NODE * NodePtr; NodePtr pHead; pHead = NULL;
C u trc d li u - Khoa CNTT

tr tr

n nt tr n nt sau

pHead qu n l ds kp Kh i t o dslk
43

Doubly Linked List


Cc thao tc c b n
NewNode, FreeNode, Init, IsEmpty InsertFirst: chn vo u InsertPrev: chn tr c nt p InsertNext: chn sau nt p DeleteFirst: xo nt u DeleteNode: xa nt p ShowList: duy t ds ShowReverse: duy t t cu i danh sch ClearList: xo ton b ds

C u trc d li u - Khoa CNTT

44

Doubly Linked List


InsertPrev: chn vo tr c nt p
p

newnode new p

C u trc d li u - Khoa CNTT

45

Doubly Linked List


newnode p

C u trc d li u - Khoa CNTT

46

Doubly Linked List


void InsertPrev(NodePtr &pHead, NodePtr &p, int x){ NodePtr newnode, left; if (p == NULL) return; if (p ==pHead) InsertFirst(pHead,x); else { newnode = NewNode(); newnode->info = x; left = p->prev; newnode->prev = left; left->next = newnode; newnode->next = p; p->prev = newnode; }
C u trc d li u - Khoa CNTT

47

Doubly Linked List


DeleteNode: xo nt p
p

C u trc d li u - Khoa CNTT

48

Doubly Linked List


void DeleteNode(NodePtr &pHead, NodePtr &p) { NodePtr left, right; if (p == NULL) return; if (p==pHead) DeleteFirst(pHead); else { left = p ->prev; right = p->next; left->next = right; if (right != NULL) right->prev = left; FreeNode(p); } }
C u trc d li u - Khoa CNTT

49

Doubly Linked List


Cc thao tc cn l i SV t lm!

C u trc d li u - Khoa CNTT

50

Bi t p
Xy d ng c u trc danh sch lin k t i vng
- M i nt trn danh sch c hai tr
Prev: tr Next: tr n nt tr c n nt sau

ng lin k t

- Nt cu i cng trong danh sch c tr ng next l nt u tin - Nt u tin c tr ng prev l nt cu i cng. - Cc thao tc trn danh sch:
Init, IsEmpty, NewNode, FreeNode InsertFrist, InsertLast, InsertPrev, InsertNext, InsertPos DeleteFirst, DeleteLast, DeleteNext, DeletePrev, DeletePos ShowList, ShowInvert Search, Sort. ClearList
C u trc d li u - Khoa CNTT

51

C u trc d li u - Khoa CNTT

52

You might also like