This commit is contained in:
2023-10-23 13:23:36 +02:00
parent 667dae6f1a
commit 322b22f9bf
5711 changed files with 72953 additions and 0 deletions

View File

@@ -0,0 +1,18 @@
but : exe
OFILES = stack.o \
main.o
CC = gcc
CFLAGS = -Wall -ansi -pedantic -g
main.o : stack.h
exe : $(OFILES)
$(CC) $(CFLAGS) -o exe $(OFILES)
clean :
-rm -f $(OFILES) exe
.PHONY : but clean

View File

@@ -0,0 +1,3 @@
#include <stdio.h>
#include <stdlib.h>

View File

@@ -0,0 +1,48 @@
#include <stdio.h>
#include <stdlib.h>
#include "stack.h"
void suppr0(stack pile){
stack pileSans0 = create_stack();
unsigned entierTeste;
while (empty(pile)!=1){
entierTeste = pop(pile);
if (entierTeste!=0){
push(pileSans0, entierTeste);
}
}
while (empty(pileSans0)!=1){
entierTeste = pop(pileSans0);
push(pile, entierTeste);
}
}
void print_stack(stack pile){
stack pileBis = create_stack();
unsigned entierTeste;
while (empty(pile)!=1){
entierTeste = pop(pile);
printf("%u ",entierTeste);
push(pileBis, entierTeste);
}
while (empty(pileBis)!=1){
entierTeste = pop(pileBis);
push(pile, entierTeste);
}
printf("\n");
}
int main(void){
stack pile = create_stack();
push(pile,0);
push(pile,1);
push(pile,0);
push(pile,3);
push(pile,7);
push(pile,0);
push(pile,0);
print_stack(pile);
suppr0(pile);
print_stack(pile);
return EXIT_SUCCESS;
}

View File

@@ -0,0 +1,48 @@
#include <stdio.h>
#include <stdlib.h>
#include "stack.h"
void suppr0(stack pile){
stack pileSans0 = create_stack();
unsigned entierTeste;
while (empty(pile)!=1){
entierTeste = pop(pile);
if (entierTeste!=0){
push(pileSans0, entierTeste);
}
}
while (empty(pileSans0)!=1){
entierTeste = pop(pileSans0);
push(pile, entierTeste);
}
}
void print_stack(stack pile){
stack pileBis = create_stack();
unsigned entierTeste;
while (empty(pile)!=1){
entierTeste = pop(pile);
printf("%u ",entierTeste);
push(pileBis, entierTeste);
}
while (empty(pileBis)!=1){
entierTeste = pop(pileBis);
push(pile, entierTeste);
}
printf("\n");
}
int main(void){
stack pile = create_stack();
unsigned entierTeste;
push(pile,0);
push(pile,1);
push(pile,0);
push(pile,3);
push(pile,7);
push(pile,0);
push(pile,0);
print_stack(pile);
suppr0(pile);
print_stack(pile);
}

View File

@@ -0,0 +1,60 @@
#include <stdlib.h>
#include "stack.h"
struct s_link {
unsigned value;
struct s_link *next;
};
typedef struct s_link link;
struct s_stack {
link *first;
};
/* crée une pile vide */
stack create_stack(void) {
return (stack) calloc(1, sizeof(struct s_stack));
}
/* ajoute un élément à la pile. Renvoie 1 en cas de succès */
int push(stack the_stack, unsigned the_value) {
link *new = (link*) malloc(sizeof(link));
if (new == NULL) {
return 0;
}
new->value = the_value;
new->next = the_stack->first;
the_stack->first = new;
return 1;
}
/* renvoie 1 si la pile est vide */
int empty(stack the_stack) {
return the_stack->first == NULL;
}
/* retire un élément de la pile. Renvoie l'élément retiré, ou -1 en cas d'échec */
long pop(stack the_stack) {
if(the_stack->first == NULL) {
return -1;
}
link l = *(the_stack->first);
free(the_stack->first);
the_stack->first = l.next;
return l.value;
}
/* détruit une pile en libérant les ressources associées */
void destroy_stack(stack the_stack) {
link *current, *saved;
current = the_stack->first;
while(current != NULL) {
saved = current->next;
free(current);
current = saved;
}
free(the_stack);
}

View File

@@ -0,0 +1,22 @@
#ifndef STACK_H
#define STACK_H
/* le type stack représente une pile */
typedef struct s_stack *stack;
/* crée une pile vide. Renvoie NULL en cas d'échec */
stack create_stack(void);
/* ajoute un élément à la pile. Renvoie 0 en cas d'échec */
int push(stack, unsigned);
/* renvoie 1 si la pile est vide */
int empty(stack);
/* retire un élément de la pile. Renvoie l'élément retiré, ou -1 en cas d'échec */
long pop(stack);
/* détruit une pile en libérant les ressources associées */
void destroy_stack(stack);
#endif /* STACK_H */