Bonsoir,
les piles/files marche bien comme sa pour savoir si j'ai bien assimilé (les piles/files -> ajout/suppression d'un élément,sommet de pile/file)


PILES Last In First out


Tableau statique: (ajout/suppression en fin de tableau)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
 
#include<stdio.h>
#include<stdlib.h>
#define MAX 50
typedef struct pile{
  int taille;
  int tab[MAX];
}pile;
 
void init(pile *p){
  p->taille=0;
}
 
void push(pile *p,int val){
  if(p->taille!=MAX){
    p->tab[p->taille]=val;
    p->taille++;
  }
}
 
void pop(pile *p) {
  if(p->taille==0)
    return;
  p->taille--;
}
 
void affiche(pile p){
  int i;
  for(i=0;i<p.taille;i++)
    printf("%d\n",p.tab[i]);
}
int top(pile p){
  return p.tab[p.taille];
}
 
int main(void){
  pile p;
  init(&p);
  push(&p,5);
  push(&p,6);
  affiche(p);
  printf("REMOVE\n");
  pop(&p);
  affiche(p);
  printf("top=%d\n",top(p));
  return 0;
}
Tableau dynamique
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
 
#include<stdio.h>
#include<stdlib.h>
typedef struct pile{
  int taille;
  int *tab;
}pile;
 
void init(pile *p){
  p->taille=0;
  p->tab=NULL;
}
 
void push(pile *p,int val){
  p->tab=realloc(p->tab,sizeof(int *)*(p->taille+1));
  p->tab[p->taille]=val;
  p->taille++;
 
}
 
void pop(pile *p) {
  if(p->taille==0)
    return;
  p->taille--;
}
 
void affiche(pile p){
  int i;
  for(i=0;i<p.taille;i++)
    printf("%d\n",p.tab[i]);
}
int top(pile p){
  return p.tab[p.taille];
}
 
int main(void){
  pile p;
  init(&p);
  push(&p,5);
  push(&p,6);
  affiche(p);
  printf("REMOVE\n");
  pop(&p);
  affiche(p);
  printf("top=%d\n",top(p));
  return 0;
}
liste chaînée: (ajout/suppression au début de la liste chaînée)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
 
#include<stdio.h>
#include<stdlib.h>
typedef struct _pile{
  int Elt;
  struct _pile *suivant;
}pile;
 
void init(pile **p){
  *p=NULL;
}
 
void push(pile **p,int val){
  pile *p2;
  p2=malloc(sizeof(pile));
  p2->Elt=val;
  p2->suivant=*p;
  *p=p2;
}
 
void pop(pile **p){
  pile *p2;
  p2=*p;
  *p=(*p)->suivant;
  free(p2);
}
 
int top(pile *p){
  if(p==NULL) printf("erreur, pile vide");
  else{
    if(p->suivant==NULL)
      return p->Elt;
    while(p->suivant!=NULL){
      p=p->suivant;
    }
    return p->Elt;
  }
}
 
void affiche(pile *p){
  while(p!=NULL){
    printf("%d\n",p->Elt);
    p=p->suivant;
  }
}
 
int main(void){
  pile *p;
  init(&p);
  push(&p,5);
  push(&p,3);
  affiche(p);
  printf("top=%d\n",top(p));
  pop(&p);
  affiche(p);
  return 0;
}
Les FILES First In First Out
tableau statique: (ajout fin de tableau, supréssion début de tableau)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
 
#include<stdio.h>
#include<stdlib.h>
#define MAX 50
typedef struct file{
  int taille;
  int tab[MAX];
}file;
 
void init(pile *p){
  p->taille=0;
}
 
void push(file *p,int val){
  if(p->taille!=MAX){
    p->tab[p->taille]=val;
    p->taille++;
  }
}
 
void pop(file *p) {
  int i;
  if(p->taille==0)
    return;
  for(i=0;i<(p->taille -1);i++){
    p->tab[i]=p->tab[i+1];
  }
  p->taille--; 
}
 
void affiche(file p){
  int i;
  for(i=0;i<p.taille;i++)
    printf("%d\n",p.tab[i]);
}
int top(file p){
  return p.tab[p.taille];
}
 
int main(void){
  file p;
  init(&p);
  push(&p,5);
  push(&p,6);
  affiche(p);
  printf("REMOVE\n");
  pop(&p);
  affiche(p);
  printf("top=%d\n",top(p));
  return 0;
}
tableau dynamique:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
 
#include<stdio.h>
#include<stdlib.h>
typedef struct File{
  int taille;
  int *tab;
}file;
 
void init(file *p){
  p->taille=0;
  p->tab=NULL;
}
 
void push(file *p,int val){
  p->tab=realloc(p->tab,sizeof(int *)*(p->taille+1));
  p->tab[p->taille]=val;
  p->taille++;
}
 
void pop(file *p) {
  int i;
  if(p->taille==0)
    return;
  for(i=0;i<(p->taille -1);i++){
    p->tab[i]=p->tab[i+1];
  }
  p->taille--; 
}
 
void affiche(file p){
  int i;
  for(i=0;i<p.taille;i++)
    printf("%d\n",p.tab[i]);
}
int top(file p){
  return p.tab[p.taille];
}
 
int main(void){
  file p;
  init(&p);
  push(&p,5);
  push(&p,6);
  affiche(p);
  printf("REMOVE\n");
  pop(&p);
  affiche(p);
  printf("top=%d\n",top(p));
  return 0;
}
liste chaînée: (ajout au début de la liste, supréssion à la fin de la liste)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
 
#include<stdlib.h>
#include<stdio.h>
typedef struct _file{
  int Elt;
  struct _file *suivant;
}file;
 
void init(file **p){
  *p=NULL;
}
 
void push(file **p,int val){
  file *p2=malloc(sizeof(file));
  p2->Elt=val;
  p2->suivant=*p;
  *p=p2;
}
 
void pop(file **p){
  if(*p==NULL)
    return;
  if((*p)->suivant==NULL)
    free(*p);
  file *p2=*p;
  file *p3=(*p)->suivant;
  while(p3->suivant!=NULL){
    p2=p2->suivant;
    p3=p3->suivant;
  }
  p2->suivant=p3->suivant;
  free(p3);   
}
 
int top(file *p){
  if(p==NULL) printf("erreur, pile vide");
  else{
    if(p->suivant==NULL)
      return p->Elt;
    while(p->suivant!=NULL){
      p=p->suivant;
    }
    return p->Elt;
  }
}
 
void affiche(file *p){
  while(p!=NULL){
    printf("%d\n",p->Elt);
    p=p->suivant;
  }
}
int main(void){
  file *p;
  init(&p);
  push(&p,5);
  push(&p,3);
  affiche(p);
  printf("top=%d\n",top(p));
  pop(&p);
  printf("REMOVE\n");
  affiche(p);
  return 0;
}
Merci d'avance pour votre aide.