ciao a tutti, premetto che sto appena capendo le liste ho provato ad implementare una lista di n elementi, ma l'output della lista che dovrebbe essere ordinata è sbagliato.
Questo è il codice:
codice:
#include<stdio.h>
#include<stdlib.h>
struct elemento{
int info;
struct elemento *next;
};
typedef struct elemento ELEMENTO;
ELEMENTO *crea_lista(int n);
ELEMENTO *somma(ELEMENTO*,ELEMENTO*);
void visualizza(ELEMENTO*);
void BubbleSort_lista(ELEMENTO *p,int n);
int main(){
int n;
scanf("%d",&n);
ELEMENTO *punta_lista;
punta_lista=malloc(sizeof(ELEMENTO));
printf("Inserisci gli elementi nella 1° lista: \n");
*punta_lista=*crea_lista(n);
BubbleSort_lista(punta_lista,n);
printf("\nLa lista ordinata è: \n");
visualizza(punta_lista);
return 0;
}
ELEMENTO *crea_lista(int n){
ELEMENTO *p,*paus;
int i;
if (n==0)
p=NULL;
else
{
// creazione del 1° nodo
p=malloc(sizeof(ELEMENTO));
printf("dammi l'informazine\n");
scanf("%d",&p->info);
paus=p;
}
for (i=1;i<n;i++){
paus->next=malloc(sizeof(ELEMENTO));
paus=paus->next;
printf("dammi l'informazine\n");
scanf("%d",&paus->info);
}
paus->next=NULL;
return p;
}
void BubbleSort_lista(ELEMENTO *p,int n){
ELEMENTO *sort;
if (n==0) return; // se lista vuota esci
else{
int flag,temp;
do {
flag=0;
for ( ;sort->next!=NULL;sort=sort->next){
if (sort->info>(sort->next)->info){
temp=sort->info;
sort->info=(sort->next)->info;
(sort->next)->info=temp;
flag=1;
}
}
}
while (flag); // finchè c'è almeno uno scambio, ricomincia il ciclo
}
}
void visualizza(ELEMENTO *p){
printf("Punta_lista---->");
while (p!=NULL){
printf(" %d ",p->info);
p=p->next;
}
printf(" NULL ");
}
forze in questa istruzione c'è qualcosa che non va?
codice:
for ( ;sort->next!=NULL;sort=sort->next){
Ringrazio tutti in anticipo.