Buonasera, devo inserire un elemento in una lista ordinata e non, in lista non ordinata non ci sono problemi, quando devo inserire nella lista ordinata e voglio inserire un numero maggiore di tutti gli elementi presenti, viene inserito 1, non capisco dove sia il problema, anche perché a volte funziona correttamente, ma la maggior parte delle volte viene inserito 1 o 0. Posto solo le parti di codice della struttura, inserimento e richiamo della funzione.
Struttura lista:
#define DIM 20
typedef //definizione del tipo lista
struct{
int i;
int arrayLista[DIM];
} TipoLista;
Funzioni di creazione spazio e inserimento:
void CreaSpazio(TipoLista *Lista, int x, int y){ //funzione spostamento elementi verso destra
for(Lista->i=x;Lista->i>y-1;Lista->i--){
Lista->arrayLista[Lista->i]=Lista->arrayLista[Lista->i-1];
}
}
void Inserimento(TipoLista *TLista, TipoLista *TListaOrd, int *p){ //funzione di inserimento di un elemento nella lista
int k; //variabile interna di posizionamento in lista non ordinata
int A; //numero da inserire
printf("Digitare il numero da inserire\n"); //numero da inserire
scanf("%d", &A);
fflush(stdin);
printf("Digitare in quale posizione inserire il numero\n"); //posizione nella quale inserire il numero
scanf("%d", &k);
fflush(stdin);
*p=*p+1; //creazione spazio
CreaSpazio(TLista, *p, k);
TLista->i=k-1;
TLista->arrayLista[TLista->i]=A; //inserimento del numero nella lista non ordinata
//inserimento in lista ordinata
int pos=*p; //variabile interna di posizionamento in lista ordinata
bool iter=true; //verifica iterazione
TListaOrd->i=0;
while((TListaOrd->i<*p) && (iter==true)){
if(A<TListaOrd->arrayLista[TListaOrd->i]){ //verifica della posizione in cui inserire l'elemento
pos=TListaOrd->i;
iter=false;
}
TListaOrd->i++;
}
CreaSpazio(TListaOrd, *p, pos); //creazione spazio
TListaOrd->i=pos;
TListaOrd->arrayLista[TListaOrd->i]=A; //inserimento del numero nella lista ordinata
}
Richiamo della funzione:
main() {
TipoLista Lista;
TipoLista ListaOrdinata;
int z;
Inserimento(&Lista, &ListaOrdinata, &z);