begin process at 2012 05 29 21:19:09
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

probleme liste


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

probleme liste

vendredi 30 avril 2004 à 17:24:42 | probleme liste

bob82fr

hi,

j'ai un big probleme, j'ai le code suivant:

#include "list.h"


void list_init(LIST *l, int (*cmp)())
{
l->cmp = cmp;
l->first = (LIST_NODE*)0;
l->len = 0; // empty list, len = 0
}



static LIST_NODE * list_new_node(void *item)
{
LIST_NODE *ln;
if (!(ln = (LIST_NODE*) malloc(sizeof(LIST_NODE)))) {
printf("Unable to allocate more LIST_NODE\n");
exit(1);
}
ln->data = item;
ln->next = (LIST_NODE*)0;
return ln;
}



void *list_search(LIST * l, void *item)
{
LIST_NODE *cur;
if (!l->cmp) return 0; // if no cmp() function, never find item
for(cur = l->first; cur; cur = cur->next) if ((l->cmp)(cur->data, item) == 0) return cur->data; // found
return 0;
}




void list_add_tail(LIST *l, void *item)
{
LIST_NODE *ln, *prev;

if (l->len == 0) { // empty list
list_add_head(l, item);
} else {
ln = list_new_node(item);
// search for end of list
for (prev = l->first; prev->next; prev = prev->next);
prev->next = ln;
l->len++;
}
}



void list_add(LIST *l, void *item)
{
LIST_NODE *cur;
LIST_NODE *prev; // previous
LIST_NODE *ln;

if (!l->cmp) {
list_add_head(l, item); // if no cmp() function, add without sorting
return;
}

// build a new node to store pointer on data
ln = list_new_node(item);
l->len++;

if (!l->first){
//printf("add empty\n");
l->first = ln;
return;
}

if ((l->cmp)(item, l->first->data) < 0) {
//printf("add head\n");
ln->next = l->first;
l->first = ln;
return;
}

prev = l->first;

for (cur = l->first->next; cur; cur = cur->next) {
if ((l->cmp)(prev->data, item) <= 0) {
//printf("after or equal to prev\n");
if ((l->cmp)(item, cur->data) < 0) {
//printf("before cur\n");
//printf("insert\n");
ln->next = cur;
prev->next = ln;
return;
} else {
//printf("after or equal to cur\n");
}
} else {
//printf("before prev\n");
}
//printf("next\n");
prev = cur;
}

//printf("add tail\n");
prev->next = ln;
}

/* end of: list.c */









/*--------------------------------------------------------------
* File: list.h
*
* Purpose: Generic list management library
*
* Author: LESTER-UBS
*
* Date: November 2003
*------------------------------------------------------------*/

#ifndef _H_LIST_H_
#define _H_LIST_H_

// A node in the list
typedef struct list_node {
struct list_node * next; // pointer to next element in list
void * data; // pointer to data
} LIST_NODE;

// A list
typedef struct list {
LIST_NODE * first; // pointer to first node
int (*cmp)(); // pointer to comparison function (like strcmp())
int len; // number of items in the list
} LIST;


extern void list_init(LIST *l, int (*)());
extern void list_add(LIST *, void *);
extern void list_add_head(LIST *, void *);
extern void * list_search(LIST *, void *);
extern int list_len(LIST *);

#endif // _H_LIST_H_

/* end of: list.h */





et mon main

#include "list.h"
#include <stdio.h>
#include <string.h>

int main(){
LIST aList;

int i, a, *j;
char b;

list_init(&aList,0);

for (i=0;i<10;i++){
j = (int*)malloc(sizeof(int));
*j = i;

list_add(&aList, j);
}

a = list_len(&aList);
printf("taille=%d",a);

return 0;
}





C code a ete fais par un gas dont il faut que je reprenne le travail.
Cependant je pîge pas comment il a pu faire pour recuperer un element de ca liste...
En fait j'aimerai pouvoir recuperer la valeur d'un element de la liste en fonction de sa place.

Une sorte de getListe(position)
Generalement je fais du java et la c un peu delicat pour moi...


merci.
a+
samedi 1 mai 2004 à 18:27:45 | Re : probleme liste

JCDjcd


Tu n'as qu'a utiliser le listSearch pour retrouver un element de la liste
pour avoir le premier tu fais aList.next, pour le dernier aList.prev


Cette discussion est classée dans : item, void, node, list, cur


Répondre à ce message

Sujets en rapport avec ce message

ListeChaines et pointeur void [ par xtremejames183 ] Voil le topo: Une liste chaineestypedef struct list_st{    void   *data;    struct list_st   *next,}List;<b Erreur Template [ par yodasoft ] Bonjour , je suis nouveau sur ce site:J'ai une erreur sous Visual C++Il me met l'erreur suivante :guichet.obj : error LNK2001: unresolved external sym Problème avec liste chainée [ par MasterShadows ] Bonjour à tous ,alors voilà dans le cadre de mon tp de C je dois créer une liste simplement chainée tout ce qu'il y'a de plus générique.donc on nous d visu d'une structure [ par toni93330 ] Bonjour,Voila mon problème :j'utilise visual studio 2005 et le framework .NET. Dans mon programme principale j'inclus un fichier de définition qui con comment supprimer des item selectionner dans une list box? [ par raspa ] voilà le code que je test sous VISUAL C++ 6:void CFileInfoDlg::OnSupprimer() { for (int i=0;i { if (m_List2.GetSel(i) >0 ) { m_List2.DeleteString List view [ par melkiorlenecrarque ] Salut !Je m'embrouille avec les listview !!Quelqu'un pourrait-il me donner les lignes de code pour :Ajouter un Item à une colonne que j'ai réussi à cr Creation et ecriture dans un fichier en C++ [ par bjipowa ] Bonjour,voila je suis une noob en c++ mais je dois faire un prog pour mon BTS dans ce language, et je dois pour cela utiliser les fichiers.J'ai donc c Membres amies [ par gdefrance ] Bonsoir à tous, débutant en C++, j'ai besoin de votre aide pour trouver mon bug dans le programme.Voilà, je dois faire un exo avec un membre friend et [debutant]Operation de chaine encore :s [ par firemax ] Bonjour Certain reconaitrons ce code (surtout vecchio56) mais voila ca marche toujours pas et je ne comprend pas :'( Please helllppp Code : #in erreur constructeur [ par cgarbite ] Developpeur_Fou Je programme avec borland c++ J ai 2 classes. class TForm1 : public TForm { __published:    // Composants gérés par l'EDI


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,640 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales