• Non ci sono risultati.

Programmazione 1 – Date due liste cancellare dalla seconda gli elementi non presenti nella prima

N/A
N/A
Protected

Academic year: 2021

Condividi "Programmazione 1 – Date due liste cancellare dalla seconda gli elementi non presenti nella prima"

Copied!
1
0
0

Testo completo

(1)

Programmazione 1 – Date due liste cancellare dalla seconda gli elementi non presenti nella prima

Leggere n e m e generare due liste di n e m numeri casuali compresi tra 1 e 30 e stamparle. La seconda lista, lunga m, prevede due campi, uno per il dato e un altro per contenere il numero di volte che il dato compare nella prima lista. Se il dato non è presente nella prima lista l’elemento va cancellato dalla seconda lista. Dopo aver apportato le modifiche stampare la seconda lista.

IMPORTANTE: Organizzare il programma in funzioni. Non utilizzare liste ausiliarie, non introdurre variabili globali.

Esempio 1.

n=5, m=4

prima lista: 23 --> 15 --> 4 --> 8 --> 15 --> NULL seconda lista prima dell'elaborazione:

<4, 0> --> <17, 0> --> <15, 0> --> <25, 0> --> NULL seconda lista dopo l'elaborazione:

<4, 1> --> <15, 2> --> NULL

Esempio 2.

n=3, m=6

prima lista: 7 --> 14 --> 19 --> NULL seconda lista prima dell'elaborazione:

<13, 0> --> <11, 0> --> <15, 0> --> <5, 0> --> <18, 0> --> NULL seconda lista dopo l'elaborazione:

NULL

(2)

#include <stdlib.h>

#include <stdio.h>

#include <time.h>

struct nodo1 *crealista1() ;

void printlista1(struct nodo1 *p) ; struct nodo2 *crealista2(void);

void printlista2(struct nodo2 *primo2);

struct nodo1 { int dato;

struct nodo1 *next;

};

struct nodo2 { int dato, cont;

struct nodo2 *next;

};

main() {

struct nodo1 *primo1, *p;

struct nodo2 *primo2, *p0, *p1;

primo1 = crealista1();

printlista1 (primo1);

primo2 = crealista2();

printf ("\nseconda lista prima dell'elaborazione: \n\n");

printlista2(primo2);

p0 = NULL;

p1 = primo2;

while (p1 != NULL) { p = primo1;

while (p != NULL) {

if (p1->dato == p->dato)

p1->cont = p1->cont + 1;

p = p->next;

}

if (p1->cont == 0) { if (p0 == NULL) {

primo2 = p1->next;

free(p1);

p1 = primo2;

(3)

} else {

p0->next = p1->next;

free(p1);

p1 = p0->next;

} } else {

p0 = p1;

p1 = p1->next;

} }

printf ("\nseconda lista dopo l'elaborazione: \n\n");

printlista2(primo2);

system ("pause");

return(0);

}

struct nodo1 *crealista1() {

struct nodo1 *p, *start, *last;

int i, n, m, x;

start = NULL;

printf("quanti nodi ha la prima lista ? ");

scanf("%d", &n);

srand(time(NULL));

for (i=0; i<n; i++) { x = rand() % 30 + 1;

p = (struct nodo1 *) malloc(sizeof(struct nodo1));

if (i == 0) start = p;

else

last->next = p;

p->dato = x;

p->next = NULL;

last = p;

}

printf ("\n\n");

return(start);

(4)

}

struct nodo2 *crealista2() {

int m, x, i;

struct nodo2 *p, *start, *last;

srand(time(NULL));

printf("\nquanti nodi ha la seconda lista ? ");

scanf("%d", &m);

for (i=0; i<m; i++) { x = rand() % 30 + 1;

p = (struct nodo2 *) malloc(sizeof(struct nodo2));

if (i == 0)

start = p;

else

last->next = p;

p->dato = x;

p->cont = 0;

p->next = NULL;

last = p;

}

printf ("\n\n");

return (start);

}

void printlista1(struct nodo1 *p) {

while (p != NULL) {

printf("%d --> ", p->dato);

p = p->next;

}

printf("NULL\n\n");

}

void printlista2(struct nodo2 *primo2) {

while (primo2 != NULL) {

printf("(%d, %d) --> ", primo2->dato, primo2->cont);

primo2 = primo2->next;

}

printf("NULL\n\n");

(5)

return;

}

Riferimenti

Documenti correlati

Per accedere alla prova pratica occorre superare quella teorica che quindi occorre svolgere come prima prova.. L'iscrizione all'esame va fatta

Punteggi: punti 3 per risposta esatta, punti 0 per risposta non crocettata, punti -1 per risposta

In questa tipologia di test l’osservatore divide i cartoncini in nove sezioni dove alla n 1 vengono raccolti tutti i 10 comportamenti che non corrispondono affatto al

Non abbiamo quindi modo di modificare le chiavi degli elementi della lista in modo da essere sicuri di riconoscere gli elementi su cui si ` e gi` a passati.. Proviamo dunque

Si lancia un dado non truccato per 6 volte.Calcolare, specificando ogni volta quale legge di probabilita' modella il problema :2. La probabilita' di avere 6 volte un numero minore

Si lancia un dado non truccato per 6 volte.Calcolare, specificando ogni volta quale legge di probabilita' modella il problema :2. La probabilita' di avere 6 volte un numero minore

Sembra che sia « vivo » e agisce come potente stimolo sulla coscienza che lotta per esaurirne tutti i contenuti possibili. Quando questo processo è giunto al termine, si considera

RAGIONE SOCIALE CODICE FISCALE IL PROGETTO CONTRIBUTO AMMESSO.. LIQUIDAZIONE CUP