Inserimento in una lista

di il
3 risposte

Inserimento in una lista

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);

3 Risposte

  • Re: Inserimento in una lista

    Non è una lista con puntatori, cosa rappresenta i nella struttura?

    E poi, se la lista è ordinata, perché chiedi la posizione in cui inserire il valore?
  • Re: Inserimento in una lista

    Con i indico la posizione dell'elemento nella lista, inserisco anche la posizione da inserire perché inserisco il numero sia nella lista ordinata che in quella non ordinata
  • Re: Inserimento in una lista

    Ma di quale elemento parli? Questa i nella struttura mi sembra inutile. Anzi mi sembra inutile la struttura.

    Stai usando un vettore al posto di una lista collegata con dei puntatori?

    E' un vettore ordinato, non una lista. E non si fornisce la posizione in cui inserire un dato, si controlla l'ordinamento e in base a quello si inserisce il valore.

    Sei sicuro di aver compreso bene cosa chiede il tuo esercizio?
Devi accedere o registrarti per scrivere nel forum
3 risposte