You are on page 1of 91

CC KIU D LIU TRU TNG C BN CU TRC D LIU TUYN TNH

Thanh Ngh
dtnghi@cit.ctu.edu.vn

NI DUNG
DANH SCH NGN XP HNG I

DANH SCH
KHI NIM V DANH SCH CC PHP TON CI T

DNG MNG (DS C) DNG CON TR (DS LIN KT)

KHI NIM V DANH SCH


L tp hp hu hn cc phn t c cng kiu Kiu chung c gi l kiu phn t (element type) Ta thng biu din dng: a1, a2, a3, ..., an Nu
n=0: danh sch rng n>0: phn t u tin l a1, phn t cui cng l an

di ca danh sch: s phn t ca danh sch Cc phn t trong danh sch c th t tuyn tnh theo v tr xut hin. Ta ni ai ng trc ai+1 (i=1..n-1)
4

CC PHP TON (1)


Tn php ton ENDLIST(L) MAKENULL_LIST(L) EMPTY_LIST(L) FULL_LIST(L) INSERT_LIST(X,P,L) DELETE_LIST(P,L) LOCATE_LIST(X,L) Cng dng Tr v v tr sau phn t cui trong ds L

Khi to mt danh sch L rng


Kim tra xem danh sch L c rng hay khng Kim tra xem danh sch L c y hay khng Xen phn t c ni dung X vo danh sch L ti v tr P Xa phn t ti v tr P trong danh sch L Tr v kt qu l v tr ca phn t c ni dung X trong danh sch L Nu khng tm thy: tr v ENDLIST(L)

CC PHP TON (2)


RETRIEVE(P,L) Tr v ni dung phn t th P trong danh sch L Tr v phn t ng sau phn t th P trong danh sch L Tr v phn t ng trc phn t th P trong danh sch L Tr v kt qu l v tr ca phn t u danh sch, ENDLIST(L) nu danh sch rng Hin th cc phn t trong danh sch L theo th t xut hin NEXT(P,L)

PREVIOUS(P,L)

FIRST(L)

PRINT_LIST(L)

CI T DANH SCH BNG MNG (DS C)


Dng 1 mng lu tr lin tip cc phn t, bt u t v tr u tin Ta phi c lng s phn t ti a ca danh sch Ta phi lu tr di hin ti ca danh sch (Last)

M HNH
1
2

V tr

Ta nh ngha v tr ca mt phn t trong danh sch l ch s ca mng ti v tr lu tr phn t + 1


8

KHAI BO
#define MaxLength // di ti a ds typedef ... ElementType; //kiu ca pht typedef int Position; //kiu v tr typedef struct { //mng cha cc phn t ca danh sch ElementType Elements[MaxLength]; Position Last; //gi di danh sch } List; List L;

KHI TO DANH SCH RNG

Cho di danh sch bng 0


void MakeNull_List(List *L) { L->Last=0; } 10

KIM TRA DANH SCH RNG


Xem di danh sch c bng 0 khng?
int Empty_List(List L) { return L.Last==0; }

11

XEN PHN T X VO V TR P (1) Xen phn t x=k vo v tr p=3 trong danh sch L (ch s 2 trong mng)

12

XEN PHN T X VO V TR P (2) Tm li, chn x vo v tr p ca L, ta lm nh sau:

Nu mng y th thng bo li Ngc li, nu v tr p khng hp l th bo li Ngc li:


Di cc phn t t v tr p n cui danh sch ra sau mt v tr a phn t mi x vo ti v tr p di danh sch tng 1

13

XEN PHN T X VO V TR P (3)


void Insert_List(ElementType X,Position P, List *L) { if (L->Last==MaxLength) printf("Danh sach day"); else if ((P<1) || (P>L->Last+1)) printf("Vi tri khong hop le"); else { Position Q; /*Di cc pht t v tr p n cui dsch ra sau 1 v tr*/ for(Q=(L->Last-1)+1;Q>P;Q--) L->Elements[Q]=L->Elements[Q-1]; //a x vo v tr p L->Elements[P-1]=X; //Tng di danh sch ln 1 L->Last++; } }

14

XA MT PHN T TI V TR P TRONG DS (1) V d: Xa phn t v tr p=4 ca L

15

XA MT PHN T TI V TR P TRONG DS (2) Nu p l mt v tr khng hp l th thng bo li Ngc li:

Di di cc phn t t v tr p+1 n cui danh sch ra trc mt v tr di ca danh sch gim 1

16

XA MT PHN T TI V TR P TRONG DS (3)


void Delete_List(Position P,List *L) { if ((P<1) || (P>L->Last)) printf("Vi tri khong hop le"); else if (EmptyList(*L)) printf("Danh sach rong!"); else { Position Q; /*Di cc pht t v tr p+1 n cui danh sch ra trc 1 v tr*/ for(Q=P-1;Q<L->Last-1;Q++) L->Elements[Q]=L->Elements[Q+1]; L->Last--; } }

17

TM KIM PHN T X TRONG DS(1)

tm phn t x trong danh sch ta tin hnh tm t u danh sch cho n khi tm gp Nu gp th v tr ca phn t u tin tm thy c tr v Nu khng tm gp th tr v v tr Last+1(EndList)
18

TM KIM PHN T X TRONG DS(1) Position Locate(ElementType X, List L) { Position P; int Found = 0; P = First(L); //v tr phn t u tin /*trong khi cha tm thy v cha kt thc danh sch th xt phn t k tip*/ while ((P != EndList(L)) && (Found == 0)) if (Retrieve(P,L) == X) Found = 1; else P = Next(P, L); return P; } 19

NH GI GII THUT TM KIM


Thi gian tm kim

nhanh nht (tt nht) l khi no, x u? xu nht khi no?


phc tp ca gii thut thng c xc nh l trong trng hp xu nht O(n)

20

CC PHP TON KHC (1)


Xc nh v tr sau phn t cui trong danh sch
Position EndList(List L) { return L.Last+1; }

Xc nh v tr u tin trong danh sch


Position First(List L) { return 1; }

21

CC PHP TON KHC (2)


c ni dung phn t ti v tr P trong dsch
ElementType Retrieve(Position P, List L) { return L.Elements[P-1]; }

Xc nh v tr k tip trong danh sch


Position Next(Position P, List L) { return P+1; }

22

BI TP
Vn dng cc php ton trn danh sch c vit chng trnh nhp vo mt danh sch cc s nguyn v hin th danh sch va nhp ra mn hnh. Thm phn t c ni dung x vo danh sch ti v tr p (trong x v p c nhp t bn phm). Xa phn t u tin c ni dung x (nhp t bn phm) ra khi danh sch.

23

NHP DANH SCH T BN PHM


void ReadList(List *L) { int i,N; ElementType X; MakeNullList(L); printf("So phan tu danh sach N= ");scanf("%d",&N); for(i=1; i<=N; i++) { printf("Phan tu thu %d: ",i);scanf("%d",&X); InsertList(X, EndList(*L), L); } }

24

HIN TH DANH SCH RA MN HNH


void PrintList(List L) { Position P; P = First(L); while (P != EndList(L)) { printf("%d ",Retrieve(P,L)); P = Next(P, L); } printf("\n"); }

25

CI T DANH SCH BNG CON TR


M hnh

Ni kt cc phn t lin tip nhau bng con tr


Phn t ai tr ti phn t ai+1 Phn t an tr ti phn t c bit NULL Phn t header tr ti phn t u tin a1

Khai bo
typedef ... ElementType; //kiu ca phn t trong danh sch typedef struct Node* NodeType; struct Node { ElementType Element; NodeType Next; }; typedef NodeType Position; typedef Position List; //Cha ni dung ca phn t //con tr ch n phn t k tip //Kiu v tr

26

KHI TO DANH SCH RNG

=>Cp pht vng nh cho Header v cho trng Next ca Header tr n NULL
void MakeNull_List(List *Header) { (*Header)=(NodeType)malloc(sizeof(struct Node)); (*Header)->Next= NULL;
}

27

KIM TRA DANH SCH RNG


Xem trng Next ca Header c tr n NULL hay khng?
int Empty_List(List L) { return (L->Next==NULL);
}

28

XEN MT PHN T VO DANH SCH

xen phn t x vo v tr p ca L, ta lm nh sau:


Cp pht 1 mi lu tr phn t x Ni kt li cc con tr a mi ny vo v tr p

void Insert_List(ElementType X, Position P, List *L) { Position T; T=(NodeType)malloc(sizeof(struct Node)); T->Element=X; T->Next=P->Next; P->Next=T; }

29

XA MT PHN T KHI DANH SCH

=>Mun xa phn t v tr p trong danh sch ta cn ni kt li cc con tr bng cch cho p tr ti phn t ng sau phn t th p void Delete_List(Position P, List *L) { Position Temp; if (P->Next!=NULL) {
/*gi cha phn t b xo thu hi vng nh*/

Temp=P->Next;
/*ni kt con tr tr ti phn t ke tiep*/

P->Next=Temp->Next; free(Temp); //thu hi vng nh } }

30

TM KIM MT PHN T TRONG DANH SCH tm phn t x trong danh sch ta tm t u danh sch:
Nu tm gp th v tr phn t u tin bng x c tr v (p) v ta c p->next->element = x Nu khng gp th v tr ENDLIST c tr v Position Locate(ElementType X, List L) { Position P; int Found = 0; P = L; while ((P->Next != NULL) && (Found == 0)) if (P->Next->Element == X) Found = 1; else P = P->Next; return P; }

31

C NI DUNG PHN T
ElementType Retrieve(Position P, List L) { if (P->Next!=NULL) return P->Next->Element; }

32

XC NH V TR PHN T
V tr phn t u tin
Position First(List L) { return L; }

V tr phn t cui cng


Position EndList(List L) { Position P; P=First(L); while (P->Next!=NULL) P=P->Next; return P; }

V tr phn t k tip
Position Next(Position P, List L) { return P->Next; }

33

IN DANH SCH RA MN HNH


void PrintList(List L) { Position P; P = First(L); while (P != EndList(L)) { ElementType data; data = Retrieve(P,L); printf("....", data...); P = Next(P, L); } printf("\n"); }

34

BI TP
Vn dng cc php ton trn danh sch lin kt vit chng trnh:

Nhp vo mt danh sch cc s nguyn Hin th danh sch va nhp ra mn hnh Thm phn t c ni dung x vo danh sch ti v tr p (trong x v p c nhp t bn phm) Xa phn t u tin c ni dung x (nhp t bn phm) ra khi danh sch

35

SO SNH 2 PHNG PHP CI T DS


Bn hy phn tch u v khuyt im ca

Danh sch c Danh sch lin kt


Bn nn chn pp ci t no cho ng dng ca mnh?

36

CI T DANH SCH BNG CON TR GI


Mt s ngn ng lp trnh khng h tr kiu con tr Ci t danh sch lin kt bng con tr gi tng l dng mng lu tr, cc con tr gi l cc ch s mng ca phn t tip theo trong danh sch Khai bo #define MaxLength ... //Chieu dai mang #define Null -1 //Gia tri Null typedef ... ElementType; //kiu ca cc phn t trong ds typedef struct { ElementType Elements; //trng cha phn t trong ds int Next; //con tr gi n phn t k tip } Node; Node Space[MaxLength]; //Mang toan cuc int Available; 37

CI T DANH SCH BNG CON TR GI


Khi to cu trc Thit lp available ban u
void Initialize() { int i; for(i=0; i<MaxLength-1; i++) Space[i].Next=i+1; Space[MaxLength-1].Next=Null; Available=0; }

38

CI T DANH SCH BNG CON TR GI


Thm mt phn t vo danh sch L ti v tr p no ta phi chuyn mt t Available (tc l mt trng) vo L ti v tr p; Xo mt phn t ti v tr p no trong danh sch L, ta chuyn cha phn t sang Available, thao tc ny xem nh l gii phng b nh b chim bi phn t ny. Chuyn 1 t con tr p ny sang danh sch c tr bi q
int Move(int *p, int *q) { int temp; if (*p==Null) return 0; //Khong co o de chuyen else { temp=*q; *q=*p; *p=Space[*q].Next; Space[*q].Next=temp; return 1; //Chuyen thanh cong } }

39

CI T DANH SCH BNG CON TR GI


Thm phn t vo v tr p ca danh sch L, ta chuyn u ca available vo v tr ny. Ch rng v tr ca phn t u tin trong danh sch c nh ngha l -1, do nu p=-1 c ngha l thc hin vic thm vo u danh sch.
void Insert_List(ElementType X, int P, int *L) { if (P==-1) { //Xen dau danh sach if (Move(&Available, L)) Space[*L].Elements=X; else printf("Loi! Khong con bo nho trong"); } else { //Chuyen mot o tu Available vao vi tri P
if (Move(&Available,&Space[P].Next)) // O nhan X la o tro boi Space[p].Next Space[Space[P].Next].Elements=X; else printf("Loi! Khong con vung nho trong");

} }

40

CI T DANH SCH BNG CON TR GI


Xa phn t ngay v tr p ra khi danh sch L, chuyn cha phn t ti v tr ny vo u Available. Tng t nh php thm vo, nu p=-1 th xo phn t u danh sch

void Delete_List(int p, int *L) { if (p==-1) {//Neu la o dau tien if (!Move(L,&Available)) printf("Loi trong khi xoa"); } else if (!Move(&Space[p].Next,&Available)) printf("Loi trong khi xoa"); }

41

NGN XP (STACK)
NH NGHA CC PHP TON CI T

CI T BNG DANH SCH LIN KT CI T BNG MNG

42

NH NGHA
L mt dng danh sch c bit m vic thm vo hay xa phn t ch thc hin ti mt u gi l nh ca ngn xp Cch lm vic theo dng FILO(First In Last Out) hay LIFO (Last In First Out)

43

CC PHP TON
Php ton
MAKENULL(S) EMPTY(S) FULL(S) PUSH(X,S) POP(S) TOP(S)

Din gii
To mt ngn xp rng (S) Kim tra xem ngn xp S c rng hay khng Kim tra xem ngn xp S c y hay khng Thm phn t X vo nh ngn xp S. Tng ng: INSERT(X,FIRST(S),S) Xa phn t ti nh ngn xp S. Tng ng: DELETE(FIRST(S),S) Tr v phn t trn nh ngn xp S, tng ng: RETRIEVE(FIRST(S),S)

44

CI T NGN XP BNG DSLK

Khai bo
typedef List Stack;

To ngn xp rng
void MakeNull_Stack(Stack *S) { MakeNull_List(S);}

Kim tra ngn xp rng


int Empty_Stack(Stack S) { return Empty_List(S);}

Thm phn t vo ngn xp


void Push(Elementtype X, Stack *S) { Insert_List (x, First (*S), &S);}

Xa phn t ra khi ngn xp


void Pop (Stack *S) { Delete_List (First (*S), &S);}

45

CI T NGN XP BNG DSLK

Khai bo
typedef List Stack;

To ngn xp rng
void MakeNull_Stack(Stack *S) { MakeNull_List(S);}

Kim tra ngn xp rng


int Empty_Stack(Stack S) { return Empty_List(S);}

Thm phn t vo ngn xp


void Push(Elementtype X, Stack *S) { Insert_List (x, First (*S), &S);}

Xa phn t ra khi ngn xp


void Pop (Stack *S) { Delete_List (First (*S), &S);}

46

CI T NGN XP BNG MNG (1)

Khai bo
#define MaxLength // di ca mng typedef ElementType;//kiu phn t ca ngn xp typedef struct { //Lu ni dung ca cc phn t ElementType Elements[MaxLength]; int Top_idx; //gi v tr nh ngn xp } Stack; Stack S;

47

KHI TO NGN XP RNG

Khi ngn xp S rng ta cho nh ngn xp c khi to bng Maxlength


void MakeNull_Stack(Stack *S) S->Top_idx=MaxLength; } 48 {

KIM TRA NGN XP RNG?


Ta kim tra xem nh ngn xp c bng MaxLength khng?
int Empty_Stack(Stack S) { return S.Top_idx==MaxLength; }

49

KIM TRA NGN XP Y?

Ta kim tra xem Top_idx c ch vo 0 hay khng?


int Full_Stack(Stack S) { return S.Top_idx==0; }

50

TR V PHN T U NGN XP

Gii thut :
Nu ngn xp rng th thng bo li Ngc li, tr v gi tr c lu tr ti c ch s l Top_idx ElementType Top(Stack S) { if (!Empty_Stack(S)) return S.Elements[S.Top_idx]; else printf("Loi! Ngan xep rong");
}

51

XA PHN T TI NH NGN XP

Gii thut :
Nu ngn xp rng th thng bo li Ngc li, tng Top_idx ln 1 n v
void Pop(Stack *S) { if (!Empty_Stack(*S)) S->Top_idx=S->Top_idx+1; else printf("Loi! Ngan xep rong!"); }

52

THM PHN T X VO NGN XP

Gii thut :
Nu ngn xp y th thng bo li Ngc li, gim Top_idx xung 1 n v ri a gi tr x vo c ch s Top_idx
void Push(ElementType X, Stack *S) { if (Full_Stack(*S)) printf("Loi! Ngan xep day!"); else{ S->Top_idx=S->Top_idx-1; S->Elements[S->Top_idx]=X; }

53

BI TP

Vit chng trnh nhp vo 1 s nguyn n Chuyn s nguyn n sang s nh phn (c s dng cc php ton trn ngn xp)

54

HNG I (QUEUE) NH NGHA CC PHP TON CI T HNG I

DNG MNG DI CHUYN TNH TIN DNG MNG VNG DNG DSLK

55

NH NGHA HNG I L mt dng danh sch c bit, m php thm vo ch thc hin 1 u, gi l cui hng(REAR), cn php loi b th thc hin u kia ca danh sch, gi l u hng(FRONT) Cch lm vic theo dng FIFO (First In First Out)

56

CC PHP TON
Php ton
MAKENULL_QUEUE(Q) EMPTY_QUEUE(Q) FULL_QUEUE(Q) ENQUEUE(X,Q) DEQUEUE(Q) FRONT(Q)

Din gii
To mt hng i rng (Q) Kim tra xem hng i Q c rng khng

Kim tra xem hng i Q c y khng


Thm phn t X vo cui hng i Q

Xa phn t ti u hng i Q Tr v phn t u tin ca hng i Q

57

CI T HNG BNG MNG DI CHUYN TNH TIN M hnh

58

KHAI BO
#define . . . MaxLength //chiu di ti a typedef ... ElementType; //Kiu d liu pht typedef struct { ElementType Elements[MaxLength]; //ni dung int Front, Rear; //ch s u v cui hng } Queue; Queue Q;

pht

59

KHI TO HNG Q RNG


Front v Rear khng tr n v tr hp l no Ta cho front=rear=-1 void MakeNull_Queue(Queue *Q) { Q->Front=-1; Q->Rear=-1;
}

60

KIM TRA HNG RNG

Hng rng khi front=-1


int Empty_Queue(Queue Q) { return (Q.Front ==-1); }

61

KIM TRA HNG Y

Hng y khi s phn t hin c trong hng=Maxlength


int Full_Queue(Queue Q) { return ((Q.Rear-Q.Front+1)==MaxLength); }

62

TR V PHN T U HNG

Kt qu ca php ton trn l x


=>Gii thut:
Nu hng Q rng th thng bo li Ngc li, tr v gi tr c lu tr ti c ch s l Front ElementType Front(Queue Q) { if Empty_Queue(Q) printf (Hang rong); else return Q.Elements[Q.Front]; }

63

XA MT PHN T KHI HNG(1)

=>Gii thut:
Nu hng Q rng th thng bo li Ngc li, tng Front ln 1 n v
- Nu Front>Rear tc hng ch cn 1 phn t th khi to li hng rng lun

64

XA MT PHN T KHI HNG(2)

void DeQueue(Queue *Q) { if (!Empty_Queue(*Q)) { Q->Front=Q->Front+1; if (Q->Front>Q->Rear) MakeNull_Queue(Q); } else printf("Loi: Hang rong!"); }

65

THM MT PHN T VO HNG(1)

Trng hp bnh thng

66

THM MT PHN T VO HNG(2)

Trng hp hng b trn

67

THM MT PHN T VO HNG(3)

=>Gii thut:

Nu hng y th thng bo li Ngc li, nu hng trn th phi tnh tin tt c phn t ln Front-1 v tr Tng Rear 1 n v v a gi tr x vo c ch s Rear mi ny

68

THM MT PHN T VO HNG(4)


void EnQueue(ElementType X,Queue *Q) { if (!Full_Queue(*Q)) { if (Empty_Queue(*Q)) Q->Front=0; if (Q->Rear==MaxLength-1) { int i; //Di chuyen tinh tien ra truoc Front -1 vi tri for(i=Q->Front; i<=Q->Rear; i++) Q->Elements[i-Q->Front]=Q->Elements[i]; //Xac dinh vi tri Rear moi Q->Rear=MaxLength - Q->Front-1; Q->Front=0; } //Tang Rear de luu noi dung moi Q->Rear=Q->Rear+1; Q->Element[Q->Rear]=X; } else printf("Loi: Hang day!"); }

69

CI T HNG BNG MNG VNG

M hnh

Khai bo
#define MaxLength ... //chiu di ti a ca mng typedef ... ElementType; //Kiu d liu ca phn t typedef struct { ElementType Elements[MaxLength]; // phn t int Front, Rear; //ch s u v ui hng } Queue; Queue Q;

70

KHI TO HNG RNG

Front v Rear khng tr n v tr hp l no Ta cho Front=Rear=-1


void MakeNull_Queue(Queue *Q) {
Q->Front=-1; Q->Rear=-1; }

71

KIM TRA HNG RNG

int Empty_Queue(Queue Q) { return Q.Front==-1; }

72

KIM TRA HNG Y


V d

Hng y khi s phn t hin c trong hng bng Maxlength


int Full_Queue(Queue Q) { return (Q.Rear-Q.Front+1) % MaxLength==0; }

73

LY GI TR PHN T U HNG

=>Gii thut
- Nu hng Q rng th thng bo li - Ngc li, tr v gi tr c lu tr ti c ch s l Front ElementType Front(Queue Q) {
if (!Empty_Queue(Q)) return Q.Elements[Q.Front]; }

74

XA PHN T U HNG(1)
Cc trng hp c th:

75

XA PHN T U HNG(2)
Gii thut :
Nu hng Q rng th thng bo li Ngc li:
Nu Front=Rear tc hng ch cn 1 phn t th khi to li hng rng Ngc li, thay i gi tr cho Front void DeQueue(Queue *Q){ if (!Empty_Queue(*Q)){ if (Q->Front==Q->Rear) //Nu ch c 1 pht MakeNull_Queue(Q); else Q->Front=(Q->Front+1) % MaxLength; } else printf("Loi: Hang rong!"); }

76

THM PHN T X VO HNG Q(1) Cc trng hp c th:

77

THM PHN T X VO HNG Q(2)

Gii thut :
Nu hng y th thng bo li Ngc li, thay i gi tr Rear v a gi tr x vo c ch s Rear mi ny
void EnQueue(ElementType X,Queue *Q) { if (!Full_Queue(*Q)){ if (Empty_Queue(*Q)) Q->Front=0; Q->Rear=(Q->Rear+1) % MaxLength; Q->Elements[Q->Rear]=X; } else printf("Loi: Hang day!"); }

78

BI TP
Vit chng trnh nhp vo mt ngn xp cha cc s nguyn Sau s dng mt hng i o ngc th t ca cc phn t trong ngn xp

79

CI T HNG BNG DSLK


M hnh
Dng 2 con tr Front v Rear ch ti phn t u hng v cui hng

Khai bo
typedef ... ElementType; //kiu phn t ca hng typedef struct Node* NodeType; struct Node { ElementType Element; NodeType Next; //Con tr ch k tip }; typedef NodeType Position; typedef struct{ Position Front, Rear; //2 con tr u, cui hng i } Queue; Queue Q;

80

KHI TO HNG Q RNG

Cho Front v rear cng tr n HEADER ca hng


void MakeNullQueue(Queue *Q) { Position Header; Header=(NodeType)malloc(sizeof(struct Node)); Header->Next=NULL; Q->Front=Header; Q->Rear=Header; }

81

KIM TRA HNG Q RNG


Kim tra xem Front v Rear c cng ch n 1 (HEADER) khng? int EmptyQueue(Queue Q){ return (Q.Front==Q.Rear); }

82

THM MT PHN T X VO HNG Q

=>Gii thut:
Thm 1 phn t vo hng ta thm vo sau Rear 1 mi Cho Rear tr n phn t mi ny Cho trng next ca mi ny tr ti NULL void EnQueue(ElementType X, Queue *Q) { Q->Rear->Next=(NodeType)malloc(sizeof(struct Node)); Q->Rear=Q->Rear->Next; Q->Rear->Element=X; //Dat gia tri vao Rear Q->Rear->Next=NULL; }

83

XA MT PHN T KHI HNG Q

xa 1 phn t khi hng ta ch cn cho Front tr ti v tr k tip ca n trong danh sch void DeQueue(Queue *Q) { if (!Empty_Queue(Q)) { Position Temp; Temp=Q->Front; Q->Front=Q->Front->Next; free(Temp); } else printf(Loi: Hang rong); }

84

CC NG DNG CA NGN XP V HNG I

Bn hy lit k mt s ng dng c s dng

Ngn xp Hng i

85

DANH SCH LIN KT KP


M hnh

Trong mt phn t ca danh sch, ta dng hai con tr Next v Previous ch n phn t ng sau v phn t ng trc phn t ang xt

Khai bo
typedef ... ElementType; //kiu ni dung ca phn t typedef struct Node* NodeType; struct Node { ElementType Element; //lu tr ni dung phn t NodeType Prev; //Con tr trc NodeType Next; //Con tr sau }; typedef NodeType Position; typedef Position DoubleList;

86

DANH SCH RNG


To danh sch rng
void MakeNull_List (DoubleList *DL) { (*DL)= NULL; }

Kim tra danh sch rng


int Empty (DoubleList DL) { return (DL==NULL); }

87

TR V NI DUNG PHN T V TR P TRONG DANH SCH

p
=>V tr ca mt phn t l con tr tr vo ngay chnh phn t ElementType Retrieve (Position P, DoubleList DL) { return P->Element; }

88

THM MT PHN T VO DANH SCH (1) Trc khi thm

p->Previous

p->Next

Sau khi thm

p->Previous

p->Next

=>Cp pht mt nh mi cha phn t cn thm =>t li cc lin kt

89

THM MT PHN T VO DANH SCH (2)


void Insert_List(ElementType X, Position p, DoubleList *DL) { if (*DL == NULL) { (*DL)=(NodeType)malloc(sizeof(Node)); (*DL)->Element = X; (*DL)->Previous =NULL; (*DL)->Next =NULL; } else { Position temp; temp=(NodeType)malloc(sizeof(struct Node)); temp->Element=X; temp->Next=p; temp->Previous=p->Previous; if (p->Previous!=NULL) p->Previous->Next=temp; p->Previous=temp; } }

90

XA MT PHN T RA KHI DANH SCH

void Delete_List (Position p, DoubleList *DL) { if (*DL == NULL) printf(Danh sach rong); else { if (p==*DL) (*DL)=(*DL)->Next; //Xa phn t u else p->Previous->Next=p->Next; if (p->Next!=NULL) p->Next->Previous=p->Previous; free(p); } }

91

You might also like