Il 0% ha trovato utile questo documento (0 voti)
1 visualizzazioni3 pagine

Info

infi
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato TXT, PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
1 visualizzazioni3 pagine

Info

infi
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato TXT, PDF, TXT o leggi online su Scribd
Sei sulla pagina 1/ 3

#include <iostream>

using namespace std;

struct NodoLista {
int valore;
int prossimo;
};

#define DIM 10

void InizializzaLista(NodoLista lista[], int &indiceTesta, int &indiceLibero);


void StampaLista(NodoLista lista[], int indiceTesta);
void InserisciInTesta(NodoLista lista[], int &indiceTesta, int &indiceLibero, int
valore);
void InserisciInCoda(NodoLista lista[], int &indiceTesta, int &indiceLibero, int
valore);
void InserisciInOrdine(NodoLista lista[], int &indiceTesta, int &indiceLibero, int
valore);

int main() {
int indiceTesta, indiceLibero;
int valore = 0;
NodoLista lista[DIM];

InizializzaLista(lista, indiceTesta, indiceLibero);


StampaLista(lista, indiceTesta);
InserisciInTesta(lista, indiceTesta, indiceLibero, valore);
InserisciInCoda(lista, indiceTesta, indiceLibero, valore + 1);
StampaLista(lista, indiceTesta);
InserisciInOrdine(lista, indiceTesta, indiceLibero, valore + 2);
StampaLista(lista, indiceTesta);

return 0;
}

void InizializzaLista(NodoLista lista[], int &indiceTesta, int &indiceLibero) {


indiceTesta = -1; // La lista è inizialmente vuota
indiceLibero = 0; // Inizia dalla posizione 0

for (int i = 0; i < DIM; i++) {


lista[i].valore = 0;
lista[i].prossimo = i + 1;
}
lista[DIM - 1].prossimo = -1; // L'ultimo elemento non punta a nulla
}

void StampaLista(NodoLista lista[], int indiceTesta) {


int indiceCorrente = indiceTesta;
if (indiceTesta == -1) {
cout << "La lista è vuota." << endl;
} else {
while (indiceCorrente != -1) {
cout << lista[indiceCorrente].valore << " ";
indiceCorrente = lista[indiceCorrente].prossimo;
}
cout << endl;
}
}
void InserisciInTesta(NodoLista lista[], int &indiceTesta, int &indiceLibero, int
valore) {
if (indiceLibero == -1) {
cout << "Errore: La lista è piena." << endl;
} else {
int nuovoNodo = indiceLibero;
indiceLibero = lista[indiceLibero].prossimo;

lista[nuovoNodo].valore = valore;
lista[nuovoNodo].prossimo = indiceTesta;
indiceTesta = nuovoNodo;
}
}

void InserisciInCoda(NodoLista lista[], int &indiceTesta, int &indiceLibero, int


valore) {
if (indiceLibero == -1) {
cout << "Errore: La lista è piena." << endl;
} else {
int nuovoNodo = indiceLibero;
indiceLibero = lista[indiceLibero].prossimo;

lista[nuovoNodo].valore = valore;
lista[nuovoNodo].prossimo = -1;

if (indiceTesta == -1) {
indiceTesta = nuovoNodo;
} else {
int indiceCorrente = indiceTesta;
while (lista[indiceCorrente].prossimo != -1) {
indiceCorrente = lista[indiceCorrente].prossimo;
}
lista[indiceCorrente].prossimo = nuovoNodo;
}
}
}

void InserisciInOrdine(NodoLista lista[], int &indiceTesta, int &indiceLibero, int


valore) {
if (indiceLibero == -1) {
cout << "Errore: La lista è piena." << endl;
} else if (indiceTesta == -1 || lista[indiceTesta].valore >= valore) {
InserisciInTesta(lista, indiceTesta, indiceLibero, valore);
} else {
int nuovoNodo = indiceLibero;
indiceLibero = lista[indiceLibero].prossimo;

int indiceCorrente = indiceTesta;


int indicePrecedente = -1;

while (indiceCorrente != -1 && lista[indiceCorrente].valore < valore) {


indicePrecedente = indiceCorrente;
indiceCorrente = lista[indiceCorrente].prossimo;
}

lista[nuovoNodo].valore = valore;
lista[nuovoNodo].prossimo = indiceCorrente;
lista[indicePrecedente].prossimo = nuovoNodo;
}
}

Potrebbero piacerti anche