tuyentinh

Upload: hoang-quan

Post on 10-Jan-2016

3 views

Category:

Documents


0 download

DESCRIPTION

tuyentinh

TRANSCRIPT

  • CC KIU D LIU TRU TNG C BN

    CU TRC D LIU TUYN TNH

    Thanh [email protected]

  • 2NI DUNG

    DANH SCH NGN XP HNG I

  • 3DANH SCH

    KHI NIM V DANH SCH CC PHP TON CI T

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

  • 4KHI 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)

  • 5CC PHP TON (1)Tn php ton Cng dng

    Tr v v tr sau phn t cui trong ds L

    MAKENULL_LIST(L) Khi to mt danh sch L rngEMPTY_LIST(L) Kim tra xem danh sch L c rng hay

    khngFULL_LIST(L) Kim tra xem danh sch L c y hay

    khngINSERT_LIST(X,P,L) Xen phn t c ni dung X vo danh

    sch L ti v tr PDELETE_LIST(P,L) Xa phn t ti v tr P trong danh sch

    LLOCATE_LIST(X,L) Tr v kt qu l v tr ca phn t c

    ni dung X trong danh sch LNu khng tm thy: tr v ENDLIST(L)

    ENDLIST(L)

  • 6CC PHP TON (2)RETRIEVE(P,L) Tr v ni dung phn t th P trong

    danh sch L

    NEXT(P,L) Tr v phn t ng sau phn t th P trong danh sch L

    PREVIOUS(P,L) Tr v phn t ng trc phn t th P trong danh sch L

    FIRST(L) Tr v kt qu l v tr ca phn t u danh sch, ENDLIST(L) nu danh sch rng

    PRINT_LIST(L) Hin th cc phn t trong danh sch L theo th t xut hin

  • 7CI 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)

  • 8M HNH

    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

    V tr

    123

  • 9KHAI BO#define MaxLength // di ti a dstypedef ... ElementType; //kiu ca phttypedef int Position; //kiu v trtypedef struct { //mng cha cc phn t ca danh sch

    ElementType Elements[MaxLength]; Position Last; //gi di danh sch

    } List;

    List L;

  • 10

    KHI TO DANH SCH RNG

    Cho di danh sch bng 0void MakeNull_List(List *L) {

    L->Last=0;}

  • 11

    KIM TRA DANH SCH RNG Xem di danh sch c bng 0 khng?

    int Empty_List(List L) {return L.Last==0;

    }

    Xem danh sch c full khng? int Full_List(List L) { return L.Last==MaxLength;}

  • 12

    TM KIM PHN T X TRONG DS(1)

    Position First(List L) {return 1;

    }Position EndList(List L) {

    return L.Last + 1;A}BPosition Next(Position P, List L) {

    return P + 1;C}DEElementType Retrieve(Position P, List L) {

    return L.Elements[P-1];F}G

  • 13

    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)

  • 14

    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

  • 15

    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 ((PL->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++; }

    }

  • 16

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

    V d: Xa phn t v tr p=4 ca L

  • 17

    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

  • 18

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

    void Delete_List(Position P,List *L) { if ((PL->Last))

    printf("Vi tri khong hop le"); else if (Empty_List(*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;QLast-1;Q++) L->Elements[Q]=L->Elements[Q+1];

    L->Last--; }

    }

  • 19

    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)

  • 20

    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;}

  • 21

    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)

  • 22

    CC PHP TON KHC (1) Xc nh v tr sau phn t cui trong danh

    schPosition EndList(List L) {

    return L.Last+1;}

    Xc nh v tr u tin trong danh sch Position First(List L) {

    return 1;}

  • 23

    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 schPosition Next(Position P, List L) {

    return P+1;}

  • 24

    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.

    Tnh gi tr trung bnh m c bao nhiu phn t trn trung bnh Tnh lch chun

  • 25

    NHP DANH SCH T BN PHM

    void ReadList(List *L) { int i,N;

    ElementType X;MakeNull_List(L);printf("So phan tu danh sach N= ");scanf("%d",&N);for(i=1; i

  • 26

    HIN TH DANH SCH RA MN HNHvoid PrintList(List L) { Position P;

    P = First(L);while (P != EndList(L)) {

    printf("%d ",Retrieve(P,L));P = Next(P, L);

    }printf("\n");

    }

  • 27

    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; //Cha ni dung ca phn t NodeType Next; //con tr ch n phn t k tip }; typedef NodeType Position; //Kiu v tr typedef Position List;

  • 28

    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;

    }

  • 29

    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);

    }

  • 30

    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;

    }

  • 31

    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

    }}

  • 32

    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;}

  • 33

    C NI DUNG PHN T

    ElementType Retrieve(Position P, List L) {if (P->Next!=NULL)

    return P->Next->Element;}

  • 34

    XC NH V TR PHN T V tr phn t u tin

    Position First(List L) {return L;

    }

    V tr phn t cui cngPosition EndList(List L) {

    Position P;P=First(L);while (P->Next!=NULL) P=P->Next;return P;

    }

    V tr phn t k tipPosition Next(Position P, List L) {

    return P->Next;}

  • 35

    IN DANH SCH RA MN HNHvoid 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");

    }

  • 36

    BI TPVn 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

  • 37

    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?

  • 38

    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 dstypedef 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;

  • 39

    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

  • 40

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

  • 41

    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"); } }

  • 42

    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"); }

  • 43

    NGN XP (STACK)

    NH NGHA CC PHP TON CI T

    CI T BNG DANH SCH LIN KT CI T BNG MNG

  • 44

    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)

  • 45

    CC PHP TONPhp ton Din gii

    MAKENULL(S) To mt ngn xp rng (S)

    EMPTY(S) Kim tra xem ngn xp S c rng hay khng

    FULL(S) Kim tra xem ngn xp S c y hay khng

    PUSH(X,S) Thm phn t X vo nh ngn xp S. Tng ng: INSERT(X,FIRST(S),S)

    POP(S) Xa phn t ti nh ngn xp S.Tng ng: DELETE(FIRST(S),S)

    TOP(S) Tr v phn t trn nh ngn xp S, tng ng: RETRIEVE(FIRST(S),S)

  • 46

    CI T NGN XP BNG DSLK

    Khai botypedef List Stack;

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

    Kim tra ngn xp rngint Empty_Stack(Stack S){ return Empty_List(S);}

    Thm phn t vo ngn xpvoid Push(ElementType X, Stack *S){ Insert_List (X, First (*S), S);}

    Xa phn t ra khi ngn xpvoid Pop (Stack *S){ Delete_List (First (*S), S);}

  • 47

    CI T NGN XP BNG MNG (1)

    Khai bo#define MaxLength // di ca mngtypedef ElementType;//kiu phn t ca ngn xptypedef struct {

    //Lu ni dung ca cc phn t ElementType Elements[MaxLength];

    int Top_idx; //gi v tr nh ngn xp} Stack;Stack S;

  • 48

    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; }

  • 49

    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;

    }

  • 50

    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;

    }

  • 51

    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");

    }

  • 52

    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!");

    }

  • 53

    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_idxvoid 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;

    }

  • 54

    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)

  • 55

    HNG I (QUEUE)

    NH NGHA CC PHP TON CI T HNG I

    DNG MNG DI CHUYN TNH TIN DNG MNG VNG DNG DSLK

  • 56

    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)

  • 57

    CC PHP TONPhp ton Din gii

    MAKENULL_QUEUE(Q) To mt hng i rng (Q)

    EMPTY_QUEUE(Q) Kim tra xem hng i Q c rng khng

    FULL_QUEUE(Q) Kim tra xem hng i Q c y khng

    ENQUEUE(X,Q) Thm phn t X vo cui hng i Q

    DEQUEUE(Q) Xa phn t ti u hng i Q

    FRONT(Q) Tr v phn t u tin ca hng i Q

  • 58

    CI T HNG BNG MNG DI CHUYN TNH TIN

    M hnh

  • 59

    KHAI BO

    #define MaxLength ... //chiu di ti atypedef ... ElementType; //Kiu d liu phttypedef struct {

    ElementType Elements[MaxLength]; //ni dung phtint Front, Rear; //ch s u v cui hng

    } Queue;Queue Q;

  • 60

    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;

    }

  • 61

    KIM TRA HNG RNG

    Hng rng khi front=-1

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

    }

  • 62

    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);

    }

  • 63

    TR V 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) printf (Hang rong); else return Q.Elements[Q.Front];}

    Kt qu ca php ton trn l x

  • 64

    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

  • 65

    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!");}

  • 66

    THM MT PHN T VO HNG(1)

    Trng hp bnh thng

  • 67

    THM MT PHN T VO HNG(2)

    Trng hp hng b trn

  • 68

    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 v tr Tng Rear 1 n v v a gi tr x vo

    c ch s Rear mi ny

  • 69

    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 vi tri for(i=Q->Front; iRear; 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!");

    }

  • 70

    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 ttypedef struct {

    ElementType Elements[MaxLength]; // phn t int Front, Rear; //ch s u v ui hng

    } Queue; Queue Q;

  • 71

    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;

    }

  • 72

    KIM TRA HNG RNG

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

    }

  • 73

    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;

    }

  • 74

    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];}

  • 75

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

  • 76

    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!"); }

  • 77

    THM PHN T X VO HNG Q(1)

    Cc trng hp c th:

  • 78

    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!");}

  • 79

    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

  • 80

    CI T HNG BNG DSLK

    M hnh

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

    Khai botypedef ... ElementType; //kiu phn t ca hngtypedef 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;

  • 81

    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;}

  • 82

    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);

    }

  • 83

    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 RearQ->Rear->Next=NULL;

    }

  • 84

    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 sau Front ElementType Front(Queue Q) { if (!EmptyQueue(Q)) return Q.Front->Next->Element;}

  • 85

    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); }

  • 86

    CC NG DNG CA NGN XP V HNG I

    Bn hy lit k mt s ng dng c s dng

    Ngn xp Hng i

  • 87

    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 botypedef ... ElementType; //kiu ni dung ca phn ttypedef struct Node* NodeType; struct Node {

    ElementType Element; //lu tr ni dung phn tNodeType Prev; //Con tr trcNodeType Next; //Con tr sau

    };typedef NodeType Position;typedef Position DoubleList;

  • 88

    DANH SCH RNG To danh sch rng

    void MakeNull_List (DoubleList *DL) { (*DL)= NULL;

    }

    Kim tra danh sch rngint Empty (DoubleList DL) {

    return (DL==NULL); }

  • 89

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

    =>V tr ca mt phn t l con tr tr vo ngay chnh phn t

    ElementType Retrieve (Position P, DoubleList DL) { return P->Element;

    }

    p

  • 90

    THM MT PHN T VO DANH SCH (1)

    Trc khi thm

    Sau khi thm

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

    p->Previous p p->Next

    p->Previous p p->Next

  • 91

    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;

    }}

  • 92

    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); }}

    3

    CHNG 2 CC KIU D LIU TRU TNG C BN (BASIC ABSTRACT DATA TYPES)NI DUNG S HCDANH SCHKHI NIM V DANH SCHCC PHP TON (1)CC PHP TON (2)CI T DANH SCH BNG MNG (DS C)M HNHKHAI BOKHI TO DANH SCH RNGKIM TRA DANH SCH RNGSlide 12XEN PHN T X VO V TR P (1)XEN PHN T X VO V TR P (2)XEN PHN T X VO V TR P (3)XA MT PHN T TI V TR P TRONG DS (1)XA MT PHN T TI V TR P TRONG DS (2)XA MT PHN T TI V TR P TRONG DS (3)TM KIM PHN T X TRONG DS(1)TM KIM PHN T X TRONG DS(1)NH GI GII THUT TM KIMCC PHP TON KHC (1)CC PHP TON KHC (2)BI TPNHP DANH SCH T BN PHMHIN TH DANH SCH RA MN HNHCI T DANH SCH BNG CON TRSlide 28Slide 29XEN MT PHN T VO DANH SCHXA MT PHN T KHI DANH SCH(1)TM KIM MT PHN T TRONG DANH SCHXC NH NI DUNG PHN TXC NH V TR PHN TIN DANH SCH RA MN HNHSlide 36SO SNH 2 PHNG PHP CI T DSCI T DANH SCH BNG CON TR GISlide 39Slide 40Slide 41Slide 42NGN XP (STACK)NH NGHACC PHP TONSlide 46CI T NGN XP BNG MNG (1)KHI TO NGN XP RNGKIM TRA NGN XP RNG?KIM TRA NGN XP Y?TR V PHN T U NGN XPXA PHN T TI NH NGN XPTHM PHN T X VO NGN XPBI TPHNG I (QUEUE)NH NGHA HNG ISlide 57CI T HNG BNG MNG DI CHUYN TNH TINSlide 59KHI TO HNG Q RNGKIM TRA HNG RNGKIM TRA HNG YTR V PHN T U HNGXA MT PHN T KHI HNG(1)XA MT PHN T KHI HNG(2)THM MT PHN T VO HNG(1)THM MT PHN T VO HNG(2)THM MT PHN T VO HNG(3)THM MT PHN T VO HNG(4)CI T HNG BNG MNG VNGKHI TO HNG RNGSlide 72Slide 73LY GI TR PHN T U HNGXA PHN T U HNG(1)XA PHN T U HNG(2)THM PHN T X VO HNG Q(1)THM PHN T X VO HNG Q(2)Slide 79CI T HNG BNG DSLKSlide 81KIM TRA HNG Q RNGTHM MT PHN T X VO HNG QSlide 84XA MT PHN T KHI HNG QCC NG DNG CA NGN XP V HNG IDANH SCH LIN KT KPDANH SCH RNGTR V NI DUNG PHN T V TR P TRONG DANH SCHTHM MT PHN T VO DANH SCH (1)THM MT PHN T VO DANH SCH (2)XA MT PHN T RA KHI DANH SCH