Trasposta di matrice con liste

di il
5 risposte

Trasposta di matrice con liste

Salve, devo realizzare questo esercizio:
Realizzare l’operazione di trasposta di 1 matrice.
Il tipo di dato matrice deve essere rappresentato come una lista lineare.

Ho pensato di creare due strutture, una contenente la lista e un'altra contenente il numero delle righe e delle colonne.
Secondo voi è giusto il modo in cui ho strutturato il codice o si può fare di meglio?

typedef struct Nodo{
	int dato;
	struct Nodo *prox;
}Nodo;

typedef Nodo *Lista;

typedef struct{
	int righe;
	int colonne;
}matrice;

int main(void){
	Lista a; //lista contenente la matrice da trasporre
	Lista trasposta; //lista contenente la matrice trasposta
	matrice p; // dimensioni matrice da trasporre
	matrice t; //dimensioni matrice trasposta
	int Vett[DIM] = {1, 2, 3, 4, 5, 6};

	a = Inizializza(); //inizializza a NULL
	trasposta = Inizializza(); inizializza a NULL

	a = ScriviMatrice(a, &p, Vett); //viene inserito all'interno di "lista a" il vettore Vett e vengono scritte le dimensioni di questa matrice in 					
			                //"matrice p"
	StampaMatrice(a, p); //viene stampata la "lista a", leggendo le sue dimensioni da "matrice  p"

	trasposta = TraspostaMatrici(a, &t, p, trasposta);//viene inserita all'interno di "lista trasposta" la matrice trasposta che viene creata leggendo i 														
							// valori contenuti in "lista a", inoltre vengono scritte le dimensioni della matrice trasposta 
							// in "matrice t" 
	StampaMatrice(trasposta, t); //viene stampata la matrice trasposta leggendo i valori contenuti in "lista trasposta", leggendo le sue dimensioni
				  // da "matrice t"

	return 0;
}

5 Risposte

  • Re: Trasposta di matrice con liste

    Ciao, innanzitutto mi chiedo che senso ha svolgere un'operazione del genere sfruttando una lista?!
    Poi sicuro che la trasposizione non deve essere applicata sulla lista di partenza?

    Spark ha scritto:


    Secondo voi è giusto il modo in cui ho strutturato il codice o si può fare di meglio?
    Magari potresti anche adottare una struttura del genere:
    struct matrice_lista
    {
    	nodo *testa;
    	int righe;
    	int colonne;
    };
    in ogni caso tutto dipende da come vai ad implementare la funzione TraspostaMatrici().
  • Re: Trasposta di matrice con liste

    Utilizzo la lista per svolgere questo esercizio solo per esercitarmi, a tal proposito mi chiedo, quando è effettivamente utile utilizzare una lista?
  • Re: Trasposta di matrice con liste

    La lista è utile da utilizzare quando devi rappresentare pacchetti di dati il cui numero e/o posizione è suscettibile di variazione.
    In altri termini, quando non sai con quanti dati avrai a che fare.
    Con gli array puoi organizzare una mole n di dati, ma con n fissato a priori.
    Senza scendere nei dettagli, con le liste puoi variare questo numero n nel corso del programma.
    Ciò è possibile perchè nella lista ciascuno degli n "pacchetti" di dati (i record) è isolato dagli altri, collegato a questi ultimi tramite un puntatore. Il "primo" record punta al "secondo", il secondo al "terzo" e questo al "quarto", ma tramite la manipolazione dei puntatori puoi riconfigurare gli indirizzi e variare la sequenza di record, aggiungendo, togliendo o semplicemente riposizionando i record.
  • Re: Trasposta di matrice con liste

    Non si puó ovviare utilizzando un vettore di strutture che viene allocato tramite realloc ogni volta che si vuole aggiungere un dato?
  • Re: Trasposta di matrice con liste

    Spark ha scritto:


    Utilizzo la lista per svolgere questo esercizio solo per esercitarmi...
    Se lo scopo è esercitarti sulle liste ti consiglio di concentrarti su altre tipologie di esercizi. Per esempio potresti implementare funzioni per l'aggiunta in coda, per l'aggiunta in ordine, per l'eliminazione di un nodo, per lo scambio di due nodi, per l'inversione della lista, ecc...

    Spark ha scritto:


    Non si puó ovviare utilizzando un vettore di strutture che viene allocato tramite realloc ogni volta che si vuole aggiungere un dato?
    Si può fare tutto (o quasi), ma bisogna vedere davanti ad un dato problema quale tipo di struttura dati risulta preferibile, e intendo non solo per una questione di comodità del programmatore, ma anche di efficienza per il computer!
Devi accedere o registrarti per scrivere nel forum
5 risposte