chapter 6: linked lists

160
CHAPTER 6: LINKED LISTS

Upload: zlhna

Post on 24-Jan-2016

44 views

Category:

Documents


0 download

DESCRIPTION

CHAPTER 6: LINKED LISTS. Cấu trúc dữ liệu động. Mục tiêu. Giới thiệu khái niệm cấu trúc dữ liệu động . Giới thiệu danh sách liên kết : Các kiểu tổ chức dữ liệu theo DSLK . Danh sách liên kết đơn : tổ chức , các thuật toán , ứng dụng. Kiểu dữ liệu tĩnh. - PowerPoint PPT Presentation

TRANSCRIPT

  • CHAPTER 6: LINKED LISTS

  • Cu trc d liu ng

  • Mc tiuGii thiu khi nim cu trc d liu ng.Gii thiu danh sch lin kt: Cc kiu t chc d liu theo DSLK.Danh sch lin kt n: t chc, cc thut ton, ng dng.

  • Kiu d liu tnhKhi nim : Mt s i tng d liu khng thay thay i c kch thc, cu trc, trong sut qu trnh sng. Cc i tng d liu thuc nhng kiu d liu gi l kiu d liu tnh. Mt s kiu d liu tnh : cc cu trc d liu c xy dng t cc kiu c s nh: kiu thc, kiu nguyn, kiu k t ... hoc t cc cu trc n gin nh mu tin, tp hp, mng ... Cc i tng d liu c xc nh thuc nhng kiu d liu ny thng cng ngt, g b kh din t c thc t vn sinh ng, phong ph.

  • CTDL tnh Mt s hn chMt s i tng d liu trong chu k sng ca n c th thay i v cu trc, ln, nh danh sch cc hc vin trong mt lp hc c th tng thm, gim i ... Nu dng nhng cu trc d liu tnh bit nh mng biu din Nhng thao tc phc tp, km t nhin chng trnh kh c, kh bo tr v nht l kh c th s dng b nh mt cch c hiu qu. D liu tnh s chim vng nh dnh cho chng sut qu trnh hot ng ca chng trnh s dng b nh km hiu qu.

  • CTDL tnhMng 1 chiuKch thc c nh (fixed size)Chn 1 phn t vo mng rt khCc phn t tun t theo ch s 0 n-1Truy cp ngu nhin (random access)01234n-2n-1chn

  • Cu trc d liu ngDanh sch lin ktCp pht ng lc chy chng trnhCc phn t nm ri rc nhiu ni trong b nhKch thc danh sch ch b gii hn do RAMThao tc thm xo n ginInsert, Delete

  • Hng gii quytCn xy dng cu trc d liu p ng c cc yu cu:Linh ng hn.C th thay i kch thc, cu trc trong sut thi gian sng. Cu trc d liu ng.

  • Danh sch lin kt ( LINKED LIST )

  • Bin khng ng Bin khng ng (bin tnh, bin na tnh) l nhng bin tha: c khai bo tng minh,Tn ti khi vo phm vi khai bo v ch mt khi ra khi phm vi ny,c cp pht vng nh trong vng d liu (Data segment) hoc l Stack (i vi bin na tnh - cc bin cc b).Kch thc khng thay i trong sut qu trnh sng.Do c khai bo tng minh, cc bin khng ng c mt nh danh c kt ni vi a ch vng nh lu tr bin v c truy xut trc tip thng qua nh danh .V d : inta;// a, b l cc bin khng ngchar b[10];

  • Bin ng Trong nhiu trng hp, ti thi im bin dch khng th xc nh trc kch thc chnh xc ca mt s i tng d liu do s tn ti v tng trng ca chng ph thuc vo ng cnh ca vic thc hin chng trnh. Cc i tng d liu c c im k trn nn c khai bo nh bin ng. Bin ng l nhng bin tha:Bin khng c khai bo tng minh.C th c cp pht hoc gii phng b nh khi ngi s dng yu cu. Cc bin ny khng theo qui tc phm vi (tnh).Vng nh ca bin c cp pht trong Heap.Kch thc c th thay i trong qu trnh sng.

  • Bin ng Do khng c khai bo tng minh nn cc bin ng khng c mt nh danh c kt buc vi a ch vng nh cp pht cho n, do gp kh khn khi truy xut n mt bin ng. gii quyt vn , bin con tr (l bin khng ng) c s dng tr n bin ng. Khi to ra mt bin ng, phi dng mt con tr lu a ch ca bin ny v sau , truy xut n bin ng thng qua bin con tr bit nh danh.

  • Bin ng Hai thao tc c bn trn bin ng l to v hy mt bin ng do bin con tr p tr n: To ra mt bin ng v cho con tr p ch n n Hy mt bin ng do p ch n

  • Bin ng To ra mt bin ng v cho con tr p ch n n void* malloc(size); // tr v con tr ch n vng nh // size byte va c cp pht.void* calloc(n,size);// tr v con tr ch n vng nh // va c cp pht gm n phn t, // mi phn t c kch thc size bytenew // ton t cp pht b nh trong C++Hm free(p) hu vng nh cp pht bi hm malloc hoc calloc do p tr tiTon t delete p hu vng nh cp pht bi ton t new do p tr ti

  • Bin ng V d int *p1, *p2;// cp pht vng nh cho 1 bin ng kiu int p1 = (int*)malloc(sizeof(int));*p1 = 5;// t gi tr 5 cho bin ng ang c p1 qun l// cp pht bin ng kiu mng gm 10 phn t kiu intp2 = (int*)calloc(10, sizeof(int));*(p2+3) = 0; // t gi tr 0 cho phn t th 4 ca mng p2free(p1); free(p2);

  • Kiu d liu Con trKiu con tr l kiu c s dng lu a ch ca mt i tng d liu khc.Bin thuc kiu con tr Tp l bin m gi tr ca n l a ch cu mt vng nh ng vi mt bin kiu T, hoc l gi tr NULL.

  • Con tr Khai boC php nh ngha mt kiu con tr trong ngn ng C :typedef * < kiu con tr>;

    V d : typedefint*intpointer;intpointer p;hocint*p; l nhng khai bo hp l.

  • Con tr Thao tc cn bnCc thao tc c bn trn kiu con tr:(minh ha bng C)Khi 1 bin con tr p lu a ch ca i tng x, ta ni p tr n x.Gn a ch ca mt vng nh con tr p:p = ;v du : int i,*p; p=&i;Truy xut ni dung ca i tng do p tr n (*p)

  • Danh sch lin kt (List)

    nh ngha: Mot danh sach (list) la mot tap hp gom mot so hu han phan t cung kieu, co th t. Co hai cach cai at danh sach la :Cai at theo kieu ke tiep : ta co danh sach ke hay danh sach ac.Cai at theo kieu lien ket : ta co danh sach lien ket.

  • Danh sch lin kt (List)

    Danh sach ke :

    Cac phan t cua danh sach goi la cac node, c lu tr ke lien nhau trong bo nh. Moi node co the la mot gia tr kieu int, float, char, hoac co the la mot struct vi nhieu vung tin. Mang hay chuoi la dang cua danh sach ke.a ch cua moi node trong danh sach c xac nh bang ch so (index). Ch so cua danh sach la mot so nguyen va c anh t 0 en mot gia tr toi a nao o.Danh sach ke la cau truc d lieu tnh, so node toi a cua danh sach ke co nh sau khi cap phat nen so node can dung co khi tha hay thieu. Ngoai ra danh sach ke khong phu hp vi cac thao tac thng xuyen nh them hay xoa phan t tren danh sach,

  • Danh sch lin kt (List)

    Danh sach lien ket :

    Cac phan t cua danh sach goi la node, nam rai rac trong bo nh. Moi node, ngoai vung d lieu thong thng, con co vung lien ket cha c ch cua node ke tiep hay node trc no.Danh sach lien ket la cau truc d lieu ong, co the them hay huy node cua danh sach trong khi chay chng trnh. Vi cach cai at cac thao tac them hay huy node ta ch can thay oi lai vung lien ket cho phu hp.Tuy nhien, viec lu tr danh sach lien ket ton bo nh hn anh sach ke v moi node cua danh sach phai cha them vung lien ket. Ngoai ra viec truy xuat node th I trong danh sach lien ket cham hn v phai duyet t au danh sach.

  • C nhiu kiu t chc lin kt gia cc phn t trong danh sch nh : Danh sch lin kt n Danh sch lin kt kp Danh sch lin kt vng Danh sch lin kt (List)

  • Danh sch lin kt (List) Danh sch lin kt n: mi phn t lin kt vi phn t ng sau n trong danh sch:

    Danh sch lin kt kp: mi phn t lin kt vi cc phn t ng trc v sau n trong danh sch:

  • Danh sch lin kt (List) Danh sch lin kt vng : phn t cui danh sch lin kt vi phn t u danh sch:

  • Danh sch lin kt n (xu n)

  • DSLK - nh nghaDSLK n l chui cc node, c t chc theo th t tuyn tnhMi node gm 2 phn:Phn Data, information : lu tr cac thong tin ve ban than phan t .Phn link hay con tr : lu tr a ch cua phan t ke tiep trong danh sach, hoac lu tr gia tr NULL neu la phan t cuoi danh sach.

    DataLinkNode

  • Cu trc d liu ca DSLK ntypedef struct Node {intdata; // Data l kiu nh ngha trcNode * link; //con tr ch n cu trc NODE};

  • Lu tr DSLK n trong RAM100V d : Ta c danh sch theo dng bng sau110230500140a ch000

  • DSLK n truy xut Minh haVD:Joe140Marta110Bill500Koch230100100140110500a chfirstBillNULL230

  • T chc, qun l qun l mt xu n ch cn bit a ch phn t u xu. Con tr First s c dng lu tr a ch phn t u xu, ta gi First l u xu. Ta c khai bo :NODE*first; tin li, c th s dng thm mt con tr last gi a ch phn t cui xu. Khai bo last nh sau : NODE*last;

  • DSLK Khai bo phn Datatypedef struct node{DataType data;struct node * link;}NODE;typedef struct node{int data;struct node * link;}NODE;typedef struct node{SinhViendata;struct node * link;}NODE;Cu trc nodeDataType ?

  • T chc, qun l Khai bo kiu ca 1 phn t v kiu danh sch lin kt n v n gin ta xt mi node gm vng cha d liu l kiu s nguyn :

    // kiu ca mt phn t trong danh schtypedef struct Node {intdata; NODE * link; }NODE;

    typedef struct List // kiu danh sch lin kt{NODE* first;NODE* last; }LIST;Trong thc t bin data l mt kiu struct

  • To mt phn tTh tc GetNode to ra mt phn t cho danh sch vi thng tin cha trong x NODE*GetNode(int x) {NODE *p;// Cp pht vng nh cho phn tp = (NODE*)malloc(sizeof(NODE))//p= new NODE;if (p==NULL) { coutlink = NULL;return p; }

  • To mt phn t to mt phn t mi cho danh sch, cn thc hin cu lnh: new_ele = GetNode(x); new_ele s qun l a ch ca phn t mi c to.

  • Cc thao tc c sTo danh sch rngThm mt phn t vo danh schTm kim mt gi tr trn danh schTrch mt phn t ra khi danh schDuyt danh schHy ton b danh sch

  • Khi to danh sch rngvoid Init(LIST &l){l.first = l.last = NULL;}firstlast

  • Thm mt phn tC 3 v tr thm phn t mi vo danh sch : Thm vo u danh sch Ni vo cui danh sch Chn vo danh sch sau mt phn t q

  • Thm mt phn t firstlastnew_ele

  • Thm mt phn t vo uBCDEfirstlastnew_ele

  • Thm mt phn t vo u//input: danh sch (first, last), phn t mi new_ele//output: danh sch (first, last) vi new_ele u DSNu Danh sch rng Thfirst = new_ele;last = first;Ngc linew_ele ->link = first;first = new_ele ;

  • Thm mt phn t vo uvoid AddFirst(LIST &l, NODE* new_ele){if (l.first == NULL) //Xu rng{l.first = new_ele;l.last = l.first;}else {new_ele->link = l.first; l.first = new_ele; }}

  • Thm mt thnh phn d liu vo u//input: danh sch (first, last), thnh phn d liu X//output: danh sch (first, last) vi phn t cha X u DSTo phn t mi new_ele cha d liu XNu to c:Thm new_ele vo u danh schNgc liBo li

  • Thm mt thnh phn d liu vo uNODE* Insertfirst(LIST &l, int x){NODE* new_ele = GetNode(x);if (new_ele == NULL)return NULL;AddFirst(l, new_ele);return new_ele;}

  • To Link list bng cch thm vo uvoid create_list_first(LIST &l, int x){NODE *p;int n;coutn;for (int i=1;i
  • Thm mt phn t vo cuiBCDEfirstlastnew_ele

  • Thm mt phn t vo cui//input: danh sch (first, last), phn t mi new_ele//output: danh sch (first, last) vi new_ele cui DSNu Danh sch rng Thfirst = new_ele;last = first;Ngc lilast->link = new_ele ;last = new_ele ;

  • Thm mt phn t vo cuivoid InsertLast(LIST &l, NODE *new_ele){if (l.first==NULL) {l.first = new_ele; l.last = l.first;}else{l.last->link = new_ele; l.last = new_ele ;}}

  • Thm mt thnh phn d liu vo cui//input: danh sch (first, last), thnh phn d liu X//output: danh sch (first, last) vi phn t cha X cui DSTo phn t mi new_ele cha d liu XNu to c:Thm new_ele vo cui danh schNgc liBo li

  • Thm mt thnh phn d liu vo cuiNODE* InputLast(LIST &l){int x,n;printf(Nhap so phan tu :);scanf(%d,&n);for(int i=0;i
  • To Link list bng cch thm vo cuivoid create_list_last(list &l, int x){node *p;int n;coutn;for (int i=1;i
  • Chn mt phn t sau qBCDEfirstlastnew_eleq

  • Chn mt phn t sau q//input: danh sch (first, last), q, phn t mi new_ele//output: danh sch (first, last) vi new_ele sau qNu ( q != NULL) thnew_ele -> link = q -> link;q -> link = new_ele ;Nu ( q ==last) thlast = new_ele;Ngc liThm new_ele vo u danh sch

  • Chn mt phn t sau qvoid InsertAfter(LIST &l,NODE *q, NODE* new_ele){if (q!=NULL && new_ele !=NULL) {new_ele->link = q->link;q->link = new_ele; if(q == l.last)l.last = new_ele; }}

  • Duyt danh schDuyt danh sch l thao tc thng c thc hin khi c nhu cu x l cc phn t ca danh sch theo cng mt cch thc hoc khi cn ly thng tin tng hp t cc phn t ca danh sch nh:m cc phn t ca danh sch,Tm tt c cc phn t tho iu kin, Hy ton b danh sch (v gii phng b nh)

  • Duyt danh schBc 1: p = first; //Cho p tr n phn t u danh schBc 2: Trong khi (Danh sch cha ht) thc hinB21 : X l phn t p;B22 : p:=p->link;// Cho p tr ti phn t k void ProcessList (LIST &l){NODE*p;p = l.first;while (p!= NULL){ ProcessNode(p); // x l c th ty ng dng p = p->link;}}

  • DSLK Minh ha in danh schp = first;while (p!=NULL){printf(%d\t,p->data);p = p->link;}3000Tran5000Ngoc4000ThaoNULL300050004000firstp

  • DSLK Minh ha in danh schp =first;while (p!=NULL){printf(%d\t,p->data); p = p->link;}3000Tran5000Ngoc4000ThaoNULL3000500040003000firstp

  • p = first;while (p!=NULL){printf(%d\t,p->data);p = p->link;}3000Tran5000Ngoc4000ThaoNULL3000500040003000firstpDSLK Minh ha in danh sch

  • DSLK Minh ha in danh schp = first;while (p!=NULL){printf(%d\t,p->data);p = p->link;}3000Tran5000Ngoc4000ThaoNULL3000500040003000firstp

  • DSLK Minh ha in danh schp = first;while (p!=NULL){printf(%d\t,p->data);p = p->link;}3000Tran5000Ngoc4000ThaoNULL3000500040005000firstp

  • DSLK Minh ha in danh schp = first;while (p!=NULL){printf(%d\t,p->data);p = p->link;}3000Tran5000Ngoc4000ThaoNULL3000500040005000firstp

  • DSLK Minh ha in danh schp = first;while (p!=NULL){printf(%d\t,p->data);p = p->link;}3000Tran5000Ngoc4000ThaoNULL3000500040005000firstp

  • DSLK Minh ha in danh schp = first;while (p!=NULL){printf(%d\t,p->data);p = p->link;}3000Tran5000Ngoc4000ThaoNULL3000500040004000firstp

  • DSLK Minh ha in danh schp = first;while (p!=NULL){printf(%d\t,p->data);p = p->link;}3000Tran5000Ngoc4000ThaoNULL3000500040004000firstp

  • DSLK Minh ha in danh schp = first;while (p!=NULL){printf(%d\t,p->data);p = p->link;}3000Tran5000Ngoc4000ThaoNULL3000500040004000firstp

  • DSLK Minh ha in danh schp = first;while (p!=NULL){printf(%d\t,p->data);p = p->link;}3000Tran5000Ngoc4000ThaoNULL300050004000NULLfirstp

  • DSLK Minh ha in danh schp = first;while (p!=NULL){printf(%d\t,p->data);p = p->link;}3000Tran5000Ngoc4000ThaoNULL300050004000NULLfirstpKt thc

  • In cc phn t trong danh schvoid Output(LIST l){NODE* p=l.first;while(p!=NULL){cout
  • Tm kim mt phn t c kha xNODE* Search(LIST l , int x){NODE* p=l.first;while( p!=NULL && p->data!=x)p=p->link;return p;}

  • Xa mt node ca danh schXa node u ca danh sch

    xa node u danh sch l (khc rng)Gi p l node u ca danh sch (l l.first)Cho l.first tr vo node sau node p (l p->link)Nu danh sch tr tahnh2 rng th l.last=NULLGii phng vng nh m p tr ti

  • Xa mt node ca danh schBCDEfirstlastp

  • Xa mt node ca danh schvoid RemoveFirst(LIST &l){if(l.first != NULL){NODE* p=l.first;l.first=p->link;if(l.first == NULL) l.last=NULL;//Nu danh sch rngfree(p);}}

  • Xa mt node ca danh schXa node sau node q trong danh schiu kin c th xa c node sau q l :q phi khc NULLNode sau q phi khc NULLC 3 thao tcGi p l node sau qCho vng link ca q tr vo node ng sau p (l l.link)Nu p l phn t cui th l.last tr vo qGii phng vng nh m p tr ti

  • Xa node sau node q trong danh sch

    BCDEfirstlastqp

  • Xa node sau node q trong danh sch

    void RemoveAfter(LIST &l, NODE *q ){if(q !=NULL && q->link !=NULL){NODE* p = q->link;q->link = p->link;if(p==l.last) l.last=q;free(p);}}

  • Hy ton b danh sch hy ton b danh sch, thao tc x l bao gm hnh ng gii phng mt phn t, do vy phi cp nht cc lin kt lin quan: Bc 1: Trong khi (Danh sch cha ht) thc hinB11: p = first; first =first->link; // Cho p tr ti phn t k B12: Hy p;Bc 2:last = NULL;//Bo m tnh nht qun khi xu rng

  • void RemoveList(LIST &l){NODE*p;while (l.first!= NULL) {p = l.first;l.first = p->link; free( p);}l.last = NULL;}Hy ton b danh sch

  • Sp xp trn danh sch lin kt n

  • Sp xp danh schCch tip cn:

    Phng n 1: Hon v ni dung cc phn t trong danh sch (thao tc trn vng data). Phng n 2 : Thay i cc mi lin kt (thao tc trn vng link)

  • Sp xp danh schHon v ni dung cc phn t trong danh sch Ci t li trn danh sch lin kt mt trong nhng thut ton sp xp bit trn mngim khc bit duy nht l cch thc truy xut n cc phn t trn danh sch lin kt thng qua lin kt thay v ch s nh trn mng. Do thc hin hon v ni dung ca cc phn t nn i hi s dng thm vng nh trung gian ch thch hp vi cc xu c cc phn t c thnh phn data kch thc nh. Khi kch thc ca trng data ln, vic hon v gi tr ca hai phn t s chim chi ph ng k.

  • void SLL_InterChangeSort ( List &l ){for ( Node* p=l.first ; p!=l.last ; p=p->link )for ( Node* q=p->link ; q!=NULL ; q=q->link )if ( p->data > q->data )Swap( p->data , q->data );} Sp xp bng phng php i ch trc tip ( Interchange Sort )

  • 122815pql.firstl.lastSp xp i ch trc tip ( Interchange Sort )

  • 112825pql.firstl.lastSp xp i ch trc tip ( Interchange Sort )

  • 121285pql.firstl.lastSp xp i ch trc tip ( Interchange Sort )

  • 125128pql.firstl.lastSp xp i ch trc tip ( Interchange Sort )

  • 125812pqDng l.firstl.lastSp xp i ch trc tip ( Interchange Sort )

  • Sp xp bng phng php chn trc tip ( Selection sort ) voidListSelectionSort (LIST &l){for ( Node* p = l.first ; p != l.last ; p = p->link ) {Node* min = p;for ( Node* q = p->link ; q != NULL ; q = q->link )if ( min->data > q->data ) min = q ; Swap(min->data, p->data); }}

  • Sp xp bng phng php chn trc tip ( Selection sort ) 122815pminl.firstl.last

  • Sp xp bng phng php chn trc tip ( Selection sort ) 128125pminl.firstl.last

  • Sp xp bng phng php chn trc tip ( Selection sort ) 128125pminl.firstl.last

  • 125128pminl.firstl.lastSp xp bng phng php chn trc tip ( Selection sort )

  • 125812pminl.firstl.lastDngSp xp bng phng php chn trc tip ( Selection sort )

  • Sp xp bng phng php ni bt ( Bubble sort ) void SLL_BubleSort ( List l ){Node* t = l.last ;for ( Node* p = l.first ; p != NULL ; p = p->link){Node* t1; for ( Node* q=l.first ; p!=t ; q=q->link ){if( q->data > q->link->data )Swap( q->data , q->link->data );t1 = q ;}t = t1;}}

  • Sp xp bng phng php ni bt ( Bubble sort ) 122815qq->linkl.firstl.last

  • Sp xp bng phng php ni bt ( Bubble sort ) 281512qq->linkl.firstl.last

  • Sp xp bng phng php ni bt ( Bubble sort ) 215812qq->linkl.firstl.last

  • Sp xp bng phng php ni bt ( Bubble sort ) 125812qq->linkl.firstl.last

  • Sp xp bng phng php ni bt ( Bubble sort ) 125812l.firstl.lastDng

  • Sp xp Thay i cc mi lin kt Thay v hon i gi tr, ta s tm cch thay i trnh t mc ni ca cc phn t sao cho to lp nn c th t mong mun ch thao tc trn cc mc ni (link). Kch thc ca trng link:Khng ph thuc vo bn cht d liu lu trong xu Bng kch thc 1 con tr (2 hoc 4 byte trong mi trng 16 bit, 4 hoc 8 byte trong mi trng 32 bit)Thao tc trn cc mc ni thng phc tp hn thao tc trc tip trn d liu.Cn cn nhc khi chn cch tip cn: Nu d liu khng qu ln th nn chn phng n 1 hoc mt thut ton hiu qu no .

  • Phng php ly Node ra khi danh sch gi nguyn a ch ca Node12251q1 . q->link = p->link ; // p->link cha a ch sau p2 . q->link = NULL ; // p khng lin kt phn t Node

  • Quick Sort : Thut ton //input: xu (first, last)//output: xu c sp tng dnBc 1: Nu xu c t hn 2 phn tDng;//xu c th tBc 2: Chn X l phn t u xu L lm ngng. Trch X ra khi L.Bc 3: Tch xu L ra lm 2 xu L1 (gm cc phn t nh hn hay bng X) v L2 (gm cc phn t ln hn X).Bc 4: Sp xp Quick Sort (L1).Bc 5: Sp xp Quick Sort (L2).Bc 6: Ni L1, X, v L2 li theo trnh t ta c xu L c sp xp.

  • Sp xp quick sortfirst

  • Quick sort : phn hochfirstXChn phn t u xu lm ngng

  • Quick sort : phn hochfirst682451XTch xu hin hnh thnh 2 xufirst1first2

  • Quick sort : phn hochfirst682451XTch xu hin hnh thnh 2 xufirst1first2

  • Quick sort : phn hochfirst682451XTch xu hin hnh thnh 2 xufirst1first2

  • Quick sort : phn hochfirst682451XTch xu hin hnh thnh 2 xufirst1first2

  • Quick sortfirst682451XSp xp cc xu l1, l2first1first2

  • Quick sortfirst682451XNi l1, X, l2first1first2a kt qu vo first

  • Ni 2 danh schvoidSListAppend(SLIST &l, LIST &l2){if (l2.first == NULL) return; if (l.first == NULL) l = l2;else {l.first->link = l2.first;l.last = l2.last;} Init(l2);}

  • voidSListQSort(SLIST &l) {NODE *X, *p;SLIST l1, l2;if (list.first == list.last) return; Init(l1);Init(l2);X = l.first; l.first=x->link;while (l.first != NULL) {p = l.first;if (p->data data) AddFirst(l1, p);elseAddFirst(l2, p);}SListQSort(l1); SListQSort(l2);SListAppend(l, l1);AddFirst(l, X);SListAppend(l, l2);}

  • Quick sort : nhn xtNhn xt:Quick sort trn xu n n gin hn phin bn ca n trn mng mt chiuKhi dng quick sort sp xp mt xu n, ch c mt chn la phn t cm canh duy nht hp l l phn t u xu. Chn bt k phn t no khc cng lm tng chi ph mt cch khng cn thit do cu trc t nhin ca xu.

  • Danh sch hn ch Stack ( Ngn xp )Queue ( Hng i )

  • Stack

  • StackStack l mt vt cha (container) cc i tng lm vic theo c ch LIFO (Last In First Out) Vic thm mt i tng vo stack hoc ly mt i tng ra khi stack c thc hin theo c ch Vo sau ra trc. Cc i tng c th c thm vo stack bt k lc no nhng ch c i tng thm vo sau cng mi c php ly ra khi stack. Push: Thao tc thm 1 i tng vo stackPop: Thao tc ly 1 i tng ra khi stack.Stack c nhiu ng dng: kh qui, t chc lu vt cc qu trnh tm kim theo chiu su v quay lui, vt cn, ng dng trong cc bi ton tnh ton biu thc,

  • Gii thiuLIFO: Last In First OutThao tc Pop, Push ch din ra 1 u

  • Hin thc stack(Implementation of a Stack )Mng 1 chiuDanh sch LKKch thc stack khi qu thiu, lc qu thaCp pht ng!Push / Pop hi phc tpPush/Pop kh d dng

  • Stack ( Ngn xp )Stack l mt CTDL tru tng tuyn tnh h tr 2 thao tc chnh:Push(o):Thm i tng o vo u stackPop():Ly i tng u stack ra khi stack v tr v gi tr ca n. Nu stack rng th li s xy ra.Stack cng h tr mt s thao tc khc:isEmpty(): Kim tra xem stack c rng khng.Top(): Tr v gi tr ca phn t nm u stack m khng hy n khi stack. Nu stack rng th li s xy ra.

  • Biu din Stack dng mng(Array Implementation of a Stack)C th to mt stack bng cch khai bo mt mng 1 chiu vi kch thc ti a l N (v d: N =1000). Stack c th cha ti a N phn t nh s t 0 n N-1. Phn t nm u stack s c ch s t (lc trong stack ang cha t+1 phn t) khai bo mt stack, ta cn mt mng 1 chiu S, bin nguyn t cho bit ch s ca u stack v hng s N cho bit kch thc ti a ca stack.Data S [N];int t;

  • Biu din Stack dng mng Lnh top = 0 s to ra mt stack S rng. Gi tr ca t s cho bit s phn t hin hnh c trong stack.Khi ci t bng mng 1 chiu, stack c kch thc ti a nn cn xy dng thm mt thao tc ph cho stack:Full(): Kim tra xem stack c y cha.Khi stack y, vic gi n hm push() s pht sinh ra li.

  • Khai bo stacktypedef struct node{int data;};

    typedef struct stack{int top;node list[N];};

  • Biu din Stack dng mng Khi to Stack:void Init(stack &s){s.top=0;}

  • Biu din Stack dng mng Kim tra stack rng hay khng int Empty(stack s){if(s.top==0)return 1;return 0;}

  • Biu din Stack dng mng Kim tra stack y hay khngint Full(stack s){if(s.top==N-1)return 1;return 0;}

  • Biu din Stack dng mng Thm mt phn t x vo stack S void Push(stack &s,node x){if(!Full(s)) // stack cha y s.list[++s.top]=x;}

  • Biu din Stack dng mng Trch thng tin v hu phn t nh stack Snode Pop(stack &s){ node n;if(!Empty(s)) // stack khc r?ng{n=s.list[s.top];s.top--;}return n;}

  • Biu din Stack dng mng Nhn xt:Cc thao tc trn u lm vic vi chi ph O(1).Vic ci t stack thng qua mng mt chiu n gin v kh hiu qu.Tuy nhin, hn ch ln nht ca phng n ci t ny l gii hn v kch thc ca stack N. Gi tr ca N c th qu nh so vi nhu cu thc t hoc qu ln s lm lng ph b nh.

  • Biu din Stack dng danh sch lin kt(Implementation of a Stack Using Linked Representation)C th to mt stack bng cch s dng mt danh sch lin kt n (DSLK). DSLK c nhng c tnh rt ph hp dng lm stack v mi thao tc trn stack u din ra u stack.stack *s;

  • Khai bo stacktypedef struct node{int data;node *link;};typedef struct stack{node *top;};

  • Biu din Stack dng danh sch lin ktKhi tao stackvoid Init(stack &t){t.top=NULL;}

  • Biu din Stack dng danh sch lin ktKim tra stack rng : int Empty(stack t){ return t.top == NULL ? 1 : 0; // stack rng }

  • Thm mt phn t x vo stack S voidPush(stack &t, int x){node *p=new node;if(p!=NULL){p->data=x;p->link=NULL;if(Empty(t))t.top=p;else{p->link=t.top;t.top=p;}}}

  • Trch thng tin v hu phn t nh stack S

    intPop(stack &t){node *p;int x;if(!Empty(t)) {p=t.top;t.top=p->link;x=p->data;free(p);return x;}}

  • ng dng ca Stack Stack thch hp lu tr cc loi d liu m trnh t truy xut ngc vi trnh t lu trMt s ng dng ca Stack: Trong trnh bin dch (thng dch), khi thc hin cc th tc, Stack c s dng lu mi trng ca cc th tc.Lu d liu khi gii mt s bi ton ca l thuyt th (nh tm ng i)Kh qui ...

  • ng dng ca Stack V du: th tc Quick_Sort dng Stack kh qui:1.l:=1; r:=n;2.Chn phn t gia x:=a[(l+r) div 2]; 3.Phn hoch (l,r) thnh (l1,r1) v (l2,r2) bng cch xt: y thuc (l1,r1) nu yx;y thuc (l2,r2) ngc li;4.Nu phn hoch (l2,r2) c nhiu hn 1 phn t thc hin: Ct (l2,r2) vo Stack;Nu (l1,r1) c nhiu hn 1 phn t thc hin: l=l1;r=r1;Goto 2;Ngc liLy (l,r) ra khi Stack nu Stack khc rng v Goto 2;Nu khng dng;

  • Hng i ( Queue)

  • Hng i ( Queue) Hng i l mt vt cha (container) cc i tng lm vic theo c ch FIFO (First In First Out) vic thm mt i tng vo hng i hoc ly mt i tng ra khi hng i c thc hin theo c ch Vo trc ra trc.Cc i tng c th c thm vo hng i bt k lc no nhng ch c i tng thm vo u tin mi c php ly ra khi hng i.

  • Hng i ( Queue)

  • Gii thiuFIFOThm vo cui v ly ra u

    Trong tin hc, CTDL hng i c nhiu ng dng: kh qui, t chc lu vt cc qu trnh tm kim theo chiu rng v quay lui, vt cn, t chc qun l v phn phi tin trnh trong cc h iu hnh, t chc b m bn phm,

  • Hng i ( Queue) Hng i h tr cc thao tc:EnQueue(o):Thm i tng o vo cui hng iDeQueue(): Ly i tng u queue ra khi hng i v tr v gi tr ca n. Nu hng i rng th li s xy ra.Empty(): Kim tra xem hng i c rng khng.Front(): Tr v gi tr ca phn t nm u hng i m khng hy n. Nu hng i rng th li s xy ra.

  • Biu din Queue dng mng C th to mt hng i bng cch s dng mt mng 1 chiu vi kch thc ti a l N (v d, N=1000) theo kiu xoay vng (coi phn t an-1 k vi phn t a0) Hng i cha ti a N phn t. Phn t u hng i (front element) s c ch s f. Phn t cui hng i (rear element) s c ch s r .

  • Biu din Queue dng mng Dng mt array: C xu hng di v cui arrayHai cch hin thc u tin:Khi ly mt phn t ra th ng thi di hng ln mt v tr.

    Ch di hng v u khi cui hng khng cn chBan uLy ra 1 phn t:di tt c v trcThm vo 1 phn tBan uLy ra 1 phn tThm vo 1 phn t: di tt c v trc trng ch thm vo

  • Biu din Queue dng mng khai bo mt hng i, ta cn: mt mng mt chiu Q, hai bin nguyn f, r cho bit ch s ca u v cui ca hng i hng s N cho bit kch thc ti a ca hng i. Ngoi ra, khi dng mng biu din hng i, cn dng mt gi tr c bit, k hiu l NULLDATA, gn cho nhng cn trng trn hng i. Gi tr ny l mt gi tr nm ngoi min xc nh ca d liu lu trong hng i..

  • Biu din Queue dng mng Trng thi hng i lc bnh thng:

    Trng thi hng i lc xoay vng:

  • Biu din Queue dng mng Hng i c th c khai bo c th nh sau:typedef struct node{ int data;};typedef struct queue{ intfront, rear;node list[N];};Do khi ci t bng mng mt chiu, hng i c kch thc ti a nn cn xy dng thm mt thao tc ph cho hng i:Full(): Kim tra xem hng i c y cha.

  • Biu din Queue dng mng To hng i rng void Init(queue &q){q.front = q.rear = 0;}Kim tra queue rngint Empty(queue q){if(q.front == q.rear == 0) return 1;return 0;}

  • Biu din Queue dng mng Kim tra hng i y hay khngint Full(queue q){ if( q.front== 0 && q.rear== N-1) return 1;if( q.front == q.rear+1) return 1;return 0;}

  • Biu din Queue dng mng Thm mt phn t x vo cui hng i Q voidEnQueue(queue &q, node x){if(!Full(q)) //Queue cha y{if(Empty(q)// Queue rngq.front=q.rear=0;elseif( q.rear==N-1) q.rear=0;else q.rear++;q.list[q.rear]=x;}}

  • Biu din Queue dng mng Trch, hu phn t u hng i Q nodeDeQueue(queue &q){if(!Empty(q)) {node t=q.list[q.front];if(q.front == q.rear) Init(q);else if(q.fornt == N -1)q.front = 0;else q.front++;return t;}}

  • Biu din hng i dng danh sch lin kt C th to mt hng i s dng mt DSLK n. Phn t u DSKL (head) s l phn t u hng i, phn t cui DSKL (tail) s l phn t cui hng i.

  • Biu din hng i dng danh sch lin kt typedef struct node{int data;node *link;};typedef struct queue{node *front, *rear;};

  • To hng i rng: void Init(queue &q){q.front=q.rear= NULL; }

    Kim tra hng i rng : int Empty(queue &q){ if (q.front == NULL) return 1; // hng i rngelse return 0;}

  • Thm mt phn t p vo cui hng i void EnQueue(queue &q, node *new_ele){if(q.front == NULL){q.front=new_ele;q.rear=new_ele;}else{q.rear->link=new_ele;q.rear=new_ele;}}

  • Biu din hng i dng danh sch lin kt Trch phn t u hng i node* DeQueue(queue &q){if (!Empty(q)){node *p=q.front;q.front=p->link;return p}}

  • Biu din hng i dng danh sch lin kt Nhn xt:Cc thao tc trn hng i biu din bng danh sch lin kt lm vic vi chi ph O(1). Nu khng qun l phn t cui xu, thao tc Dequeue s c phc tp O(n).

  • ng dng ca hng i Hng i c th c s dng trong mt s bi ton:Bi ton sn xut v tiu th (ng dng trong cc h iu hnh song song).B m (v d: Nhn phm B m CPU x l).X l cc lnh trong my tnh (ng dng trong HH, trnh bin dch), hng i cc tin trnh ch c x l, .

  • ng dng STACK kh quy cho bi ton thp H Ni

  • Bi ton Thp H niLut:Di chuyn mi ln mt aKhng c t a ln ln trn a nh

  • Bi ton Thp H ni Thit k hmHm qui:Chuyn (count-1) a trn nh ca ct start sang ct tempChuyn 1 a (cui cng) ca ct start sang ct finishChuyn count-1 a t ct temp sang ct finish

  • Bi ton Thp H ni M C++void move(int n, char start, char finish, char temp) { if (n > 0) { move(n 1, start, temp, finish); cout