LISTE

di il
2 risposte

LISTE

#include <stdio.h>
#include <stdlib.h>

// struttura dati
struct node_t{
int value;
struct node_t * next;
};


// inserimento nella lista di un intero in ordine crescente

struct node_t* inserimento_ordinato(struct node_t * lista, int num){
struct node_t *tmp, *prox;

tmp = (struct node_t*) malloc(sizeof(struct node_t));
if(tmp != NULL){
tmp->value=num;
if(!lista){
tmp->next=lista;
lista=tmp;
}
else
if(lista->value>=num){
tmp->next=lista;
lista=tmp;
}
else
if(lista->next==NULL){
tmp->next=NULL;
lista->next=tmp;
}
else{

for(prox=lista;prox->next!=NULL && prox->next->value<num;prox=prox->next);
tmp->next=prox->next;
prox->next=tmp;
}
}

else
printf("Memoria esaurita!\n");
return lista;
}

// creo una lista ordinata con i soli valori strettamente compresi tra min e max

struct node_t* selectitems(struct node_t * lista, int min, int max){
printf("sono qui");
struct node_t* temp,*new=NULL;
temp=lista;
int val;

while(temp->next!=NULL){
if(temp->value<=max && temp->value>=min){
val=temp->value;
new=inserimento_ordinato(new,val);
}
}
return new;


}


// stampo la lista

void stampa_lista(struct node_t * n){

while(n!=NULL){
printf("%d",n->value);
n=n->next;
}




}

// inserimento in coda: usato nel main per creare la lista di partenza. Funzione completa.

struct node_t * inserisciInCoda(struct node_t * lista, int num){
struct node_t *prec;
struct node_t *tmp;

tmp = (struct node_t *) malloc(sizeof(struct node_t));
if(tmp != NULL){
tmp->next = NULL;
tmp->value = num;
if(lista == NULL)
lista = tmp;
else{
/*raggiungi il termine della lista*/
for(prec=lista;prec->next!=NULL;prec=prec->next);
prec->next = tmp;
}
} else
printf("Memoria esaurita!\n");
return lista;
}


int main(){
struct node_t * head=NULL;
struct node_t * new=NULL;
int min;
int max;

head = inserisciInCoda(head, 1);
head = inserisciInCoda(head, 3);
head = inserisciInCoda(head, 5);
head = inserisciInCoda(head, 3);
head = inserisciInCoda(head, 7);
head = inserisciInCoda(head, 2);


printf("\n Lista originale: ");
stampa_lista(head);

printf("\n Inserisci i due valori min e max: ");
scanf("%d %d", &min, &max);

if(min<=max){

new=selectitems(head,2,4);
}
else
new=selectitems(head,max,min);
printf("\n Lista creata: ");
stampa_lista(new);

return 0;


}

2 Risposte

  • Re: LISTE

    QUALCUNO SAPREBBE DIRMI DOVE HO SBAGLIATO GRAZIE
    IL PROBLEMA STA DOPO L'INSERIMENTO DI MIN E MAX, NON VA PIÙ AVANTI
  • Re: LISTE

    La linea

    while (temp->next != NULL) {

    ripete sempre il ciclo e non può terminare mai.


    P.S. Usa i tag CODE per inserire il codice nel forum e non scrivere in maiuscolo
Devi accedere o registrarti per scrivere nel forum
2 risposte