Trie liste de saisit sans passer par une insertion

Nexouille Messages postés 5 Date d'inscription dimanche 28 avril 2002 Statut Membre Dernière intervention 2 juin 2002 - 1 juin 2002 à 12:26
Nexouille Messages postés 5 Date d'inscription dimanche 28 avril 2002 Statut Membre Dernière intervention 2 juin 2002 - 2 juin 2002 à 12:23
Voila je dois a partir d'un fichier prendre toute les ip qui s'y trouve dont on ne connait pas le nombre et je dois compter combien de fois elles apparaisent.Je dois comparer l'ip avec la date ,si l'ip est apparut avant 3min ,l'ip ne doit pas etre compter donc je ne peux pas trier en inserant un élément mon probleme est comment faire alors pour trier les IP.

//voila les structure que j'utilise

struct Date //structure dont on a besoin dans la structure requete
{
char Periode[12];
int Heure;
int Minute;
int Seconde;
char Jour[9];
};

struct adresse
{
int AdresseIP[4]; //taille maximum d'une adresse ip
Date Daterequette;
struct adresse *suiv; //liste chain‚e
};

typedef adresse *Requette;

**********************************************************
Fonction de saisit des donnees a partir d'un fichier log
void saisitIP(char fichier[],Requette *debut)
{

FILE *logfile;

int j;

char site;
char toto[14];
char tmp;
char Buffer[512];

*debut=NULL;

Requette Visite=NULL;

flushall();

logfile=fopen("nomdufichier","r");

while(!feof(logfile)) //on scanne tout le fichier
{
j=0;
Visite=(Requette)malloc(sizeof(*Visite));

fscanf(logfile,"%d.%d.%d.%d - - [",&Visite->AdresseIP[j],&Visite->AdresseIP[j+1],&Visite->AdresseIP[j+2],&Visite->AdresseIP[j+3]);

fgets(Visite->Daterequette.Periode,12,logfile); //on scanne la date

Visite->suiv=*debut;
*debut=Visite;

}

fclose(logfile);
}

//fonction qui compare si la liste est trié
Ben elle est crée est marche si la liste est triée


Voila j'aimerais savoir comment je peux trier les ip pour les ranger dans l'ordre croissant car j'ai aussi une fonctin qui affiche et qui compte ainsi les ip en prenant en compte la durée de 3Min mais je sais pas comment faire pour les trier. Je pensais les inserer et les classer comme ca mais je suis embete a cause de la prise en compte de la duree de visite (si <3min alors faut pas compter) donc je pense trie la liste apres toute la saisit mais comment faire ca sans passer par des tableaux vue qu'on ne connait pas le nombre d'ip.
Je met pas tout mon programme vu que c'est un projet qu'on a a rendre pas envie de me le faire pomper ^^
Merci

2 réponses

fced42 Messages postés 31 Date d'inscription dimanche 30 décembre 2001 Statut Membre Dernière intervention 3 septembre 2003
2 juin 2002 à 10:55
Moi personnelement, j'utiliserais une liste chaine pour represente ta liste triée. Pour ajouter une ip dans ta liste(tu prend que celle dont <3min), il faut faire une recherche. tu t'arretes lorsque tu es arrivé a la fin de ta liste, ou lorsque ton ip a inserer est inferieur a l'element courant. Mais pour que tu puisse l'inserer, il faut que tu retiennes le predecesseur. En algo ca donnerais :

ins = ton adresseIp a insere
a,p,b : des adresses

a <- la tete de ta liste
p <- nil
tantque a /= nil et ins > a.adresseIp faire
p <- a
a <- a.suiv
fintantque
allouer(b)
b->adresseIP = ins
selon p
p = nil : {tu inseres en tete}
b.suiv = nil
tete de liste = b
p /= nil : {tu insere avec le predecesseur}
b->suiv = p->suiv
p.suiv = b
finselon

Voila, j'espere que j'ai ete clair et que j'ai pas fais trop de fautes. Si t'as du mal a comprendre dis le moi, je t'expliquerai mieux.
0
Nexouille Messages postés 5 Date d'inscription dimanche 28 avril 2002 Statut Membre Dernière intervention 2 juin 2002
2 juin 2002 à 12:23
T'a été tres clair je vais essayer comme tu dit
Merci pour ta réponse
0
Rejoignez-nous