Esercizio Si legga una sequenza di numeri interi da tastiera (terminatore: 0), quindi: Creare lista...

7
Esercizio Si legga una sequenza di numeri interi da tastiera (terminatore: 0), quindi: Creare lista L1 con inserimento in testa; cons Creare lista L2 con inserimento in coda; cons_tail Stampa delle due liste; showlist Ricerca dell’elemento n nella lista; member Calcolo della lunghezza della lista; length Calcolo della somma degli interi; sumlist Estrapolazione di una sotto-lista, dalla posizione k alla fine. sublist

Transcript of Esercizio Si legga una sequenza di numeri interi da tastiera (terminatore: 0), quindi: Creare lista...

Page 1: Esercizio Si legga una sequenza di numeri interi da tastiera (terminatore: 0), quindi: Creare lista L1 con inserimento in testa; cons Creare lista L2 con.

Esercizio

Si legga una sequenza di numeri interi da tastiera (terminatore: 0), quindi:• Creare lista L1 con inserimento in testa; cons• Creare lista L2 con inserimento in coda; cons_tail• Stampa delle due liste; showlist• Ricerca dell’elemento n nella lista; member • Calcolo della lunghezza della lista; length• Calcolo della somma degli interi; sumlist• Estrapolazione di una sotto-lista, dalla posizione k alla fine. sublist

Page 2: Esercizio Si legga una sequenza di numeri interi da tastiera (terminatore: 0), quindi: Creare lista L1 con inserimento in testa; cons Creare lista L2 con.

Esercizio

Si legga una sequenza di numeri interi da tastiera (terminatore: 0), quindi:• Creare lista L1 con inserimento in testa;• Creare lista L2 con inserimento in coda;• Stampa delle due liste;• Ricerca dell’elemento n nella lista;• Calcolo della lunghezza della lista;• Calcolo della somma degli interi;• Estrapolazione di una sotto-lista, dalla posizione k alla fine.

Ricorsive o ITerative?

Page 3: Esercizio Si legga una sequenza di numeri interi da tastiera (terminatore: 0), quindi: Creare lista L1 con inserimento in testa; cons Creare lista L2 con.

Esercizio

Si legga una sequenza di numeri interi da tastiera (terminatore: 0), quindi:• Creare lista L1 con inserimento in testa;• Creare lista L2 con inserimento in coda;• Stampa delle due liste; R+IT• Ricerca dell’elemento n nella lista; R+IT• Calcolo della lunghezza della lista; R+IT• Calcolo della somma degli interi; R+IT• Estrapolazione di una sotto-lista, dalla posizione k alla fine. R+IT

Ricorsive o ITerative?

Page 4: Esercizio Si legga una sequenza di numeri interi da tastiera (terminatore: 0), quindi: Creare lista L1 con inserimento in testa; cons Creare lista L2 con.

Esercizio

main.c lista.c

Lista.h

Come definire due funzioni che fanno la stessa cosa in C ma in modi diversi??

Page 5: Esercizio Si legga una sequenza di numeri interi da tastiera (terminatore: 0), quindi: Creare lista L1 con inserimento in testa; cons Creare lista L2 con.

Esercizio

main.c lista.c

Lista.h

Banalmente usando un nome di funzione diverso (member, member_r)

Altro modo?

Page 6: Esercizio Si legga una sequenza di numeri interi da tastiera (terminatore: 0), quindi: Creare lista L1 con inserimento in testa; cons Creare lista L2 con.

Esercizio

main.c

#ifndef RECURSIVE// Tutte le funzioni NON// ricorsive#endif

#ifdef RECURSIVE// Tutte le funzioni // ricorsive#endif

lista.c

Lista.h#define RECURSIVE

Banalmente usando un nome di funzione diverso (member, member_r)Meno banalmente: usando istruzioni al precompilatore (#ifdef, #ifndef)

Differenza??

Page 7: Esercizio Si legga una sequenza di numeri interi da tastiera (terminatore: 0), quindi: Creare lista L1 con inserimento in testa; cons Creare lista L2 con.

Esercizio

Lista.h

#define RECURSIVE

typedef struct node{int n;struct node *next;

} listNode;typedef listNode* list;

list cons(int n, list l);list consTail(int n, list l);

int sumList(list l); //R+ITvoid showlist(list l); //R+ITint length(list l); //R+ITint member(int n, list l); //R+ITlist subList(int k, list l); //R+IT