A voir également:
- Ajouter un element au debut d'une liste chainée en c
- Liste déroulante excel - Guide
- Triez la liste comme sur cette illustration (attention, on ne voit que le début …). quel est le mot formé par les 6 dernières lettres de la colonne code ? - Forum Excel
- Ajouter un élément dans une liste chaînée en c - Astuces et Solutions
- Frédéric cherche à faire le buzz sur les réseaux sociaux. il a ajouté une image de manchots sur une image de plage. retrouvez l'image originale de la plage. que cachent les manchots ? ✓ - Forum Windows
- Annuaire inversé gratuit liste rouge - Forum Internet / Réseaux sociaux
4 réponses
merci , pour ton lien mais il est un peut compliqué si vous avez un autre lien ou une autre méthode laisser la et je vais voir .........merci pour votre aide
rimounatn
Messages postés
93
Date d'inscription
jeudi 24 décembre 2009
Statut
Membre
Dernière intervention
7 septembre 2010
15
30 déc. 2009 à 20:59
30 déc. 2009 à 20:59
bonjour, j'espere que je vais t'aidé voici des fonctions sur les listes chainée (simple):
#include<stdio.h>
#include<stdlib.h>
struct element{
int valeur;
struct element * suivant;
};
typedef struct element element;
typedef element* liste;
liste ajouterEnTete(liste L, int v){
liste temp = NULL;
temp = (liste)malloc(sizeof(element));
temp->valeur = v;
if(L==NULL){
//Liste Vide
temp->suivant = NULL;
}else{
temp->suivant=L;
}
return temp;
}
liste ajouterEnFinIterative(liste L, int v){
element * temp = NULL;
temp = (liste)malloc(sizeof(element));
temp->valeur = v;
temp->suivant = NULL;
//parcourir iterativement jusK la fin
element * aux = L;
while(aux->suivant != NULL) {
aux=aux->suivant;
}
aux->suivant = temp;
return L;
}
//ici c'est une procedure donc on passe l'adresse de la liste et non pas la liste elle même (passage par adresse)
void ajouterEnFinRecursive(liste* L, int v){
if(*L == NULL){
element * temp = NULL;
temp = (liste)malloc(sizeof(element));
temp->valeur = v;
temp->suivant = NULL;
*L=temp;
//printf("cas L null element valeur %i ajouté\n",v);
}else if((*L)->suivant == NULL){
element * temp = NULL;
temp = (liste)malloc(sizeof(element));
temp->valeur = v;
temp->suivant = NULL;
(*L)->suivant = temp;
//printf("cas L->suivant null element valeur %i ajouté\n",v);
}else{
liste ptr = (*L)->suivant;
ajouterEnFinRecursive(&ptr,v);
}
}
liste SupprimerElementEnTete(liste L){
if(L==NULL){
return NULL;
}else{
liste tmp;
tmp = L->suivant;
free(L);
return tmp;
}
}
liste SupprimerElementEnFin(liste L){
if(L==NULL){//liste vide
return NULL;
}else if(L->suivant == NULL){//liste à 1 element
free(L);
return NULL;
}else{
liste ptrDernierElem = L;
liste ptrAvantDernierElem;
while(ptrDernierElem->suivant != NULL) {
ptrAvantDernierElem = ptrDernierElem;
ptrDernierElem = ptrDernierElem->suivant;
}
ptrAvantDernierElem->suivant=NULL;
free(ptrDernierElem);
return L;
}
}
liste SupprimerElement_i(liste L,int index){
if(index==0){//premier elem
return SupprimerElementEnTete(L);
}else{
liste ptrSurElem = L;
liste ptrAvantElem;
int i=0;
while(ptrSurElem->suivant != NULL && i!=index) {
ptrAvantElem = ptrSurElem;
ptrSurElem = ptrSurElem->suivant;
i++;
}
if(i==index){//l'element i existe
ptrAvantElem->suivant=ptrSurElem->suivant;
free(ptrSurElem);
return L;
}else{//index superieur à la taille de la liste
return L;// pas de changement
}
}
}
int nbOccurences_val(liste L, int val){
liste ptr = L;
int nbOcc_val = 0;
while(ptr != NULL){
if(ptr->valeur == val){
nbOcc_val++;
}
ptr = ptr->suivant;
}
return nbOcc_val;
}
int tailleListeIterative(liste L){
element* ptr;
int taille=0;
ptr = L;
while(ptr != NULL){
ptr = ptr->suivant;
taille++;
}
return taille;
}
int tailleListeRecursive(liste L){
if(L == NULL){
return 0;
}else{
return 1+tailleListeRecursive(L->suivant);
}
}
int estVide(liste L){
//classique
//return (L == NULL);
return (L==NULL)? 1 : 0;
}
void afficherListe(liste L){
element* ptr;
int i=0;
ptr = L;
while(ptr != NULL){
printf("element num %i = %i\n",i,ptr->valeur);
i++;
ptr = ptr->suivant;
}
}
element* Element_i(liste L, int index){
element* ptrSurElem = L;
int i=0;
while(ptrSurElem->suivant != NULL && i!=index) {
ptrSurElem = ptrSurElem->suivant;
i++;
}
if(i==index){//l'element i existe
return ptrSurElem;
}else{//index superieur à la taille de la liste
return NULL;// pas de changement
}
}
int main(){
liste maListe = NULL;
int i=0;
for(i=0;i<10;i++){
ajouterEnFinRecursive(&maListe,i);
}
printf("Liste au debut:\n");
afficherListe(maListe);
printf("la taille par recursivité est %i\n",tailleListeRecursive(maListe));
printf("la taille par maniere iterative est %i\n",tailleListeIterative(maListe));
return 0;
}
bon courage
#include<stdio.h>
#include<stdlib.h>
struct element{
int valeur;
struct element * suivant;
};
typedef struct element element;
typedef element* liste;
liste ajouterEnTete(liste L, int v){
liste temp = NULL;
temp = (liste)malloc(sizeof(element));
temp->valeur = v;
if(L==NULL){
//Liste Vide
temp->suivant = NULL;
}else{
temp->suivant=L;
}
return temp;
}
liste ajouterEnFinIterative(liste L, int v){
element * temp = NULL;
temp = (liste)malloc(sizeof(element));
temp->valeur = v;
temp->suivant = NULL;
//parcourir iterativement jusK la fin
element * aux = L;
while(aux->suivant != NULL) {
aux=aux->suivant;
}
aux->suivant = temp;
return L;
}
//ici c'est une procedure donc on passe l'adresse de la liste et non pas la liste elle même (passage par adresse)
void ajouterEnFinRecursive(liste* L, int v){
if(*L == NULL){
element * temp = NULL;
temp = (liste)malloc(sizeof(element));
temp->valeur = v;
temp->suivant = NULL;
*L=temp;
//printf("cas L null element valeur %i ajouté\n",v);
}else if((*L)->suivant == NULL){
element * temp = NULL;
temp = (liste)malloc(sizeof(element));
temp->valeur = v;
temp->suivant = NULL;
(*L)->suivant = temp;
//printf("cas L->suivant null element valeur %i ajouté\n",v);
}else{
liste ptr = (*L)->suivant;
ajouterEnFinRecursive(&ptr,v);
}
}
liste SupprimerElementEnTete(liste L){
if(L==NULL){
return NULL;
}else{
liste tmp;
tmp = L->suivant;
free(L);
return tmp;
}
}
liste SupprimerElementEnFin(liste L){
if(L==NULL){//liste vide
return NULL;
}else if(L->suivant == NULL){//liste à 1 element
free(L);
return NULL;
}else{
liste ptrDernierElem = L;
liste ptrAvantDernierElem;
while(ptrDernierElem->suivant != NULL) {
ptrAvantDernierElem = ptrDernierElem;
ptrDernierElem = ptrDernierElem->suivant;
}
ptrAvantDernierElem->suivant=NULL;
free(ptrDernierElem);
return L;
}
}
liste SupprimerElement_i(liste L,int index){
if(index==0){//premier elem
return SupprimerElementEnTete(L);
}else{
liste ptrSurElem = L;
liste ptrAvantElem;
int i=0;
while(ptrSurElem->suivant != NULL && i!=index) {
ptrAvantElem = ptrSurElem;
ptrSurElem = ptrSurElem->suivant;
i++;
}
if(i==index){//l'element i existe
ptrAvantElem->suivant=ptrSurElem->suivant;
free(ptrSurElem);
return L;
}else{//index superieur à la taille de la liste
return L;// pas de changement
}
}
}
int nbOccurences_val(liste L, int val){
liste ptr = L;
int nbOcc_val = 0;
while(ptr != NULL){
if(ptr->valeur == val){
nbOcc_val++;
}
ptr = ptr->suivant;
}
return nbOcc_val;
}
int tailleListeIterative(liste L){
element* ptr;
int taille=0;
ptr = L;
while(ptr != NULL){
ptr = ptr->suivant;
taille++;
}
return taille;
}
int tailleListeRecursive(liste L){
if(L == NULL){
return 0;
}else{
return 1+tailleListeRecursive(L->suivant);
}
}
int estVide(liste L){
//classique
//return (L == NULL);
return (L==NULL)? 1 : 0;
}
void afficherListe(liste L){
element* ptr;
int i=0;
ptr = L;
while(ptr != NULL){
printf("element num %i = %i\n",i,ptr->valeur);
i++;
ptr = ptr->suivant;
}
}
element* Element_i(liste L, int index){
element* ptrSurElem = L;
int i=0;
while(ptrSurElem->suivant != NULL && i!=index) {
ptrSurElem = ptrSurElem->suivant;
i++;
}
if(i==index){//l'element i existe
return ptrSurElem;
}else{//index superieur à la taille de la liste
return NULL;// pas de changement
}
}
int main(){
liste maListe = NULL;
int i=0;
for(i=0;i<10;i++){
ajouterEnFinRecursive(&maListe,i);
}
printf("Liste au debut:\n");
afficherListe(maListe);
printf("la taille par recursivité est %i\n",tailleListeRecursive(maListe));
printf("la taille par maniere iterative est %i\n",tailleListeIterative(maListe));
return 0;
}
bon courage