Raga mi sapete dire gli errori presenti nelle funzioni inseriscitesta e inseriscicoda? Vorrei imparare ad utilizzare il typedef (prima questo programma l'avevo scritto con i puntatori e funzionava alla perfezione) ma mi sfugge qualcosa... grazie in anticipo.
codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct numeri *nodo;
struct numeri{
int elemento;
nodo succ;
};
void inseriscitesta(nodo il);
void stampalista (nodo il);
void inseriscicoda(nodo il);
void distruggilista(nodo il);
void ricerca(nodo il, int z);
void cancellanodo(nodo il, int l);
void inserimentoordinato(nodo il);
int main(int argc, char *argv[])
{
int y;
nodo il=NULL;
il= malloc (sizeof (struct numeri));
il->succ=NULL;
printf ("Digita 1 per inserire un numero, altrimenti digita 0\n");
scanf ("%d", &y);
if (y==1)
{printf ("Inserisci il nuemero:\n");
scanf ("%d", &il->elemento);}
inseriscitesta(il);
stampalista (il);
distruggilista (il);
inserimentoordinato(il);
stampalista(il);
distruggilista (il);
inseriscicoda (il);
stampalista (il);
int l;
printf ("Inserisci il numero da cancellare\n");
scanf ("%d", &l);
cancellanodo (il, l);
stampalista (il);
inseriscicoda (il);
int z;
printf ("Inserisci il numero da cercare\n");
scanf ("%d", &z);
ricerca (il, z);
system("PAUSE");
return 0;
}
void inseriscitesta(nodo il){
int y;
printf ("Digita 1 per inserire un numero, altrimenti digita 0\n");
scanf ("%d",&y);
while (y==1)
{
nodo p2 = NULL;
p2= malloc (sizeof(struct numeri));
p2->succ=NULL;
printf ("Digita il numero da inserire:\n");
scanf ("%d", &p2->elemento);
p2->succ = il;
il = p2;
printf ("Digita 1 per inserire un numero, altrimenti digita 0\n");
scanf ("%d",&y);}}
void stampalista (nodo il){
while ( il!=NULL)
{
printf ("%d ---->", il->elemento);
il=il->succ;}}
void inseriscicoda(nodo il){
int m;
printf ("\nDigita 1 per inserire un numero, altrimenti digita 0\n");
scanf ("%d",&m);
while (m==1)
{
if (il==NULL){
nodo p2 = NULL;
p2= malloc (sizeof(struct numeri));
p2->succ=NULL;
printf ("Digita il numero da inserire:\n");
scanf ("%d", &p2->elemento);
p2->succ = il;
il = p2;}
else
{
nodo tm= il;
while (tm->succ!=NULL)
tm = tm->succ;
nodo nuovo= malloc(sizeof(struct numeri));
printf("Digita il numero\n");
scanf("%d", &nuovo->elemento);
nuovo->succ=NULL;
tm->succ=nuovo;}
printf ("Digita 1 per inserire un numero, altrimenti digita 0\n");
scanf ("%d",&m);}}
void distruggilista(nodo il){
nodo tmp = NULL;
while (il != NULL)
{
tmp= il->succ;
free (il);
il=tmp;}}
void ricerca (nodo il, int z){
while (il != NULL && z!=il->elemento)
il=il->succ;
if (il->elemento==z)
printf ("Il numero e' stato trovato\n");
else printf ("Il numero non e' stato trovato\n");}
void cancellanodo (nodo il, int l){
nodo nodoprecedente;
nodo nodocorrente;
nodo nodotemporaneo;
if (il->elemento == l){
nodotemporaneo = il;
il = il->succ;
free (nodotemporaneo);}
else{
nodoprecedente = NULL;
nodocorrente = il;
while(nodocorrente != NULL && nodocorrente->elemento != l){
nodoprecedente = nodocorrente;
nodocorrente = nodocorrente->succ;}
if (nodocorrente != NULL) {
nodotemporaneo = nodocorrente;
nodoprecedente->succ = nodocorrente->succ;
free (nodotemporaneo);
}}}
void inserimentoordinato (nodo il){
nodo nodoprecedente;
nodo nodocorrente;
nodo nuovonodo;
int h;
printf ("Digita 1 per inserire un numero o 0 per terminare\n");
scanf ("%d", &h);
while (h==1){
int u;
nuovonodo = malloc(sizeof(struct numeri));
printf ("Digita il numero da inserire\n");
scanf ("%d",&u);
nuovonodo->elemento=u;
nodoprecedente=NULL;
nodocorrente=il;
while(nodocorrente!=NULL && u > nodocorrente->elemento){
nodoprecedente=nodocorrente;
nodocorrente=nodocorrente->succ;}
if (nodoprecedente == NULL){
nuovonodo->succ = il;
il=nuovonodo;}
else {
nodoprecedente->succ=nuovonodo;
nuovonodo->succ=nodocorrente;}
printf ("Digita 1 per inserire un numero o 0 per terminare\n");
scanf ("%d", &h);}}