update
This commit is contained in:
18
DEV/DEV1.1/CM3/Q3_Réduction/Makefile
Normal file
18
DEV/DEV1.1/CM3/Q3_Réduction/Makefile
Normal 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
|
3
DEV/DEV1.1/CM3/Q3_Réduction/Q3_Reduction.c~
Normal file
3
DEV/DEV1.1/CM3/Q3_Réduction/Q3_Reduction.c~
Normal file
@@ -0,0 +1,3 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
48
DEV/DEV1.1/CM3/Q3_Réduction/main.c
Normal file
48
DEV/DEV1.1/CM3/Q3_Réduction/main.c
Normal 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;
|
||||
}
|
48
DEV/DEV1.1/CM3/Q3_Réduction/main.c~
Normal file
48
DEV/DEV1.1/CM3/Q3_Réduction/main.c~
Normal 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);
|
||||
}
|
60
DEV/DEV1.1/CM3/Q3_Réduction/stack.c
Normal file
60
DEV/DEV1.1/CM3/Q3_Réduction/stack.c
Normal 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);
|
||||
}
|
22
DEV/DEV1.1/CM3/Q3_Réduction/stack.h
Normal file
22
DEV/DEV1.1/CM3/Q3_Réduction/stack.h
Normal 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 */
|
Reference in New Issue
Block a user