Danh Sach Lien Ket

Embed Size (px)

DESCRIPTION

 

Citation preview

  • 1. Chng 2 DANH SCH LIN KT

2. Mc tiu

  • Gii 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 .

3. Kiu d liu tnh

  • Khi nim:Mt s i tng d liu khng thay thay i c kch thc ,cu trc , trong sut qua 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 .

4. V d thc t

  • M t ,qun l mt i tng con ngi cn th hin cc thng tin ti thiu nh:
    • H tn
    • S CMND
    • Thng tin v cha ,m

5. V d thc t

  • Vic biu din mt i tng c nhiu thnh phn thng tin nh trn c th s dng kiu bn ghi .Tuy nhin ,cn lu cha ,m ca mt ngi cng l cc i tng kiu NGUOI ,do vy v nguyn tc cn phi c nh ngha nh sau :
    • typedef struct NGUOI
    • {
    • char Hoten [30];
    • int So _ CMND;
    • NGUOI Cha , Me ;
    • };
  • Nhng vi khai bo trn ,cc ngn ng lp trnh gp kh khn trong vic ci t khng vt qua c nh xc nh kch thc ca i tng kiu NGUOI?

6. CTDL tnh Mt s hn ch

  • Mt 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 .

7. Hng gii quyt

  • Cn 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 .

8. 9. 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:
  • int a ; //a ,b l cc bin khng ng
  • char b [10];

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 .

11. 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 .

12. 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

13. 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 byte
    • new //ton t cp pht b nh trong C ++
  • Hm free ( p )hu vng nh cp pht bi hm malloc hoc calloc do p tr ti
  • Ton t delete p hu vng nh cp pht bi ton t new do p tr ti

14. Bin ng V d

    • int*p1, *p2;
    • //cp pht vng nh cho1bin ng kiu int
    • p1 = ( int *) malloc ( sizeof ( int ));
    • *p1 = 5; //t gi tr5cho bin ng ang c p 1qun l
    • //cp pht bin ng kiu mng gm10phn t kiu int
    • p2 = ( int *) calloc (10,sizeof ( int ));
    • *(p2+3) = 0;//t gi tr0cho phn t th4ca mng p 2
    • free (p1);
    • free (p2);

15. Kiu d liu Con tr

  • Kiu 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 .

16. Con tr Khai bo

  • C php nh ngha mt kiu con tr trong ngn ng C:
  • typedef < kiu c s > * ;
  • V d:
  • typedef int * intpointer ;
  • intpointer p ;
  • hoc
  • int * p ; l nhng khai bo hp l .

17. Con tr Thao tc cn bn

  • Cc thao tc c bn trn kiu con tr :( minh ha bng C )
    • Khi1bin 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= < a ch >;
  • v du :
  • inti,* p;
  • p=&i;
    • Truy xut ni dung ca i tng do p tr n(* p )

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

19. 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,

20. 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.

21.

    • 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 ) 22. 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 :

A B X Z Y A B C D 23. Danh sch lin kt( List )

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

A B X Z Y A B C D 24.

  • Moi phan t cua danh sach lien ket moi node gom 2 thanh phan
    • Thanh phan d lieu : lu tr cac thong tin ve ban than phan t .
    • Thanh phan moi lien ket : lu tra ch cua phan t ke tiep trong danh sach, hoac lu tr gia tr NULL neu la phan t cuoi danh sach.
    • typedef struct NODE
    • {
    • int data;//Data l kiu nh ngha trc
    • NODE * link;// con tr ch n cu trc NODE
    • };

Cu trc d liu ca DSLK n 25. Cu trc d liu ca DSLK n

  • V d : Ta c danh sch theo dng bng sau

Ta c danh sch lin kt l : Joe Marta Bill Koch - Sahra 230 31 Koch 500 NULL 25 Sahra 230 110 27 Marta 140 500 42 Bill 110 140 20 Joe 100 Link Age Name Address 26. T chc ,qun l

  • qun l mt xu n ch cn bit a ch phn t u xu .
  • Con tr Head s c dng lu tr a ch phn t u xu ,ta gi Head 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;

A B X Z Y first last 27.

  • Khai bo kiu ca1phn 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 sch
    • typedef struct NODE
    • {
    • int data;
    • NODE*link;
    • };
    • typedef struct LIST//kiu danh sch lin kt
    • {
    • NODE * first;
    • NODE * last;
    • };
    • Trong thc t bindatal mt kiustruct

T chc ,qun l 28.

  • Th 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 t
    • p = ( NODE*)malloc(sizeof(NODE)) ;
    • if(p== NULL )
    • {
    • printf (" Khng b nh "); exit(1);
    • }
    • p->data = x;//Gn thng tin cho phn t p
    • p->link =NULL ;
    • returnp;
    • }

To mt phn t 29.

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

To mt phn t 30.

  • To danh sch rng
  • Thm mt phn t vo danh sch
  • Tm kim mt gi tr trn danh sch
  • Trch mt phn t ra khi danh sch
  • Duyt danh sch
  • Hy ton b danh sch

Cc thao tc c s 31.

  • void Init ( LIST&l)
  • {
  • l.first = l.last = NULL;
  • }

Khi to danh sch rng first last 32.

  • C 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 33. Thm mt phn tfirst last new_ele X 34. Thm mt phn t vo u B C D E first last new_ele A X 35.

  • Moi phan t cua danh sach lien ket moi node gom 2 thanh phan
    • Thanh phan d lieu : lu tr cac thong tin ve ban than phan t .
    • Thanh phan moi lien ket : lu tra ch cua phan t ke tiep trong danh sach, hoac lu tr gia tr NULL neu la phan t cuoi danh sach.
    • typedef int KieuDL;
    • typedef struct NUT
    • {
    • KieuDL duLieu;//duLieu l kiu nh ngha trc
    • NUT * tiep;// con tr ch n cu trc NUT
    • };
    • typedef struct NUT * TRODSLK;

Cu trc d liu ca DSLK n 36. Cu trc d liu ca DSLK n

  • V d : Ta c danh sch theo dng bng sau

Ta c danh sch lin kt l : Joe Marta Bill Koch - Sahra 230 31 Koch 500 NULL 25 Sahra 230 110 27 Marta 140 500 42 Bill 110 140 20 Joe 100 Link Age Name Address 37. T chc ,qun l

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

A B X Z Y dau cuoi 38. void khoiTao ( TRODSLK &dau, TRODSLK &cuoi ) { dau = cuoi = NULL; } Khi to danh sch rng dau cuoi 39.

  • Hm layNut to ra mt phn t cho danh sch vi thng tin cha trong x
    • TRODSLK layNut (KieuDL x)
    • {
    • TRODSLKp;
    • //Cp pht vng nh cho phn t
    • p = ( TRODSLK)malloc(sizeof(NODE)) ;
    • if(p== NULL )
    • {
    • printf (" Khng b nh ");
    • exit(1);
    • }
    • p->duLieu = x;//Gn thng tin cho phn t p
    • p->tiep =NULL ;
    • returnp;
    • }

To mt phn t 40.

  • C 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 41. dau cuoi nutMoi Thm mt phn tx 42. B C D E dau cuoi Thm mt phn t vo u nutMoi A x 43.

  • // vao :danh sch(dau,cuoi ),phn t mi nutMoi
  • // ra :danh sch(dau,cuoi )vi nutMoi u DS
  • Nu Danh sch rng Th
    • dau =nutMoi ;
    • cuoi = dau;
  • Ngc li
    • nutMoi->tiep= dau;
    • dau =nutMoi;

Thm mt phn t vo u 44.

  • voidthemDau(TRODSLK &dau, TRODSLK nutMoi)
  • {
  • if(dau ==NULL )// Xu rng
  • {
  • dau = nutMoi;
  • cuoi= dau;
  • }
  • else
  • {
  • nutMoi->tiep = dau;
  • dau = nutMoi;
  • }
  • }

Thm mt phn t vo u 45. Thm mt phn t vo cui B C D E dau cuoi nutMoi A x 46.

  • // vao :danh sch(dau,cuoi ),phn t mi new _ ele
  • // ra :danh sch(dau,cuoi )vi nutMoi cu i DS
  • Nu Danh sch rng Th
    • dau =nutMoi ;
    • cuoi= dau;
  • Ngc li
    • cuoi->tiep=nutMoi;
    • cuoi =nutMoi;

Thm mt phn t vo cui 47.

    • voidthemCuoi(TRODSLK &dau,TRODSLK &cuoi,
    • TRODSLK nutMoi)
    • {
    • if(dau== NULL )
    • {
    • dau = nutMoi;
    • cuoi = dau;
    • }
    • else
    • {
    • cuoi->tiep = nutMoi;
    • cuoi = nutMoi ;
    • }
    • }

Thm mt phn t vo cui 48. Chn mt phn t sau q B C D E dau cuoi nutMoi q A x 49.

  • // vao :danh sch(dau,cuoi ),q ,phn t mi nutMoi
  • // ra :danh sch(dau,cuoi )vi nutMoi sau q
  • Nu (q!=NULL )th
    • nutMoi-> tiep=q-> tiep
    • q-> tiep =nutMoi;
    • Nu (q==cuoi)th
      • cuoi=nutMoi ;
  • Ngc li
  • Thm nutMoi vo u danh sch

Chn mt phn t sau q 50.

  • void themSauQ ( TRODSLK &dau, TRODSLK &cuoi ,TRODSLKq,TRODSLK nutMoi )
  • {
  • if(q!= NULL&& nutMoi != NULL )
  • {
  • nutMoi->tiep = q->tiep;
  • q->tiep = nutMoi;
  • if (q == cuoi)
  • cuoi = nutMoi;
  • }
  • }

Chn mt phn t sau q 51.

  • Duyt 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 sch 52.

  • Bc1: p= dau;// Cho p tr n phn t u danh sch
  • Bc2:Trong khi ( Danh sch cha ht )thc hin
    • B 21 :X l phn t p ;
    • B 22 :p := p ->tiep; //Cho p tr ti phn t k
    • void xuLyDSLK( TRODSLK &dau, TRODSLK &cuoi)
    • {
    • TRODSLKp ;
    • p=dau ;
    • while( p !=NULL )
    • {
    • xuLy ( p );//x l c th ty ng dng
    • p=p ->tiep;
    • }
    • }

Duyt danh sch 53. In cc phn t trong danh sch

  • voidxuat(TRODSLK dau)
  • {
  • TRODSLKp=dau;
  • while(p!= NULL )
  • {
  • printf (%d,p->duLieu);
  • p=p ->tiep;
  • }
  • printf ( );
  • }

54. Tm kim mt phn t c kha x

  • TRODSLK tim ( TRODSLK dau, KieuDLx)
  • {
  • TRODSLKp=dau;
  • while( p!= NULL)
  • {
  • if (p->duLieu ==x)
  • return p;
  • else p=p->tiep;
  • }
  • returnp;
  • }

55. Xa mt node ca danh sch

  • Xa 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 rngth l.last=NULL
    • Gii phng vng nh m p tr ti

56. Xa mt node ca danh sch B C D E first last p A 57.

  • void 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 rng
  • free (p);
  • }
  • }

Xa mt node ca danh sch 58.

  • Xa node sau node q trong danh sch
  • iu kin c th xa c node sau q l :
    • q phi khc NULL
    • Node sau q phi khc NULL
    • C 3 thao tc
    • Gi p l node sau q
    • Cho vng link ca q tr vo node ng sau p (l l.link)
    • Nu p l phn t cui th l.last tr vo q
    • Gii phng vng nh m p tr ti

Xa mt node ca danh sch 59. Xa node sau node q trong danh sch B C D E first last q p A 60.

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

Xa node sau node q trong danh sch 61.

  • h y 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 :
  • Bc1:Trong khi ( Danh sch cha ht )thc hin
    • B 11:
      • p= first;
      • first=first->link;//Cho p tr ti phn t k
    • B 12:
      • Hy p ;
  • Bc2:
    • last=NULL ; // Bo m tnh nht qun khi xu rng

Hy ton b danh sch 62.

    • 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 63. Sp xp trn danh sch lin kt n 64. Sp xp danh sch

  • Cch tip cn :
    • Phng n1:Hon v ni dung cc phn t trong danh sch( thao tc trn vng Info ).
    • Phng n2 :Thay i cc mi lin kt( thao tc trn vng Next )

65. Sp xp danh sch Hon v ni dung cc phn t trong danh sch

  • Ci t li trn xu mt trong nhng thut ton sp xp bit trn mng
  • im khc bit duy nht l cch thc truy xut n cc phn t trn xu 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 Info kch thc nh .
  • Khi kch thc ca trng Info ln ,vic hon v gi tr ca hai phn t s chim chi ph ng k .
  • Khng tn dng c cc u im ca xu !

66. Hon v ni dung cc phn t

  • void ListSelectionSort( LIST&l)
  • { NODE *min, *p,*q;
  • p = l.pHead;
  • while (p != l.last) {
  • q = p->link; min = p;
  • while (q !=NULL ) {
  • if (q->data < min->data )
  • min = q; //ghi nhn v tr phn t min hin hnh
  • q = q->link;
  • }
  • Swap (min->data, p->data);
  • p = p->link;
  • }
  • }

67. 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( pNext ).
  • Kch thc ca trng pNext :
    • Khng ph thuc vo bn cht d liu lu trong xu
    • Bng kch thc1con tr(2hoc4byte trong mi trng16bit , 4hoc8byte trong mi trng32bit )
  • 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 n1hoc mt thut ton hiu qu no .

68. Slist 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( pNext ).
  • Kch thc ca trng pNext :
    • Khng ph thuc vo bn cht d liu lu trong xu
    • Bng kch thc1con tr(2hoc4byte trong mi trng16bit , 4hoc8byte trong mi trng32bit )
  • 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 n1hoc mt thut ton hiu qu no .

69. SList Quick Sort :Thut ton

  • // input :xu(first,last )
  • // output :xu c sp tng dn
  • Bc1:Nu xu c t hn2phn t
  • Dng ; // xu c th t
  • Bc2:Chn X l phn t u xu L lm ngng .Trch X ra khi L .
  • Bc3:Tch xu L ra lm2xu L 1( gm cc phn t nh hn hay bng X )v L 2( gm cc phn t ln hn X ).
  • Bc4:Sp xp Quick Sort( L 1 ).
  • Bc5:Sp xp Quick Sort( L 2 ).
  • Bc6:Ni L 1 ,X ,v L 2 li theo trnh t ta c xu L c sp xp .

70. SList Sp xp quick sort first 6 8 2 4 5 1 71. SList quick sort :phn hoch first X Chn phn t u xu lm ngng 6 8 2 4 5 1 72. SList quick sort :phn hoch first 6 8 2 4 5 1 X Tch xu hin hnh thnh2xu first1 first2 73. SList quick sort :phn hoch first 6 8 2 4 5 1 X Tch xu hin hnh thnh2xu first1 first2 74. SList quick sort :phn hoch first 6 8 2 4 5 1 X Tch xu hin hnh thnh2xu first1 first2 75. SList quick sort :phn hoch first 6 8 2 4 5 1 X Tch xu hin hnh thnh2xu first1 first2 76. SList quick sort first 6 8 2 4 5 1 X Sp xp cc xul1, l2 first1 first2 77. SList quick sort first 6 8 2 4 5 1 X Ni l1, X, l2 first1 first2 a kt qu vofirst 78.

  • void SListAppend ( 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);
  • }

SList Ni2danh sch 79.

  • void SListQSort ( SLIST&l) {
  • NODE*X, *p;
  • SLISTl1, 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);
  • else AddFirst (l2, p);
  • }
  • SListQSort (l1); SListQSort (l2);
  • SListAppend (l, l1);
  • AddFirst (l, X);
  • SListAppend (l, l2);
  • }

80.

  • Nhn xt :
    • Quick sort trn xu n n gin hn phin bn ca n trn mng mt chiu
    • Khi 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 .

SList Quick sort :nhn xt 81. Danh sch hn ch

  • Stack ( Chng )
  • Hng i(Queue )

82. Stack ( Chng ) 83. Stack ( Chng )

  • Stack 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 thm1i tng vo stack
  • Pop :Thao tc ly1i 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 ,

84. Stack ( Chng )

  • Stack l mt CTDL tru tng( ADT )tuyn tnh h tr2thao tc chnh :
    • Push ( o ): Thm i tng o vo u stack
    • Pop (): 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 :
    • Empty ():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 .

85. Biu din Stack dng mng

  • C th to mt stack bng cch khai bo mt mng1chiu vi kch thc ti a l N( v d :N=1000).
  • Stack c th cha ti a N phn t nh s t0n N -1.
  • Phn t nm u stack s c ch s t( lc trong stack ang cha t +1phn t )
  • khai bo mt stack ,ta cn mt mng1chiu 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 ;

86. Biu din Stack dng mng

  • Lnh t= 0s 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 mng1chiu ,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 .

87. Khai bao stack

  • typedef structnode
  • {
  • intdata;
  • };
  • typedef structstack
  • {
  • inttop;
  • nodelist[N];
  • };

88.

  • void Init ( stack&s)
  • {
  • s.top=UNDERFLOW;//nhan gia tr -1
  • }

Biu din Stack dng mng 89. Biu din Stack dng mng

  • Kim tra stack rng hay khng
    • int Empty (stack s)
    • {
    • returns.top=UNDERFLOW ? 1 : 0;
    • }
  • Kim tra stack y hay khng
    • int Full (stack s)
    • {
    • returns.top = N-1 ? 1 : 0;
    • }

90. 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;
    • }
  • Trch thng tin v hu phn tnh stack S
    • node Pop (stack &s)
    • {
    • if (! Empty (s))//stack khc rng
    • returns.list[s.top--];
    • }

91. 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 .

92. Biu din Stack dng danh sch lin kt

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

93. Khai bao stack typedef structnode { intdata; node *link; }; typedef structstack { node*top; }; 94. Biu din Stack dng danh sch lin kt

  • Khi tao stack
  • voidInit ( stack&top)
  • {
  • top=NULL;
  • }
  • Kim tra stack rng:
    • intEmpty ( stacktop)
    • {
    • returntop ==NULL ? 1 : 0; //stack rng
    • }

95. Biu din Stack dng danh sch lin kt

  • Thm mt phn t x vo stack S
    • void Push ( stack&top,nodex)
    • {
    • stackp;
    • p=( node* ) malloc ( sizeof (node));
    • if (p!=NULL)
    • {
    • p->data=x.data;
    • p->link=top;
    • top=p;
    • }
    • }

96. Biu din Stackdng danh sch lin kt

  • Trch thng tin v hu phn t nh stack S
    • Int Pop ( stack&top)
    • {
    • if (! Empty (top))
    • {
    • stackp=top;
    • returnp->data;
    • top=p->link;
    • free (p);
    • }
    • }

97. ng dng ca Stack

  • Stack thch hp lu tr cc loi d liu m trnh t truy xut ngc vi trnh t lu tr
  • Mt 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
    • ...

98. 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 )div2];
  • 3. Phn hoch( l , r )thnh( l 1, r 1)v( l 2, r 2)bng cch xt :
    • y thuc( l 1, r 1)nu y x ;
    • y thuc( l 2, r 2)ngc li ;
  • 4. Nu phn hoch( l 2, r 2)c nhiu hn1phn t thc hin :
    • Ct( l 2, r 2)vo Stack ;
    • Nu( l 1, r 1)c nhiu hn1phn t thc hin :
      • l = l 1;
      • r = r 1;
      • Goto2;
    • Ngc li
      • Ly( l , r )ra khi Stack nu Stack khc rng v Goto2;
      • Nu khng dng ;

99. Hng i(Queue ) 100. 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 .
  • Enqueue : Thao tc thm mt i tng vo hng i
  • Dequeue : Thao tc ly mt i tng ra khi hng i .

101. Hng i(Queue )

  • Vic thm mt i tng vo hng i lun din ra cui hng i v mt phn t lun c ly ra t u hng i .
  • 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 ,

102. Hng i(Queue )

  • Hng i l mt CTDL tru tng( ADT )tuyn tnh
  • Hng i h tr cc thao tc :
    • EnQueue ( o ): Thm i tng o vo cui hng i
    • DeQueue ():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 .

103. Biu din Queue dng mng

  • C th to mt hng i bng cch s dng mt mng1chiu vi kch thc ti a l N( v d ,N =1000)theo kiu xoay vng( coi phn t an -1 k vi phn t a 0 ) 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.

104. 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 ..

105. Biu din Queue dng mng

  • Trng thi hng i lc bnh thng :
  • Trng thi hng i lc xoay vng :

106. Biu din Queue dng mng

  • Hng i c th c khai bo c th nh sau :
    • typedef structnode
    • {
    • intdata ;
    • }
    • typedef structqueue
    • {
    • int front ,rear ;
    • nodelist[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 .

107. Biu din Queue dng mng

  • To hng i rng
    • voidInit (queue &q)
    • {
    • q.front = q.rear = UNDERFLOW;
    • }
  • Kim tra queue rng
  • int Empty (queue q)
  • {
  • if(q.front == q.rear == UNDERFLOW) return 1;
  • return 0;
  • }

108. Biu din Queue dng mng

  • Kim tra hng i y hay khng
    • int Full (queue q)
    • {
    • if ( q.front== 0 && q.rear== N-1)return1;
    • if ( q.front == q.rear+1)return1;
    • return0;
    • }

109. Biu din Queue dng mng

  • Thm mt phn t x vo cui hng i Q
    • void EnQueue ( queue&q,nodex)
    • {
    • if (! Full (q))// Queue cha y
    • {
    • if ( Empty (q) // Queue rng
    • q.front=q.rear=0;
    • else
    • if ( q.rear==N-1) q.rear=0;
    • elseq.rear++;
    • q.list[q.rear]=x;
    • }
    • }

110. Biu din Queue dng mng

  • Trch ,hu phn tu hng i Q
    • node DeQueue (queue &q)
    • {
    • if (! Empty (q))
    • {
    • nodet=q.list[q.front];
    • if (q.front == q.rear)Init (q);
    • else
    • if (q.fornt == N -1) q.front = 0;
    • elseq.front++;
    • returnt;
    • }
    • }

111. 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 .

a 1 a 2 a N-2 a n-1 au hang Cuoi hang a 0 112.

  • typedef structnode
  • {
  • intdata;
  • node*link;
  • };
  • typedef structqueue
  • {
  • node*front, *rear;
  • };

Biu din hng idng danh sch lin kt 113. Biu din hng i dng danh sch lin kt

  • To hng i rng :
    • voidInit (queue &q)
    • {
    • q.front=q.rear=NULL ;
    • }
  • Kim tra hng i rng:
    • int Empty (queue &q)
    • {
    • if(q.front ==NULL )return1;//hng i rng
    • elsereturn0;
    • }

114. Biu din hng i dng danh sch lin kt

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

115.

  • Trch phn tu hng i
    • node *DeQueue ( queue&q)
    • {
    • if(! Empty (q))
    • {
    • node*p=q.front;
    • q.front=p->link;
    • returnp
    • }
    • }

Biu din hng idng danh sch lin kt 116. 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 ).

117. 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 , .

118. ng dng STACK kh quy cho bi ton thp H Ni 119. Bi ton Thp H ni

  • Lut:
    • Di chuyn mi ln mt a
    • Khng c t a ln ln trn a nh

120. Bi ton Thp H ni Thit k hm

  • Hm qui:
    • Chuyn (count-1) a trn nh ca ct start sang ct temp
    • Chuyn 1 a (cui cng) ca ct start sang ct finish
    • Chuyn count-1 a t ct temp sang ct finish

magic 121. Bi ton Thp H ni M C++

    • voidmove( intn, char start, char finish, char temp)
    • {
    • if(n > 0)
    • {
    • move(n 1, start, temp, finish);
    • cout