#include <stddef.h> #include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#define DEBUG 1
struct liste_s {
int val;
struct liste_s *next;
};
typedef struct liste_s *liste_t;
liste_t insereTete(int element, liste_t Q) {
if (DEBUG) printf ("Dans insereTete\n");
liste_t L;
L = (liste_t)malloc(sizeof(struct liste_s)); L->val = element;
L->next = Q;
return L;
}
liste_t insereQueue(int element, liste_t Q) {
liste_t L, tmp=Q;
L = (liste_t)malloc(sizeof(struct liste_s)); L->val = element;
L->next = NULL;
if (Q == NULL){
return L;
}
while (tmp->next != NULL){
tmp = tmp->next;
}
tmp->next = L;
return Q;
}
liste_t retourPosition(liste_t L, int pos) {
if (DEBUG) printf ("Dans retourPosition\n");
liste_t retour;
if (pos==0){
if (DEBUG) printf ("->position en tete\n");
return L;
}
else{
while (pos>0 && L != NULL){
retour=L;
L = L->next;
pos--;
}
}
if (pos==0) {
if (L==NULL) {
if (DEBUG) printf ("->position en queue\n ");
return NULL;
}
else {
if (DEBUG) printf("->trouve dans la liste ok\n");
return retour;
}
}
else{
if (DEBUG) printf ("->la position est trop grand mis en queue\n");
return NULL;
}
}
liste_t inserePosition(liste_t liste, int pos,int element) {
if (DEBUG) printf ("Dans inserePosition\n");
liste_t tmp;
liste_t L;
tmp=retourPosition(liste,pos);
if (pos==0){ if (DEBUG) printf ("-> Choix d inserer en tete ");
return insereTete(element,liste);
}
else {
if (tmp==NULL){
if (DEBUG) printf ("-> Choix d inserer en queue ");
return insereQueue(element,liste);
}
else {
if (DEBUG) printf ("-> Choix d inserer en position %d ",pos);
L = (liste_t)malloc(sizeof(struct liste_s)); L->val = element;
L->next = tmp->next; tmp->next = L;
return liste;
}
}
}
liste_t supprimeTete(liste_t L) {
liste_t suivant = L;
if (L != NULL) { suivant= L->next;
free(L); }
return suivant;
}
liste_t supprimeListe(liste_t L) {
while (L != NULL){
L = supprimeTete(L);
}
return L;
}
void printListe(liste_t L) {
printf("\nliste = ");
while (L != NULL) {
printf("%d ->",L->val);
L = L->next;
}
printf("|\n");
}
int main() {
liste_t L;
L=NULL;
L = insereTete(1,insereTete(2,insereTete(4,insereTete(5,NULL))));
printListe(L);
L = insereQueue(7,(insereQueue(6,L)));
printListe(L);
printListe(L);
L= inserePosition(L,0,0);
printListe(L);
L= inserePosition(L,3,3);
printListe(L);
L= inserePosition(L,1,1);
printListe(L);
L= inserePosition(L,2,2);
printListe(L);
printf("\nSuppression de la tete:");
L = supprimeTete(L);
printListe(L);
printf("\nSuppression des elements de la liste:");
L = supprimeListe(L);
printListe(L);
system("PAUSE");
return 0;
}