danh sách liên kết Đơn

Upload: trung

Post on 07-Jul-2018

246 views

Category:

Documents


1 download

TRANSCRIPT

  • 8/18/2019 Danh Sách Liên Kết Đơn

    1/32

    danh sách liên kết đơnMỗi phần tử liên kết với phần tử đứng liền sau trong danh sách

    Mỗi phần tử trong danh sách liên kết đơn là mt c!u tr"c c# hai thành phần

    $hành phần d% li&u' ()u tr% th*ng tin về +,n th-n phần tử 

    $hành phần liên kết' ()u đ.a ch/ phần tử đứng sau trong danh sách ho0c +1ng 23(( nếu là phần tử

    cu4i danh sách5

    6!u tr"c d% li&u c7a 8 n"t trong (ist đơn

    t9p:d:; struct tag2od:

    < =ata >n;o? @@ ()u th*ng tin +,n th-n

      struct tag2od: Ap2:Bt? @@()u đ.a ch/ c7a 2od: đứng sau

    C2od:?

    6!u tr"c d% li&u c7a =D(E đơn

    t9p:d:; struct tag(ist

    < 2od: ApF:ad?@@()u đ.a ch/ 2od: đầu tiên trong (ist

      2od: Ap$ail? @@()u đ.a ch/ c7a 2od: cu4i cGng trong (ist

    C(>D$? @@ kiHu danh sách liên kết đơn

    Acác thao tác cơ +,n trên danh sách liên kết

    $Io 8 danh sách liên kết đơn rỗng

    $Io 8 n"t c# tr)Jng >n;or +1ng B

    $Km mt phần tử c# >n;o +1ng B

    $hêm mt phần tử c# kh#a B vào danh sách

    F79 mt phần tử trong danh sách

    =u9&t danh sách

    DLp Bếp danh sách liên kết đơn

    Akhi tIo danh sách liên kết

    N.a ch/ c7a n"t đầu tiênO đ.a ch/ c7a n"t cu4i cGng đều kh*ng c#

      void 6r:at:(istP(ist QlR<

    l5pF:adS23((?

      l5p$ailS23((?

      C

    AtIo 8 phần tử mới

    Fàm tr, về đ.a ch/ phần tử mới tIo

    2od:A 6r:at:2od:P=ata BR @@ trong +ài hTc là int

    < 2od: Ap?

      p S n:U 2od:?@@6!p phát vGng nhớ cho phần tử 

      i; P pSS23((R :BitP8R?

    p VW>n;o S B? @@gán d%a li&u cho n"t

      pVWp2:Bt S 23((?  r:turn p?

    C

    Athêm 8 phần tử vào sánh sách liên kết

    2gu9ên tLc thêm' Ehi thêm 8 phần tử vào (ist thK c# làm cho pF:adO p$ail tha9 đXiY

    6ác v. trZ cần thêm 8 phần tử vào (ist'

    [R$hêm vào đầu (ist đơn

    $hêm n"t p vào đầu danh sách liên kết đơn

    http://www.laptrinh321.net/2015/04/danh-sach-lien-ket-on.htmlhttp://www.laptrinh321.net/2015/04/danh-sach-lien-ket-on.html

  • 8/18/2019 Danh Sách Liên Kết Đơn

    2/32

      \Lt đầu'

      2ếu (ist rỗng thK

      [ pF:ad S p?

      [ p$ail S pF:ad?

      2g)]c lIi

      [ pVWp2:Bt S pF:ad?

      [ pF:ad S pvoid ^ddF:adP(>D$ QlO 2od:A pR

    <

      i; Pl5pF:adSS23((R

    <

    l5pF:ad S p?

    l5p$ail S l5pF:ad?

    C

      :ls:

      <

    pVWp2:Bt S l5pF:ad?

      l5pF:ad S p?

    C

    C

    [R$hêm vào cu4i (ist

    $a cần thêm n"t p vào cu4i list đơn

      \Lt đầu'

      2ếu (ist rỗng thK

      [ pF:ad S p?

      [ p$ail S pF:ad?

      2g)]c lIi

      [ p$ailVWp2:BtSp?

      [ p$ailSp  void ^dd$ailP(>D$ QlO 2od: ApR

      <

      i; Pl5pF:adSS23((R

    <

    l5pF:ad S p?

    l5p$ail S l5pF:ad?

    C

      :ls:

      <

    l5p$ailVW2:Bt S p?

    l5p$ail S p?

    C  C

    [R$hêm vào sau 8 phần tử _ trong list

    $a cần thêm n"t p vào sau n"t _ trong list đơn

      \Lt đầu'

      2ếu P_`S23((R thK

      \8' pVWp2:Bt S _VWp2:Bt

      \'

  • 8/18/2019 Danh Sách Liên Kết Đơn

    3/32

      [ _VWp2:Bt S p

      [ nếu _ S p$ail thK

      p$ailSp

      void >ns:rt^;t:rbP(ist QlO 2od: ApO 2od: A_R

      <

      i;P_`S23((R  <

      pVWp2:BtS_VW2:Bt?

      _VWp2:BtSp?

      i;Pl5p$ailSS_R

    l5$ailSp?

      C

      :ls:

      ^ddF:adPlOpR?@@ thêm _ vào đầu list

    C

    Ah79 phần tử trong sanh sách liên kết

    2gu9ên tLc' h,i c* lp phần tử cần h79 tr)ớc h795

    6ác v. tr. cần h79

    F79 phần tử đứng đầu (ist

    F79 phần tử c# khoá +1ng B

    Fue phần tử đứng sau _ trong danh sách liên kết đơn

    f phần trênO các phần tử trong =D(E đơn đ)]c c!p phát vGng nhớ đng +1ng hàm n:UO thK s đ)]c

    gi,i ph#ng vGng nhớ +1ng hàm d:l:t:5

     \Lt đầu'

    2ếu PpF:ad`S23((R thK

    \8' pSpF:ad

    \'

    [ pF:ad S pF:adVWp2:Bt[ d:l:t: PpR

    \'

     2ếu pF:adSS23(( thK p$ailS23((

    F79 đ)]c hàm tr, về 8O ng)]c lIi hàm tr, về

      int j:mov:F:adP(ist QlO int QBR

      < 2od: Ap?

      i;Pl5pF:ad`S23((R

      < pSl5pF:ad?

    BSpVW>n;o? @@l)u =ata c7a n"t cần h79

    l5pF:adSl5pF:adVWp2:Bt?

      d:l:t: p?  i;Pl5pF:adSS23((R

      l5p$ailS23((?

      r:turn 8?

      C

      r:turn ?

      C

    F79 phần tử sau phần tử _ trong (ist

    \Lt đầu

  • 8/18/2019 Danh Sách Liên Kết Đơn

    4/32

    2ếu P_`S23((R thK @@_ tn tIi trong (ist

    \8' pS_VWp2:Bt?@@ p là phần tử cần h79

    \' 2ếu Pp`S23((R thK @@ _ kh*ng ph,i là phần tử cu4i

      [ _VWp2:BtSpVWp2:Bt?@@ tách p ra khi B-u

      [ nếu PpSS p$ailR @@ n"t cần h79 là n"t cu4i

      p$ailS_?

      [ d:l:t: p?@@ h79 p 

    int j:mov:^;t:rbP(ist QlO 2od: A_O int QBR

      < 2od: Ap?

      i;P_`S23((R

      < pS_VWp2:Bt? @@p là n"t cần Boá

      i;Pp`S23((R @@ _ kh*ng phài là n"t cu4i

      < i;PpSSl5p$ailR @@n"t cần Boá là n"t cu4i cGng

    l5p$ailS_?@@ cp nht lI p$ail

      _VWp2:BtSpVWp2:Bt? BSpVW>n;o?

      d:l:t: p?

      C

      r:turn 8?

      C

      :ls:

    r:turn ? C

    $hut toán h79 phần tử c# khoá B

    \)ớc 8'

      $Km phần tử p c# khoá +1ng BO và _ đứng tr)ớc p

    \)ớc '

      2ếu Pp`S23((R thK @@tKm th!9 phần tử c# khoá +1ng B

      F79 p ra khi (ist +1ng cách h79 phần tử đứng sau _

      2g)]c lIi

      \áo kh*ng tKm th!9 phần tử c# khoáint j:mov:P(ist QlO int BR

    < 2od: ApOA_ S 23((? pSl5F:ad?

      Uhil:PPp`S23((RQQPpVW>n;o`SBRR @@tKm

      < _Sp?

      pSpVW2:Bt?

      C

      i;PpSS23((R @@kh*ng tKm th!9 phần tử c# khoá +1ng B

      r:turn ?

      i;P_`S23((R@@tKm th!9 phần tử c# khoá +1ng B

      =:l:t:^;t:rbPlO_OBR?

      :ls: @@phần tử cần Boá n1m đầu (ist

    j:mov:F:adPlOBR?  r:turn 8?

    C

    Fàm tKm 8 phần tử trong =D(E đơn

      Fàm tKm phần tử c# >n;o S BO hàm tr, về đ.a ch/ c7a n"t c# >n;o S BO ng)]c lIi hàm tr, về 23((

    2od: AD:archP(>D$ lO =ata BR

    <

    2od: Ap?

      p S l5pF:ad?

  • 8/18/2019 Danh Sách Liên Kết Đơn

    5/32

      Uhil:PPp`S 23((RQQPpVW>n;o `S BRR

    p S pVWp2:Bt?

      r:turn p?

    C

    =u9&t danh sách

    =u9&t danh sách là thao tác th)Jng đ)]c thc hi&n khi c# nhu cầu cần Bử l các phần tử trong danh

    sách nh)'Nếm các phần tử trong danh sách

    $Km t!t c, các phần tử trong danh sách th,o điều ki&n

    F79 toàn + danh sách

    \)ớc 8'

    p S pF:ad?@@ p l)u đ.a ch/ c7a phần tử đầu trong (ist

    \)ớc '

    $rong khi Pdanh sách ch)a hếtR thc hi&n

      [ Bử l phần tử p

      [ pSpVWp2:Bt?@@ _ua phần tử kế 

      void rint(istP(ist lR

      <

      2od: Ap?

      pSl5pF:ad?

      Uhil:Pp`S23((R

      < print;Pqd O pVW>n;oR?

      pSpVWp2:Bt?

      C

      C

    F79 danh sách liên kết đơn

    \)ớc 8'

    $rong khi Pdanh sách ch)a hếtR thc hi&n\88'

      p S pF:ad?

      pF:ad S pF:adVWp2:Bt?@@ cp nht pF:ad

    \8'

    F79 p

    \)ớc '

      p$ail S 23((?@@ +,o toàn tZnh nh!t _uán khi B-u rỗng

      void j:mov:(istP(ist QlR

      <

    2od: Ap?

      Uhil:Pl5pF:ad`S23((R@@cn phần tử trong (ist  <

      p S l5pF:ad?

      l5pF:ad S pVWp2:Bt?

      d:l:t: p?

      C

      C

    DLp Bếp danh sách

    6# hai cách tiếp cn

  • 8/18/2019 Danh Sách Liên Kết Đơn

    6/32

    6ách 8' $ha9 đXi thành phần >n;o

    6ách ' $ha9 đXi thành phần p2:Bt Ptha9 đXi trKnh t m#c n4i c7a các phần tử sao cho tIo lp nên

    đ)]c thứ t mong mu4nR

    $ha9 đXi thành phần >n;o Pd% li&uR

    u' 6ài đ0t đơn gi,nO t)ơng t nh) sLp Bếp m,ng

    2h)]c'Ni hi thêm vGng nhớ khi hoán v. ni dung c7a phần tử VW ch/ phG h]p với nh%ng B-u c# kZch

    th)ớc >n;o nh

    Ehi kZch th)ớc >n;o Pd% li&uR lớn chi phZ cho vi&c hoán v. thành phần >n;o lớn

    (àm cho thao tác sLp Bếp chm

    $ha9 đXi thành phần p2:Bt

    u'

    EZch th)ớc c7a tr)Jng nà9 kh*ng tha9 đXiO do đ# kh*ng ph thuc vào kZch th)ớc +,n ch!t d% li&u

    l)u tIi mỗi n"t5

    $hao tác sLp Bếp nhanh

    2h)]c' 6ài đ0t phức tIp

    void D:l:ctionDortP(>D$ QlR

    <

      2od: ApOA_OAmin?

      pSl5pF:ad?

      Uhil:Pp`Sl5p$ailR

      <

      minSp?

      _SpVWp2:Bt?

      VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV

      Uhil:P_`S23((R

      <

    i;P_VW>n;opVW>n;oR

      minS_?  _S_VWp2:Bt?

      C

      FwPminVW>n;oOpVW>n;oR?

      pSpVWp2:Bt?

      C

      C

      6ác thut toán sLp Bếp hi&u _u, trên (ist

    6ác thut toán sLp Bếp B-u P(istR +1ng các tha9 đXi thành phần p2:Bt Pthành phần liên kếtR c# hi&u

    _u, cao nh)'

    $hut toán sLp Bếp buick Dort

    $hut toán sLp Bếp M:rg: Dort$hut toán sLp Bếp jadiB Dort

    $hut toán sLp Bếp buick Dort

    \)ớc 8'

    6hTn là phần tử đầu B-u ( làm phần tử cầm canh

    (oIi ra khi (

    \)ớc '

    $ách B-u ( ra làm B-u (8Pgm các phần tử nh hơn ho0c +1ng BR và ( Pgm các phần tử lớn hơn

  • 8/18/2019 Danh Sách Liên Kết Đơn

    7/32

    R

    \)ớc ' 2ếu P(8 `S23((R thK buickDortP(8R

    \)ớc x' 2ếu P(`S23((R thK buickDortP(R

    \)ớc y' 24i (8O O ( lIi th:o thứ t ta c# B-u ( đz đ)]c sLp Bếp

    DLp Bếp (8

    DLp Bếp (

    6hTn BS{ cầm canhO và tách ( thành (8 và (void buickDortP(ist QlR

    < 2od: ApOA?@@ l)u đ.a ch/ c7a phần tử cầm canh

      (ist l8Ol?

      i;Pl5pF:adSSl5p$ailR r:turn?@@đz c# thứ t 

      6r:at:(istPl8R?

      6r:at:(istPlR?

      Sl5pF:ad?

      l5pF:adSVWp2:Bt?

      Uhil:Pl5pF:ad`S23((R@@tách ( S (8 va (

      < pSl5pF:ad?

      l5pF:adSpVWp2:Bt?

      pVWp2:BtS23((?

      i;PpVW>n;oSVW>n;oR

      ^ddF:adPl8OpR?

      :ls:

      ^ddF:adPlOpR?

      C

      buickDortPl8R?@@|Ti đ& _u9 sLp Bếp (8

      buickDortPlR?@@|Ti đ& _u9 sLp Bếp (

      i;Pl85pF:ad`S23((R@@n4i l8O l va vao l

      <

      l5pF:adSl85pF:ad?

      l85p$ailVWp2:BtS?@@n4i vào  C

      :ls:

      l5pF:adS?

      VWp2:BtSl5pF:ad?

      i;Pl5pF:ad`S23((R @@l c# trên mt phần tử 

      l5p$ailSl5p$ail?

      :ls: @@l kh*ng c# phần tử nào

    l5p$ailS?

    C

    $hut t4n sLp Bếp M:rg: Dort\)ớc 8' h-n ph4i lu-n phiên t}ng đ)Jng chI9 c7a B-u ( vào B-u con (8 và (5

    \)ớc ' 2ếu (8 `S 23(( thK M:rg: Dort P(8R5

    \)ớc ' 2ếu ( `S 23(( thK M:rg: Dort P(R5

    \)ớc x' $rn (8 và ( đz sLp Bếp lIi ta c# B-u ( đz đ)]c sLp Bếp5

    Eh*ng t4n thêm kh*ng gian l)u tr% cho các dz9 ph

    6ài đ0t hàm mainPR

  • 8/18/2019 Danh Sách Liên Kết Đơn

    8/32

    ~êu cầu' wiết ch)ơng trKnh thành lp 8 B-u đơnO trong đ# thành phần d% li&u c7a mỗi n"t là 8 s4

    ngu9ên d)ơng5

    (i&t kê t!t thành phần d% li&u c7a t!t c, các n"t trong B-u

    $Km 8 phần tử c# khoá +1ng B trong B-u5

    oá 8 phần tử đầu B-u

    oá 8 phần tử c# khoá +1ng B trong B-u

    DLp Bếp B-u t•ng dần th:o thành phần d% li&u P>n;oR6h€n 8 phần tử vào B-uO sao cho sau khi ch€n B-u vn t•ng dần th:o tr)Jng d% li&u

    55vv

      void mainPR

      < (>D$ l8? 2od: Ap? int B?

      6r:at:(istPl8R?

      do<

      print;Pnhap BSR? scan;PqdOQBR?

      i;PBWR

    < p S 6r:at:2od:PBR?

      ^ddF:adPl8OBR?

      C

    CUhil:PBWR?

      print;P=anh sách mới thành lp là‚nR?

      rint(istPl8R?

      print;Pnhp B cần tKm BSR? scan;PqdOQBR?

     

    p S D:archPl8OBR?

      i;PpSS23((R print;Pkh*ng tKm th!9R?

      :ls: print;PtKm th!9R?

    j:mov:F:adPl8OBR?

      print;Pdanh sách sau khi B#a‚nR?

      rint(istPl8R?

      print;Pnhp khoá cần Boá‚nR?  scan;PqdOQBR?

      j:mov:Pl8OBR?

      print;Pdanh sách sau khi BoáR?

      rint;(istPl8R?

      D:l:ctionDortPl8R?

      print;P=anh sách sau khi sLp BếpR?

      rint;(istPl8R?

      j:mov:(istPl8R?

    C

  • 8/18/2019 Danh Sách Liên Kết Đơn

    9/32

    Một số vấn đề cơ bản về "danh sách liên kết đơn"

    Để làm quen v ớ i các thao tác cơ  bản trên danh sách liên k ết, ta thực hiện trên một danh sách đ ơ n giản, đó là DANH

    !"H Ố N#$%&N 'mỗi n(t chỉ chứa một số ngu)ên*+ "h(ng ta sẽ tm hiểu các -hần sau.

    • /hai báo danh sách 'cấu tr(c dữ liệu*

    • "ấ- -hát và giải -hóng v0ng nhớ  một n(t+

    • 1hêm một n(t vào đ ầu danh sách+

    • 1hêm một n(t vào cuối danh sách+

    • Du) ệt danh sách+

    • 2óa một n(t trong danh sách+

    3+ Khai báo danh sách (cấu trúc dữ  liệu) 

    1rướ c tiên là khai báo các thư viện cần thiết.

    #include //để sử dụng hàm: printf, scanf#include //để sử dụng hàm: getch#include //để sử dụng hàm: malloc c!pph"t $ng nh% cho & n't(

    "ó nhiều cách đ ể khai báo cấu tr(c danh sách liên k ết đ ơ n+Cách 1. Struct đ ơ n thuần

    struct )ut*  int +iari-  struct )ut iep--

     struct )ut dau, cuoi-

     4 ớ i cách khai báo trên, )ut chỉ là một struct đ ơ n thuần 'chứ kh5ng -hải một kiểu*, do v ậ ) mỗi khi khai báo biến

    nào đó có kiểu liên quan đ ến cấu tr(c )ut th -hải có từ khóa struct -h6a trướ c 'v6 dụ.struct )ut p*+ "ách

    nà) 6t khi đ ượ c sử dụng+

    Cách 2. Khai báo KIỂU MỚ I (typede)

    t0pedef struct 1o)gu0en*  int +iari-  struct 1o)gu0en iep- )ut-

     )ut dau, cuoi-

     4 ớ i cách khai báo nà), song song v ớ i việc khai báo cấu tr(c 1o)gu0en, ta c7n đ ịnh ngh8a thêm một 9kiểu9 't)-e* mớ i

    có tên là )ut 'ch6nh là kiểu có cấu tr(c 1o)gu0en*+ Do v ậ ), sau nà) mỗi khi khai báo biến nào đó có kiểu liên quan đ ến

    cấu tr(c 1o)gu0en th tha) v khai báo struct 1o)gu0en p ta khai báo đ ơ n giả. )ut p+ Ngh8a

    là )ut đ ượ c sử dụng như một kiểu, tươ ng tự như kiểu int ha) float+ :ột ch( ; là trườ ng iep chưa thể khai

     báo )ut iep v l(c nà) " chưa biết )ut là một kiểu, do v ậ ) -hải khai báo là struct 1o)gu0en iep+

    Cách !. "ro#utt0pedef struct 1o)gu0en*  int +iari-  struct 1o)gu0en iep- )ut-t0pedef )ut ro)ut-ro)ut dau, cuoi-

  • 8/18/2019 Danh Sách Liên Kết Đơn

    10/32

     4 ớ i cách khai báo nà), kiểu ro)ut là một kiểu con trỏ trỏ đ ến một n(t trong danh sách+ Ngh8a là, tha) v khai

     báo )ut dau, cuoi, ta khai báo ro)ut dau, cuoi+

    ) ta t%m 9lơ 9 qua nội tnh bên trong

     v0ng nhớ  t8nh+ "ác biến t8nh khi khai báo th đ@ đ ượ c cấ- -hát v0ng nhớ +

     40ng nhớ  đ ộng chứa các 9biến đ ộng9+ "ác biến đ ộng kh5ng có tên mà đ ượ c quản l; b# i các biến con trỏ '-ointer*+ "h( ;,

     biến con tr= n"m trong v0ng nhớ  t8nh

    "ác 9n(t9 trong danh sách là các 9biến đ ộng9 n"m trong HBAC, c7n những con trỏ khai báo trong chươ ng trnh ch6nh, v6

    dụ )ut dau, cuoi, p là những 9biến t8nh9+

     4à cng đ ể đ ơ n giản, trong trườ ng hợ - có nhiều con trỏ trỏ đ ến các n(t, ta có thể biểu diễn như sau.

    Ngh8a là con trỏ dau trỏ đ ến n(t đ ầu tiên c!a danh sách 'n(t có giá tr ị là 3*, con trỏ p trỏ đ ến n(t có giá trị E, và con

    trỏ cuoi trỏ đ ến n(t cuối c0ng c!a danh sách 'n(t có giá trị là F*+ 1u) nhiên, ch6nh Gác hơ n sẽ là thế nà).

    + Cấp phát %n& nhớ  cho $ột nút )ut p 4 )ut (mallocsi3eof)ut((-

  • 8/18/2019 Danh Sách Liên Kết Đơn

    11/32

    I+ 1a có thể hnh dung việc 9cấ- -hát v0ng nhớ  cho -9 như < hnh dướ i đ>)+ 1rướ c khi cấ- -hát, con trỏ - kh5ng trỏ 

    đ ến n(t nào.

    E+

    J+ au khi cấ- -hát, nó trỏ đ ến một n(t 'biến đ ộng* #  v0ng nhớ  đ ộng 'hea-*.

    K+

    L+ "h'$ $ột nút %*o đ ầu danh sách 

    #iả sử danh sách ban đ ầu có n(t có giá trị lần lượ t là E, và J+ Để thêm n(t có giá trị I vào đ ầu danh sách ta cần thực hiện

    lần lượ t I bướ c sau.

  • 8/18/2019 Danh Sách Liên Kết Đơn

    12/32

    Đầu tiên 'bướ c 3* ta -hải cấ- -hát v0ng nhớ  cho n(t mớ i nà) và cho con trỏ p trỏ đ ến 'quản l;*, sau đó 'bướ c

  • 8/18/2019 Danh Sách Liên Kết Đơn

    13/32

    ()*+,

    à c!p ph"t $ng nh% cho p  p5>+iari 4 giatri- //8. 9a gi"tr; ào p  p5>iep 4 dau- //. +=n pào đu danh s"ch  dau 4 p- //?. @Ap nhAtcon trB dau

    F+ "h'$ $ột nút %*o cuối danh sách 

    "ó nhiều cách đ ể thêm một n(t mớ i vào cuối danh sách+ Dướ i đ>) là cách có sử dụng thêm con trỏcuoi 'lu5n trỏ đ ến -hần

    tử cuối c0ng c!a danh sách*+ Nếu kh5ng có con trỏ nà), trướ c mỗi lần thêm n(t mớ i ta -hải 9du) ệt9 toàn bộ danh sách đ ể 

    tm đ ượ c con trỏ trỏ đ ến -hần tử cuối c0ng 'ch6nh là con trỏcuoi*+ /hi đ@ có đ ượ c con trỏ cuoi, đ ể gắn n(t mớ i vào

    danh sách ta chỉ việc gắn n(t nà) vào nga) sau n(t đ ượ c trỏ b# i cuoi+

  • 8/18/2019 Danh Sách Liên Kết Đơn

    14/32

    Code+

    M

    &'()

    oid them@uoiint giatri(*  )ut p 4 )ut (mallocsi3eof)ut((- //&. 7hai b"oà c!p ph"t $ng nh% cho p

    http://agreenet.vn/baiviet/laptrinh/c/?eq=Ak7wytsN1FgZurlSBW9Flg==http://agreenet.vn/baiviet/laptrinh/c/?eq=Ak7wytsN1FgZurlSBW9Flg==

  • 8/18/2019 Danh Sách Liên Kết Đơn

    15/32

    *+,-

    .&/&&

      p5>+iari 4 giatri- //8. 9a gi"tr; ào p  p5>iep 4 )CDD-

    if dau 44 )CDD( //. +=n p àocuEi danh s"ch  dau 4 p-  else

      cuoi5>iep 4 p-  cuoi 4 p- //?. @Ap nhAtcon trB cuoi

    3+ ,uy ệt danh sách (đ ể hiển thị- đ ể đ ế$- đ ể tnh toán-...) 

    Để du) ệt danh sách, ta cần thêm một con trỏ p+ Oan đ ầu p trỏ đ ến n(t đ ầu tiên 'p4dau*+ 1a sẽ 9l0-9 việc di chu) ển p cho

    đ ến khi hết danh sách 'p4)CDD*+ Đo%n m@ cho việc du) ệt danh sách có thể viết như sau.

    M

    &'()*+

    )ut p 4 dau-  Fhile p G4 )CDD(  *  //6CHI n't p

    p 4 p5>iep- 

    "ó nhiều bài toán cần thao tác du) ệt danh sách, v6 dụ. hiển thị danh sách, đ ếm số n(t trong danh sách, đ ếm số n(t ch1n

    trong danh sách,+++

    M

    &'()*+,-.&/&&&'&(&)&*&+&,&-&.'/'&'''(')

    oid hienhi61( //hiển th; danh s"ch*  )ut p 4 dau-  Fhile p G4 )CDD(  *  printfJKd J, p5>+iari(-

    p 4 p5>iep-

     

     int so)ut( //đLm sE n't trong danh s"ch*  )ut p 4 dau- int dem 4 M-  Fhile p G4 )CDD(  *  demNN-  p 4 p5>iep-    return dem-

     int so)ut@han( //đLm sE n't chOn trong danh s"ch*  )ut p 4 dau- int dem 4 M-  Fhile p G4 )CDD(  *  if p5>+iari K 8 44 M( demNN-  p 4 p5>iep- 

    http://agreenet.vn/baiviet/laptrinh/c/?eq=Ak7wytsN1FgZurlSBW9Flg==http://agreenet.vn/baiviet/laptrinh/c/?eq=Ak7wytsN1FgZurlSBW9Flg==http://agreenet.vn/baiviet/laptrinh/c/?eq=Ak7wytsN1FgZurlSBW9Flg==http://agreenet.vn/baiviet/laptrinh/c/?eq=Ak7wytsN1FgZurlSBW9Flg==

  • 8/18/2019 Danh Sách Liên Kết Đơn

    16/32

    '*'+','-'.

    (/(&

      return dem-

    33+ /0a $ột nút (thỏa y'u cầu n*o đ0) ra hỏi danh sách

    1a cần -h>n biên hai trườ ng hợ -. n(t cần Góa là n(t đ ầu tiên ho0c kh5ng là n(t đ ầu tiên trong danh sách+ Nếu n(t cần Góa

    là n(t đ ầu tiên th ta thực hiện như sau.

    M

    &'(

    p 4 dau-dau 4 dau5>iep-freep(-

    Nếu n(t cần Góa kh5ng là n(t đ ầu tiên th ta thực hiện như sau.

    http://agreenet.vn/baiviet/laptrinh/c/?eq=Ak7wytsN1FgZurlSBW9Flg==http://agreenet.vn/baiviet/laptrinh/c/?eq=Ak7wytsN1FgZurlSBW9Flg==

  • 8/18/2019 Danh Sách Liên Kết Đơn

    17/32

    M

    &'(

    )*+,-.&/&&&'

    P 4 dau-p 4 dau5>iep-

    Fhile QtRm cha hLtS TT QtRm cha th!0S(*  P 4 p-  p 4 p5>iep-if p G4 )CDD(*  P5>iep 4 p5>iep-  freep(-

    / ết hợ - < trườ ng hợ - trên, ta có m@ hoàn ch ỉnh c!a hàm Góa một n(t trong danh sách.

    M

    &'()*+,

    oid 2oa)utint giatri( //2Ua VW n't trong danh s"ch cUgi" tr; là giatri*  )ut p, P-  if dau 44 )CDD( return-  if dau5>+iari 44 giatri(  *  p 4 dau-  dau 4 dau5>iep-

    http://agreenet.vn/baiviet/laptrinh/c/?eq=Ak7wytsN1FgZurlSBW9Flg==http://agreenet.vn/baiviet/laptrinh/c/?eq=Ak7wytsN1FgZurlSBW9Flg==http://agreenet.vn/baiviet/laptrinh/c/?eq=Ak7wytsN1FgZurlSBW9Flg==http://agreenet.vn/baiviet/laptrinh/c/?eq=Ak7wytsN1FgZurlSBW9Flg==

  • 8/18/2019 Danh Sách Liên Kết Đơn

    18/32

    -.&/&&&'

    &(&)&*&+&,&-&.'/'&'''(

    ')'*'+

      freep(-    else  *

      P 4 dau-  p 4 dau5>iep-  Fhile p G4 )CDD TT p5>+iari G4 giatri(  *  P 4 p-  p 4 p5>iep-    if p G4 )CDD(  *  P5>iep 4 p5>iep-  freep(-   

    3

  • 8/18/2019 Danh Sách Liên Kết Đơn

    19/32

    &'()*

    +,-.&/&&&'&(&)&*&+

    &,&-&.'/'&'''(')'*'+',

    '-'.(/(&('((()(*(+(,(-

    (.)/)&)')()))*)+

    #include //để sử dụng hàm: printf, scanf#include //để sử dụng hàm: getch#include //để sử dụng hàm: malloc c!p ph"t$ng nh% cho & n't(

     t0pedef struct )ut1o)gu0en*  int +iari-  struct )ut1o)gu0en iep- )ut-

     )ut dau, cuoi-

     oid them6auint giatri(*  )ut p 4 )ut (mallocsi3eof)ut((- //&. 7hai b"oà c!p ph"t $ng nh% cho p  p5>+iari 4 giatri- //8. 9a gi"tr; ào p  p5>iep 4 dau- //. +=n pào đu danh s"ch  dau 4 p- //?. @Ap nhAtcon trB dau

     oid them@uoiint giatri(*  )ut p 4 )ut (mallocsi3eof)ut((- //&. 7hai b"oà c!p ph"t $ng nh% cho p  p5>+iari 4 giatri- //8. 9a gi"tr; ào p  p5>iep 4 )CDD-

    if dau 44 )CDD( //. +=n pào cuEi danh s"ch  dau 4 p-  else  cuoi5>iep 4 p-  cuoi 4 p- //?. @Ap nhAtcon trB cuoi

     oid hienhi61(*  )ut p 4 dau-  Fhile p G4 )CDD(  *

      printfJKd J, p5>+iari(-p 4 p5>iep-

     

     int so)ut(*  )ut p 4 dau- int dem 4 M-  Fhile p G4 )CDD(

  • 8/18/2019 Danh Sách Liên Kết Đơn

    20/32

    ),)-).*/*&

    *'*(*)***+*,*-*.+/+&+'

    +(+)+*+++,+-+.,/,&,',(,),*,+,,,-,.-/-&-'-(-)-*-+-,---../.&.'

      *  demNN-  p 4 p5>iep-    return dem-

     int so)ut@han(*  )ut p 4 dau- int dem 4 M-  Fhile p G4 )CDD(  *  if p5>+iari K 8 44 M( demNN-  p 4 p5>iep-    return dem-

     oid 2oa)utint giatri( //2Ua VW n't trong danh s"ch cUgi" tr; là giatri

    *  )ut p, P-  if dau 44 )CDD( return-  if dau5>+iari 44 giatri(  *  p 4 dau-  dau 4 dau5>iep-  freep(-    else  *  P 4 dau-  p 4 dau5>iep-

      Fhile p G4 )CDD TT p5>+iari G4 giatri(  *  P 4 p-  p 4 p5>iep-    if p G4 )CDD(  *  P5>iep 4 p5>iep-  freep(-   

     

    int main(*  dau 4 )CDD- cuoi 4 )CDD-  them@uoi(-  them@uoi8(-  them@uoi?(-  them@uoiX(-  them@uoiY(-  printfJZn6anh sach ban dau: J(- hienhi61(-

     

  • 8/18/2019 Danh Sách Liên Kết Đơn

    21/32

    .(

    .)

    .*

    .+

    .,

    .-..&//

      printfJZn6anh sach co Kd nut, trong do co Kd nut cogia tri chan.J, so)ut(, so)ut@han((-

     2oa)ut?(-

      printfJZn6anh sach sau [hi 2oa nut co gia tri ?: J(-hienhi61(-  getch(-  return M-

    Bài 1. Danh sách Đ!M #$ %Ngườ i ta quản l; điểm c!a các sinh viên trong lớ - b"ng cách sử dụng một danh sách liên k ết đ ơ n 'mà ta gọi là danh

    sách điể$* v ớ i n(t đ ầu đ ượ c trỏ  b# i con trỏ dau+ :ỗi n(t c!a danh sách điểm là một bản ghi g2m trườ ng.

    trườ ng \oen đ ể  lưu họ  tên sinh viên 'là một chuỗi có tối đa k; tự*, trườ ng 6iem lưu điểm c!a sinh viên và

    trườ ng iep lưu đ ịa chỉ c!a n(t tiế- theo+

    2>) dựng chươ ng trnh g2m các hàm sau.

    • them6au đ ể thêm một n(t vào đ ầu danh sách+

    • them@uoi đ ể thêm một n(t vào cuối danh sách+• tao61 đ ể t%o ds v ớ i th5ng tin đ ượ c nhậ- từ bàn -h6m 'dừng khi nhậ- họ tên là một chuỗi rỗng*+

    • hienhi61 đ ể hiển thị danh sách 'cách trnh bà) như #  v6 dụ -h6a dướ i*+

    • so1hiDai đ ể đ ếm Gem trong danh sách có bao nhiêu sinh viên thi l %i 'điểm P E*+

    • hienhi16iemVa2 đ ể hiển thị 'các* sinh viên có điểm cao nhất

    • timheoen đ ể tm kiếm và hiển thị 'các* sinh viên theo tên+

    • main đ ể thử nghiệm các hàm v ừa G>) dựng #  trên+

    )hAp h] t^n sinh i^n: De _an \uan

    )hAp điểm: &

    )hap ho ten sinh ien: `han @ong Vinh

    )hAp điểm:

    )hap ho ten sinh ien: ran hi Danh

    )hAp điểm: ?

    )hap ho ten sinh ien: Vai ien \uan

    )hAp điểm:

    )hAp h] t^n sinh i^n:

    6anh s"ch sinh i^n a nhAp:

  • 8/18/2019 Danh Sách Liên Kết Đơn

    22/32

    5 De _an \uan & diem(

    5 `han @ong Vinh diem(

    5 ran hi Danh ? diem(

    5 Vai ien \uan diem(

     

    @U 8 sinh i^n phi thi li.

    )hng sinh i^n cU điểm tEi đa điểm(:

    5 `han @ong Vinh diem(

    5 Vai ien \uan diem(

     

    )hng sinh i^n cU t^n \uan:

    5 De _an \uan & diem(

    5 Vai ien \uan diem(

    3+ Khai báo danh sách (cấu trúc dữ  liệu) 

    Khai báo thư  %iện cần thiết+#include //printf, scanf#include //getch#include //malloc#include //strcp0

  • 8/18/2019 Danh Sách Liên Kết Đơn

    23/32

    E+ "h'$ $ột sinh %i'n %*o đ ầu danh sách

    Code+

    M

    &'()*+,-

    oid them6auchar hotenQS, float diem( //th^m & n'tào đu danh s"ch*

      )ut p 4 )ut (mallocsi3eof)ut((- //[hai b"o àc!p ph"t $ng nh% cho pstrcp0p5>\oen, hoten(- //đa d liu

    hoten, diem( ào p  p5>6iem 4 diem-  p5>iep 4 dau- //g=n p àođu danh s"ch  dau 4 p-

    J+ "h'$ $ột sinh %i'n %*o cuối danh sách

    Code+

    M

    &'()*+,-.&/&&

    &'

    oid them@uoichar hotenQS, float diem( //th^m & n't

    ào cuEi danh s"ch*  )ut p 4 )ut (mallocsi3eof)ut((- //[hai b"o àc!p ph"t $ng nh% cho p

    strcp0p5>\oen, hoten(- //đa d liuhoten, diem( ào p  p5>6iem 4 diem-  p5>iep 4 )CDD- //g=n p àocuEi danh s"ch  if dau 44 )CDD(  dau 4 p-  else  cuoi5>iep 4 p-  cuoi 4 p-

    K+ "ạo danh sách (dữ  liệu đ ượ c nhập từ  b*n ph$) 

    Code+

    M

    &'()*+,

    -.&/&&&'&(&)&*

    oid tao61(*  char hotenQMS-  float diem-  dau 4 )CDD- cuoi 4 )CDD-

     do  //lp li ic nhAp & n't

      *

      printfJZn)hap ho ten: J(- //đ]c Jh]t^nJ t bàn phm  fflushstdin(- getshoten(-  if hotenQMS( //nLu h] t^nhjp l [h"c rkng(  *  printfJ)hap diem: J(- //đ]c JđiểmJt bàn phm  fflushstdin(- scanfJKfJ, Tdiem(-  them@uoihoten, diem(- //th^m ào

    http://agreenet.vn/baiviet/laptrinh/c/?eq=Ak7wytsN1FgZurlSBW9Flg==http://agreenet.vn/baiviet/laptrinh/c/?eq=Ak7wytsN1FgZurlSBW9Flg==http://agreenet.vn/baiviet/laptrinh/c/?eq=Ak7wytsN1FgZurlSBW9Flg==http://agreenet.vn/baiviet/laptrinh/c/?eq=Ak7wytsN1FgZurlSBW9Flg==http://agreenet.vn/baiviet/laptrinh/c/?eq=Ak7wytsN1FgZurlSBW9Flg==http://agreenet.vn/baiviet/laptrinh/c/?eq=Ak7wytsN1FgZurlSBW9Flg==

  • 8/18/2019 Danh Sách Liên Kết Đơn

    24/32

    &+&,&-&.

    cuEi danh s"ch  //hoc: them6auhoten, diem(-    Fhile hotenQMS(- //lp trong[hi hoten [h"c rkng

    L+ 3iển thị thn& tin điể$ của tất cả các sinh %i'n tron& danh sáchCode+

    M

    &'()*+,-.

    &/

    oid hienhi61(*  )ut p 4 dau-  printfJZn6anh sach sinh ien ua nhap:ZnJ(-  Fhile p G4 )CDD(  *  printfJ5 Ks Kg diem(ZnJ, p5>\oen, p5>6iem(-  p 4 p5>iep- 

    F+ 4ế$ số sinh %i'n thi lại

    Code+

    M

    &'()*+,

    -.&/&&

    int so1hiDai(*  int dem 4 M- //[hi to  )ut p 4 dau-  Fhile p G4 )CDD( //du0t danhs"ch  *  if p5>6iem < ( demNN-

      p 4 p5>iep-    return dem- //tr [LtPu

    3+ 3iển thị các sinh %i'n c0 điể$ cao nhất

    Code+

    M

    &'()

    *+,-.&/&&&'

    oid hienhi16iemVa2(*  int ma2 4 M- //[hi to  )ut p 4 dau- //du0t ln &để tRm điểm ma2

      Fhile p G4 )CDD(  *  if p5>6iem > ma2( ma2 4 p5>6iem-  p 4 p5>iep-    printfJZn)hung sinh ien co diem toi da Kgdiem(:ZnJ(-  p 4 dau- //du0t ln 8để hiển th; nhng s cU điểm ma2  Fhile p G4 )CDD(

    http://agreenet.vn/baiviet/laptrinh/c/?eq=Ak7wytsN1FgZurlSBW9Flg==http://agreenet.vn/baiviet/laptrinh/c/?eq=Ak7wytsN1FgZurlSBW9Flg==http://agreenet.vn/baiviet/laptrinh/c/?eq=Ak7wytsN1FgZurlSBW9Flg==http://agreenet.vn/baiviet/laptrinh/c/?eq=Ak7wytsN1FgZurlSBW9Flg==http://agreenet.vn/baiviet/laptrinh/c/?eq=Ak7wytsN1FgZurlSBW9Flg==http://agreenet.vn/baiviet/laptrinh/c/?eq=Ak7wytsN1FgZurlSBW9Flg==

  • 8/18/2019 Danh Sách Liên Kết Đơn

    25/32

    &(&)&*&+&,

    &-

      *  if p5>6iem 44 ma2(

    printfJ5 Ks Kg diem(ZnJ, p5>\oen, p5>6iem(-  p 4 p5>iep- 

    33+ "$ iế$ %* hiển thị thn& tin điể$ của các sinh %i'n theo "5#

    Code+

    M

    &'()*+,-.&/&&&'&(&)&*&+&,&-

    char trichenchar hoten(*  int [ 4 strlenhoten( 5 &-  Fhile [ >4 M TT hotenQ[S G4 ( [55-  return hoten N [ N &(-

     oid timheoenchar tenQ&MS(*  printfJZn)hung sinh ien co ten Ks:ZnJ, ten(-  )ut p 4 dau-  Fhile p G4 )CDD( //du0t danh s"ch  *  if strcmptrichenp5>\oen(, ten( 44 M(  printfJ5 Ks Kg diem(ZnJ, p5>\oen, p5>6iem(-  p 4 p5>iep- 

    3

  • 8/18/2019 Danh Sách Liên Kết Đơn

    26/32

    Bài '. Danh sách ( #)*+ ,-#)

    ử dụng danh sách liên k ết đ ơ n đ ể quản l; d@) các số ngu)ên tQng dần+ :ỗi ch(t chỉ chứa giá trị là một số ngu)ên+ 2>)

    dựng chươ ng trnh g2m các thao tác 'hàm* sau.

    • 1hêm một n(t vào cuối danh sách+

    • Đọc hai danh sách 'A và O* từ tậ- tin vQn bản 1)+CH).q)`+ D7ng đ ầu ghi hai số m và n+ D7ng < ghi msố 

    ngu)ên c!a d@) A+ D7ng ghi n số ngu)ên c!a d@) O+• /iểm tra Gem mỗi danh sách có theo thứ tự tQng dần ha) kh5ng+

    • 1hêm một n(t vào danh sách 'giả sử danh sách đ@ có thứ tự tQng dần* sao cho sau khi thêm danh sách v 3n đ ảm

     bảo có thứ tự tQng dần+

    • #hR- < danh sách A và O thành danh sách " sao cho danh sách " v 3n đ ảm bảo thứ tự tQng dần+

    • Hiển thị danh sách+

     46 dụ v ề nội dung tậ- tin 1)+CH).q)`.

    ?

    ?

    8 Y &M

    3+ Khai báo danh sách. 

    Do chươ ng trnh làm việc trên nhiều danh sách nên đ ể tiện và tối ưu ta sử dụng cách trong b*i 1 #  trên, ngh8a là ta t%othêm kiểu ro)ut+ "ụ thể khai báo như sau.t0pedef struct 1o)gu0en*  int +iari-  struct 1o)gu0en iep- )ut-t0pedef )ut ro)ut-ro)ut dau&, dau8-

    $ đ>), ta sử dụng hai con trỏ dau& và dau8 đ ể quản l; < danh sách A và O+ "on trỏ cuoi chỉ đ ượ c sử dụng trong

    hàm t%o danh sách, do v ậ ) ta sẽ khai báo trong hàm nà)+

    ) ta

    sẽ sử dụng -hươ ng -há- tru) ền tham chiếu trong chươ ng trnh con, m@ ngu2n cụ thể như sau.

    M

    &'()*+

    ,-.&/&&

    oid them@uoiro)ut Tdau, ro)ut Tcuoi, int 2(*  ro)ut p 4 ro)ut(mallocsi3eof1o)gu0en((-  p5>+iari 4 giatri-  p5>tiep 4 )CDD-  if dau 44 )CDD(  dau 4 p-  else  cuoi5>tiep 4 p-  cuoi 4 p-

    + 4ọc hai danh sách (8 %* 9) từ  tập tin %:n bản SONGUYEN.INP. 

    U= ràng ta cần hai con trỏ đ ể quản l; danh sách A 'dau3, cuoi3* và hai con trỏ đ ể quản l; danh sách O 'dau

  • 8/18/2019 Danh Sách Liên Kết Đơn

    27/32

     và n 'd7ng thứ nhất trong tậ- tin 1)+CH).q)`+ Để đ ọc danh sách A từ d7ng thứ < c!a tậ- tin, ta sẽ đ ọc m số ngu)ên+

     4 ớ i mỗi số ngu)ên 2, ta gọi hàm them@uoi v ớ i tham sốdau&, cuoi& và 2+ Hoàn toàn tươ ng tự v ớ i danh sách O+

    M

    &'()*+,-.&/&&&'&(&)&*&+&,&-&.

    oid doc61(

    *  ro)ut cuoi& 4 )CDD, cuoi8 4 )CDD-  dau& 4 )CDD- dau8 4 )CDD-  int i, n, m, 2-  qD f 4 fopenJ1)+CH).q)`J, JrJ(-  fscanff, JKd KdJ, Tm, Tn(-  for i 4 M- i < m- iNN(  *  fscanff, JKdJ, T2(-  them@uoidau&, cuoi&, 2(-    for i 4 M- i < n- iNN(  *  fscanff, JKdJ, T2(-

      them@uoidau8, cuoi8, 2(-    fclosef(-

    I+ Kiể$ tra 6e$ $ỗi danh sách c0 theo thứ  tự  t:n& dần hay hn&. 

     ; tưở n&+ Để kiểm tra Gem danh sách có theo thứ tự tQng dần ha) kh5ng, ta sẽ cố gắng tm v ị tr6 mà giá trị t%i n(t nà) lớ n

    hơ n giá trị t%i n(t tiế- theo+ Nếu tm thấ ) th chứng tỏ danh sách danh sách kh5ng theo thứ tự tQng dần+

    C*i đ ặt+ Để 9tm9 n(t mong muốn 'giá trị lớ n hơ n n(t tiế- theo* r= ràng ta cần -hải l0-+ Do chưa biết trướ c số lần l0-

    nên sử dụng v7ng l0- Fhile+ :@ cụ thể như dướ i đ>).+

    M

    &'()*+,-.

    int da0angro)ut dau(*  if dau 44 )CDD( return &- //d0 rkng coi nh là Jd0tng dnJ  ro)ut p 4 dau-  Fhile p5>iep G4 )CDD TT p5>+iari iep5>+iari(  p 4 p5>iep-  if p5>iep 44 )CDD( return &- //nLu tRm [hvng th!0 du0thLt d0( thR ch=c ch=n d0 là Jtng dnJ  return M- //nLu du0t 7\w)+ hLt d0 tRm th!0( thR ch=cch=n d0 là J[hvng tng dnJ

    E+ "h'$ $ột nút %*o danh sách (&iả sử  danh sách đ< c0 thứ  tự  t:n& dần) sao cho sau hi th'$ danh

    sách % ẫn đ ả$ bảo c0 thứ  tự  t:n& dần. Để làm điều nà), ta cần tm v ị tr6 mà giá trị t%i n(t nà) kh5ng nhỏ hơ n giá trị t%i n(t tiế- theo+ 1a sẽ thực hiện v7ng l0-

    tươ ng tự c>u trên 'kiểm tra t6nh tQng dần c!a danh sách*+ au khi tm đ ượ c ta sẽ đ ưa n(t mớ i '-* vào nga) sau n(t nà) 'q*+

    "ó một trườ ng hợ - đ 0c biệt cần ch( ; là danh sách rỗng ho0c n(t đ ầu tiên c!a danh sách có giá trị lớ n hơ n giá trị muốn

    thêm vào+ 1rườ ng hợ - nà) ta chỉ việc thực hiện thao tác 9thêm đ ầu9 'Gem -hần cơ bản, m ục thêm đ ầu*+ :@ ngu2n đ ầ ) đ ! 

    như sau.

    M

    &'

    oid them`hanuro)ut Tdau, int giatri(*

    http://agreenet.vn/baiviet/laptrinh/c/?eq=Ak7wytsN1FgZurlSBW9Flg==http://agreenet.vn/baiviet/laptrinh/c/?eq=Ak7wytsN1FgZurlSBW9Flg==http://agreenet.vn/baiviet/laptrinh/c/?eq=Ak7wytsN1FgZurlSBW9Flg==#cbThemDauhttp://agreenet.vn/baiviet/laptrinh/c/?eq=Ak7wytsN1FgZurlSBW9Flg==#cbThemDauhttp://agreenet.vn/baiviet/laptrinh/c/?eq=Ak7wytsN1FgZurlSBW9Flg==#cbThemDauhttp://agreenet.vn/baiviet/laptrinh/c/?eq=Ak7wytsN1FgZurlSBW9Flg==#cbThemDauhttp://agreenet.vn/baiviet/laptrinh/c/?eq=Ak7wytsN1FgZurlSBW9Flg==#cbThemDauhttp://agreenet.vn/baiviet/laptrinh/c/?eq=Ak7wytsN1FgZurlSBW9Flg==#cbThemDauhttp://agreenet.vn/baiviet/laptrinh/c/?eq=Ak7wytsN1FgZurlSBW9Flg==#cbThemDauhttp://agreenet.vn/baiviet/laptrinh/c/?eq=Ak7wytsN1FgZurlSBW9Flg==#cbThemDauhttp://agreenet.vn/baiviet/laptrinh/c/?eq=Ak7wytsN1FgZurlSBW9Flg==#cbThemDauhttp://agreenet.vn/baiviet/laptrinh/c/?eq=Ak7wytsN1FgZurlSBW9Flg==#cbThemDauhttp://agreenet.vn/baiviet/laptrinh/c/?eq=Ak7wytsN1FgZurlSBW9Flg==#cbThemDauhttp://agreenet.vn/baiviet/laptrinh/c/?eq=Ak7wytsN1FgZurlSBW9Flg==#cbThemDauhttp://agreenet.vn/baiviet/laptrinh/c/?eq=Ak7wytsN1FgZurlSBW9Flg==http://agreenet.vn/baiviet/laptrinh/c/?eq=Ak7wytsN1FgZurlSBW9Flg==http://agreenet.vn/baiviet/laptrinh/c/?eq=Ak7wytsN1FgZurlSBW9Flg==http://agreenet.vn/baiviet/laptrinh/c/?eq=Ak7wytsN1FgZurlSBW9Flg==#cbThemDauhttp://agreenet.vn/baiviet/laptrinh/c/?eq=Ak7wytsN1FgZurlSBW9Flg==

  • 8/18/2019 Danh Sách Liên Kết Đơn

    28/32

    ()*+,

    -.&/&&&'&(&)&*&+&,&-

    &.

      ro)ut p 4 ro)ut(mallocsi3eof)ut((-  p5>+iari 4 giatri-

     if dau 44 )CDD xx dau G4 )CDD TT dau5>+iari >

    giatri((  *

      p5>iep 4 dau-  dau 4 p-    else  *  ro)ut P 4 dau-  Fhile P5>iep G4 )CDD TT P5>iep5>+iari <giatri(  P 4 P5>iep-  p5>iep 4 P5>iep-  P5>iep 4 p- 

    J+ 3ợ p 2 danh sách 8 %* 9 th*nh danh sách C sao cho danh sách C % ẫn đ ả$ bảo thứ  tự  t:n& dần. 

    1a sẽ thực hiện v7ng l0- đ ể lần lượ t đ ọc từng n(t từ một trong hai danh sách A và O đ ể thêm vào danh sách " sao cho đ(ng

    thứ tự+ Oan đ ầu ta sẽ Guất -hát từ đ ầu c!a < danh sách, t%i mỗi bướ c l0- ta sẽ chỉ đ ưa :1 n(t từ danh sách A ho0c danh

    sách O sang danh sách "+ 1a sẽ đ ưa n(t từ danh sách A nếu.

    3+ Danh sách O đ@ hết 'dau84)CDD* ho0c

  • 8/18/2019 Danh Sách Liên Kết Đơn

    29/32

    K+ 3iển thị nội dun& to*n bộ danh sách. 

    M

    &'()*+,-.&/

    oid hienhiro)ut dau(*  ro)ut p 4 dau-

      Fhile p G4 )CDD(  *  printfJKd J, p5>+iari(-  p 4 p5>tiep-    printfJZnJ(-

    L+ Chươ n& trnh ho*n thiện 

    M

    &'(

    )*+,-.&/&&&'&(&)

    &*&+&,&-&.'/'&'''(')'*

    '+','-'.(/(&('((

    #include#include#include

     t0pedef struct 1o)gu0en*  int +iari-  struct 1o)gu0en iep- )ut-t0pedef )ut ro)ut-ro)ut dau&, dau8-

     oid them@uoiro)ut Tdau, ro)ut Tcuoi, int giatri(*  ro)ut p 4 ro)ut(mallocsi3eof)ut((-  p5>+iari 4 giatri-  p5>iep 4 )CDD-  if dau 44 )CDD(  dau 4 p-  else  cuoi5>iep 4 p-  cuoi 4 p-

     oid doc61(*  ro)ut cuoi& 4 )CDD, cuoi8 4 )CDD-  dau& 4 )CDD- dau8 4 )CDD-  int i, n, m, 2-  qD f 4 fopenJ1)+CH).q)`J, JrJ(-  fscanff, JKd KdJ, Tm, Tn(- //đ]c gi"tr; m à n  for i 4 M- i < m- iNN( //đ]c mgi" tr; cya mng a à to danh s"ch &  *  fscanff, JKdJ, T2(-  them@uoidau&, cuoi&, 2(-    for i 4 M- i < n- iNN( //đ]c n

    http://agreenet.vn/baiviet/laptrinh/c/?eq=Ak7wytsN1FgZurlSBW9Flg==http://agreenet.vn/baiviet/laptrinh/c/?eq=Ak7wytsN1FgZurlSBW9Flg==http://agreenet.vn/baiviet/laptrinh/c/?eq=Ak7wytsN1FgZurlSBW9Flg==http://agreenet.vn/baiviet/laptrinh/c/?eq=Ak7wytsN1FgZurlSBW9Flg==

  • 8/18/2019 Danh Sách Liên Kết Đơn

    30/32

    ()(*(+(,(-

    (.)/)&)')()))*)+),)-).

    */*&*'*(*)***+*,*-*.+/+&+'+(+)+*+++,+-+.,/,&,',(,),*,+,,,-,.

    gi" tr; cya mng b à to danh s"ch 8  *  fscanff, JKdJ, T2(-  them@uoidau8, cuoi8, 2(-    fclosef(-

     oid hienhiro)ut dau(*  ro)ut p 4 dau-  Fhile p G4 )CDD(  *  printfJKd J, p5>+iari(-  p 4 p5>iep-    printfJZnJ(-

     int da0angro)ut dau(*  if dau 44 )CDD( return &- //d0 rkng coi nh làJd0 tng dnJ  ro)ut p 4 dau-  Fhile p5>iep G4 )CDD TT p5>+iari < p5>iep5>+iari(  p 4 p5>iep-  if p5>iep 44 )CDD( return &- //nLu du0t hLt d0thR ch=c ch=n d0 là Jtng dnJ  return M- //nLu du0t 7\w)+ hLt d0 dng đzu đU(thR ch=c ch=n d0 là J[hvng tng dnJ

     oid them`hanuro)ut Tdau, int giatri(*  ro)ut p 4 ro)ut(mallocsi3eof)ut((-  p5>+iari 4 giatri-

     if dau 44 )CDD xx dau G4 )CDD TT dau5>+iari >

    giatri((  *  p5>iep 4 dau-  dau 4 p-    else  *

      ro)ut P 4 dau-  Fhile P5>iep G4 )CDD TT P5>iep5>+iari <giatri(  P 4 P5>iep-  p5>iep 4 P5>iep-  P5>iep 4 p- 

     ro)ut ghep61ro)ut dau&, ro)ut dau8(

  • 8/18/2019 Danh Sách Liên Kết Đơn

    31/32

    -/-&-'-(-)

    -*-+-,---../.&.'.(.).*

    .+.,

    .-

    ..&//&/&&/'&/(&/)&/*&/+&/,&/-&/.&&/&&&&&'&&(&&)&&*&&+&&,&&-&&.&'/&'&&''&'(&')&'*

    *  ro)ut dau 4 )CDD, cuoi 4 )CDD-  int giatri-  Fhile dau& G4 )CDD xx dau8 G4 )CDD(  *  if dau8 44 )CDD xx dau& G4 )CDD TT dau8 G4 )CDDTT dau85>+iari > dau&5>+iari((

      *  giatri 4 dau&5>+iari-  dau& 4 dau&5>iep-    else  *  giatri 4 dau85>+iari-  dau8 4 dau85>iep-    them@uoidau, cuoi, giatri(-    return dau-

     int main(*  doc61(-  printfJ6anh sach &: J(-  hienhidau&(-  printfJ6anh sach 8: J(-  hienhidau8(-

     them`hanudau&, X(-

      printfJ6anh sach & sau [hi them phan tu gia tri X:J(-  hienhidau&(-

      them`hanudau8, &(-  printfJ6anh sach 8 sau [hi them phan tu gia tri &:J(-  hienhidau8(-

     printfJ6anh sach sau [hi ghep: J(-

      hienhighep61dau&, dau8((-  getch(-

  • 8/18/2019 Danh Sách Liên Kết Đơn

    32/32

    &'+

    / ết quả thực thi chươ ng trnh 'màn hnh console* sẽ như sau.

    6anh sach &: ?

    6anh sach 8: 8 Y &M

    6anh sach & sau [hi them phan tu gia tri X: ? X

    6anh sach 8 sau [hi them phan tu gia tri &: & 8 Y &M

    6anh sach sau [hi ghep: & 8 ? X Y &M