Salve a tutti!
Sto battagliando con una porzione di programma che non riesco a sconfiggere.
In pratica, devo costruire una lista nella quale devo inserire dei dati. Devo, poi, cercare i dati min/max su tale lista per poi salvarli in variabili globali. Il problema è che il codice che ho pensato non funziona e non capisco minimamente il perché. Gli errori sono, nello specifico:
1 - Nella funzione di scorrimento della lista, quando cerco di fare il confronto con node->data e biggestNode->data;
2 - nel file che apro col puntatore info, che non stampa nulla anche quando modifico lo scorrimento della lista.
Ecco il programma:
Dichiarazione dell'elemento della lista
codice:
///Dichiaro e definisco il tipo Node
typedef struct Node Node;
struct Node{
int data;
Node *prev;
Node *next;
};
Funzione di scorrimento della lista
codice:
///Definizione di funzione di cerca del nodo col dato più grande
void findBiggestNode(Node* node, FILE *infoFile){
///Alloco memoria per la variabile globale
biggestNode = malloc(sizeof(Node));
///Assegno il minimo al nodo più grande
biggestNode->data = 0;
///Ciclo che scorre la lista. Se l'elemento della lista considerato ha un valore più alto di biggestNode, allora memorizzo
///l'indirizzo dell'elemento della lista in biggestNode
while(node != NULL){
if(node->data > biggestNode->data){
biggestNode = node;
fprintf(infoFile, "Trovato nuovo valore massimo = %d\n\n", node->data);
}
///Aggiorno la lista
node = node->next;
}
}
Costruzione della lista
codice:
///Funzione di costruzione della lista
Node *addNode(Node *oldNode){
///Dichiaro l'elemento della lista da collegare
Node *newNode;
///Dò memoria al puntatore appena dichiarato
newNode = malloc(sizeof(Node));
///Assegno un numero casuale al campo data
newNode->data = rand() % 10;
///Collego l'ultimo elemento in modo che sia inserito in testa alla lista
oldNode->prev = newNode;
newNode->next = oldNode;
newNode->prev = NULL;
///Valore di ritorno della funzione
return newNode;
}
main() e dichiarazione della variabile globale
codice:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
///Dichiaro una variabile globale che conterrà il nodo col dato più grande
Node *biggestNode;
int main()
{
int i;
Node *node;
FILE *info;
///Dò memoria al puntatore appena dichiarato
node = malloc(sizeof(Node));
if(node == NULL){
printf("Error in memory allocation");
exit(EXIT_FAILURE);
}
///Costruisco la lista, composta da dieci elementi
for(i = 0; i < 10; i++){
node = addNode(node);
printf("%d\n", node->data);
}
info = fopen("c:/users/thisPC/desktop/nodeinfo.txt", "w");
if (info == NULL){
printf("Error while opening file.");
exit(EXIT_FAILURE);
}
///Chiamo la funzione findBiggestNode, che aggiorna la variabile globale biggestNode
findBiggestNode(node, info);
fclose(info);
return 0;
}
Mi aiutate a capire dove sbaglio?