home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 26 / CD_ASCQ_26_1295.iso / voxrom / textes / repwin08 / annexes / accroc / xist_s_c.pas < prev   
Pascal/Delphi Source File  |  1995-10-01  |  2KB  |  103 lines

  1. program list_s_c; {liste simplement chaînée}
  2.  
  3. uses crt;
  4.  
  5. type TDonnee=integer;
  6.  
  7. type PCellule = ^Cellule;
  8.      Cellule = record
  9.                  nb:TDonnee;
  10.                  next:Pcellule;
  11.                end;
  12.  
  13. function init_liste:PCellule;
  14. begin
  15.   init_liste:=nil;
  16. end;
  17.  
  18. function est_vide(l:Pcellule):boolean;
  19. begin
  20.   est_vide:= (l=nil);
  21. end;
  22.  
  23. function suivant(l:Pcellule):Pcellule;
  24. begin
  25.   suivant:=l^.next;
  26. end;
  27.  
  28. function contenu(l:Pcellule):TDonnee;
  29. begin
  30.   contenu:=l^.nb;
  31. end;
  32.  
  33. function insere(l:Pcellule;n:TDonnee):PCellule;
  34. var temp:PCellule;
  35. begin
  36.   new(temp);
  37.   temp^.nb:=n;
  38.   temp^.next:=l;
  39.   insere:=temp;
  40. end;
  41.  
  42. function supprime(l:Pcellule):Pcellule;
  43. var temp:Pcellule;
  44. begin
  45.   temp:=l^.next;
  46.   dispose(l);
  47.   supprime:=temp;
  48. end;
  49.  
  50. function supprime_elem(l:PCellule;elem:TDonnee):PCellule;
  51. begin
  52. if est_vide(l)
  53.   then supprime_elem:=l
  54.   else if contenu(l)=elem   {ATTENTION ;IL FAUDRA DEFINIR UNE FONCTION
  55.                             EGALITE POUR LES TYPES COMPOSES DE TDonnee !!}
  56.          then supprime_elem:=supprime(l)
  57.          else begin
  58.               l^.next:=supprime_elem(suivant(l),elem);
  59.               supprime_elem:=l;
  60.               end;
  61. end;
  62.  
  63. function insere_sort(l:PCellule;elem:TDonnee):PCellule;
  64. begin
  65.   if est_vide(l)
  66.     then insere_sort:=insere(l,elem)
  67.     else if elem<=contenu(l) {ATTENTION : RELATION D'ORDRE A DEFINIR SELON
  68.                              LE TYPE DE TDonnee !!!}
  69.            then insere_sort:=insere(l,elem)
  70.            else begin
  71.                 l^.next:=insere_sort(suivant(l),elem);
  72.                 insere_sort:=l;
  73.                 end;
  74. end;
  75.  
  76. procedure affiche(l:Pcellule);
  77. begin
  78. if not(est_vide(l))
  79.   then begin
  80.        writeln(contenu(l));
  81.        affiche(suivant(l));
  82.        end;
  83. end;
  84.  
  85.  
  86.  
  87. var l:pcellule;
  88.  
  89. BEGIN
  90. clrscr;
  91. l:=init_liste;
  92. l:=insere(l,5);
  93. l:=insere(l,4);
  94. l:=insere(l,3);
  95. affiche(l);
  96. l:=supprime_elem(l,4);
  97. writeln;
  98. affiche(l);
  99. l:=insere_sort(l,9);
  100. writeln;
  101. affiche(l);
  102. END.
  103.