...

Strutture/Array e pila/coda in C++

by user

on
Category: Documents
34

views

Report

Comments

Transcript

Strutture/Array e pila/coda in C++
Strutture di dati
Una struttura è un insieme finito di variabili (dette campi) non
necessariamente dello stesso tipo, ognuna identificata con un nome
l’insieme dei campi è denominato record
Laboratorio di Informatica
sintassi
struct nome_struttura {
tipo1 nome_variabile1;
.........
tipon nome_variabilen;
}
5. Strutture / Array di oggetti / Pila&Coda in C++
La struttura definisce un nuovo tipo di dato
Corso di Laurea in Ingegneria Elettronica e Telecomunicazioni
A.A. 2013-2014
2° Semestre
Prof. Giovanni Pascoschi
Laboratorio di Informatica – A.A. 2013-2014
Strutture di dati
2
Strutture di dati
Dopo aver definito una variabile struttura, si accede ai singoli campi
mediante la notazione . (punto)
i campi di una struttura possono essere usati come qualunque variabile
dello stesso tipo
Una volta definito un tipo dati struttura, essa si comporta come
un qualsiasi altro tipo di dati. Si puo’ ad esempio:
assegnare una variabile struttura ad un’altra
far si’ che una funzione restituisca una struttura alla funzione
chiamante
passare strutture sia per valore che per referenza (riferimento)
esempio:
cd.prezzo=10;
cout<<cd.titolo;
cd.copie++;
Laboratorio di Informatica – A.A. 2013-2014
a cura di Pascoschi Giovanni
a cura di Pascoschi Giovanni
3
Laboratorio di Informatica – A.A. 2013-2014
a cura di Pascoschi Giovanni
4
Esempi strutture di dati
Tabelle di dati
La tabella di dati è un array di strutture
daticd cd1 = {“Toccata e fuga”, “Bach”, 30, sinfonia };
//uguaglianza tra strutture
daticd cd2 = cd1;
struct giorno {
int gg;
int mm;
int aa;
};
void stampa_cd(daticd x) {
// passaggio per valore
cout<<“x.autore<<x.titolo<<x.prezzo<<x.genere<<endl;
}
void prezzo_scontato(daticd& x) {
x.prezzo=x.prezzo * 80/100;
}
Laboratorio di Informatica – A.A. 2013-2014
struct daticd {
string titolo;
string autore;
float prezzo;
string genere;
struct giorno giorno_vendita;
};
struct daticd CD[100]; // tabella costituita da 100 CD
// passaggio per referenza
a cura di Pascoschi Giovanni
5
Istruzione typedef
a cura di Pascoschi Giovanni
6
Accesso agli elementi di una Tabella
per poter descrivere in maniera piu’ concisa un tipo struttura si puo’ usare la
parola chiave typedef
struct giorno {
int gg;
int mm;
int aa;
};
L’indice di una tabella puo’ essere una espressione costante intera o
comunque una qualsiasi espressione intera
Esempio di caricamento di una tabella:
for (int i=0; i< 500; i++) {
cin >> CD[i].titolo>> CD[i].autore >> CD[i].prezzo>> CD[i].genere;
cin >> CD[i].vendita.gg >> CD[i].vendita.mm >> CD[i].vendita.aa ;
}
struct daticd {
string titolo;
string autore;
float prezzo;
string genere;
struct giorno vendita;
};
typedef struct daticd cddata; //non definisce un nuovo tipo, ma un sinonimo!!!!
cddata CD[100]; // tabella costituita da 100 CD
Laboratorio di Informatica – A.A. 2013-2014
Laboratorio di Informatica – A.A. 2013-2014
a cura di Pascoschi Giovanni
7
Laboratorio di Informatica – A.A. 2013-2014
a cura di Pascoschi Giovanni
8
Array di oggetti
Strutture dati complesse
#include<iostream>
using namespace std;
class Persona {
public:
int id_persona;
int anno_nasc;
Persona() {
id_persona = 0;
anno_nasc = 0;
}
Persona(int id_pers, int anno) {
id-persona = id-pers;
anno_nasc = anno;
}
void stampa() {
cout <<id-persona << " " << anno_nasc << "\n";
}
};
Esempi di strutture dati complesse in C++:
int main() {
const int dim = 10;
Pila (Stack)
Coda (queue)
Liste semplici (semplicemente linkate) (in seguito)
Liste doppie (doppiamente linkate) (in seguito)
Persona a[dim];
// richiede il costruttore di default
for (int i = 0; i < dim; i++) {
a[i].id_persona = i;
cin>>a[i].anno_nasc;
}
for (int i = 0; i < dim; i++) {
a[i].stampa();
}
system("pause");
}
Laboratorio di Informatica – A.A. 2013-2014
9
a cura di Pascoschi Giovanni
Pila (Stack) con array
Laboratorio di Informatica – A.A. 2013-2014
a cura di Pascoschi Giovanni
10
Pila (Stack) con array
la Pila (Stack) è un insieme di dati che permette l’inserimento di nuovi
elementi e l’estrazione degli elementi introdotti da un’unica estremità
L’implementazione di una pila puo’ essere fatta tramite un array
(dimensione fissa)
push
pop
il funzionamento della pila viene denominato LIFO (Last Input First Output)
testa = 0
meccanismo utilizzato per gestire le chiamate alle funzioni (insieme degli
indirizzi di rientro) oppure nel registro di stack (linguaggio assembly)
operazione di inserimento di un dato
operazione di estrazione di un dato
A[0]
A[1]
push
A[2]
pop
.......
A[MAX-1]
testa = MAX
Laboratorio di Informatica – A.A. 2013-2014
a cura di Pascoschi Giovanni
11
Laboratorio di Informatica – A.A. 2013-2014
a cura di Pascoschi Giovanni
12
Esempio Pila
Esempio Pila
do {
menu( );
cout<<“Seleziona una voce”;
cin>>scelta;
} while(scelta <1 || scelta >5);
switch(scelta) {
case 1:
clearPila( );
break;
case 2:
pop( );
break;
case 3:
push( );
break;
case 4:
readPila( );
break;
}
}while(scelta !=5);
return 0;
#include <iostream>
using namespace std;
const int MAX = 20;
int Pila[MAX];
int testa;
void clearPila( );
void pop( );
void push( );
void readPila( );
void menu( );
int main( )
{
int scelta;
clearPila( );
do {
void pop( ) {
if( testa == MAX)
cout<<“La pila e’ vuota. Impossibile estrarre un dato”<< endl;
else{
cout << “Elemento estratto = “ << Pila[testa] << endl;
testa++;
}
}
void push( ) {
int dato;
if (testa == 0)
cout<<“La pila è piena. Impossibile inserire altri dati”<< endl;
else{
cout << “dato da inserire = “;
cin>> dato;
testa- -;
Pila[testa] = dato;
}
}
}
Laboratorio di Informatica – A.A. 2013-2014
a cura di Pascoschi Giovanni
13
Esempio Pila
a cura di Pascoschi Giovanni
14
Coda (Queue) con array
la Coda (Queue) è un insieme di dati che permette l’inserimento di nuovi
elementi da una parte e l’estrazione degli elementi introdotti dalla parte
opposta
void clearPila( ) {
testa = MAX;
cout<< “Pila vuota” << endl;
}
void readPila( ) {
for(int i=testa; i< MAX; i++) {
cout<< Pila[i] << endl;
}
}
il funzionamento della coda viene denominato FIFO (First Input First
Output)
operazione di inserimento di un dato
operazione di estrazione di un dato
void menu( ) {
cout << endl;
cout << “1. Pulisci pila” << endl;
cout << “2. Estrai un dato” << endl;
cout << “3. Aggiungi un dato” << endl;
cout << “4. Leggi pila” << endl;
cout << “5. Fine” << endl;
}
Laboratorio di Informatica – A.A. 2013-2014
Laboratorio di Informatica – A.A. 2013-2014
a cura di Pascoschi Giovanni
15
Laboratorio di Informatica – A.A. 2013-2014
push
pop
a cura di Pascoschi Giovanni
16
Coda (Queue) con array
Esempio Coda
L’implementazione di una coda puo’ essere fatta tramite un array
(dimensione fissa)
A[0]
A[1]
A[MAX-1]
pop
push
void clearCoda( );
void pop( );
void push( );
void readCoda( );
void menu( );
.........
fine = MAX-1
fine = -1
do {
menu( );
cout<<“Seleziona una voce”;
cin>>scelta;
} while(scelta <1 || scelta >5);
switch(scelta) {
case 1:
clearCoda( );
break;
case 2:
pop( );
break;
case 3:
push( );
break;
case 4:
readCoda( );
break;
}
}while(scelta !=5);
return 0;
#include <iostream>
using namespace std;
const int MAX = 20;
int Coda[MAX];
int fine;
int main( )
{
int scelta;
clearCoda( );
do {
}
Laboratorio di Informatica – A.A. 2013-2014
a cura di Pascoschi Giovanni
17
Esempio Coda
a cura di Pascoschi Giovanni
18
a cura di Pascoschi Giovanni
20
Esempio Coda
void pop( ) {
if( fine ==-1)
cout<<“La coda e’ vuota. Impossibile estrarre un dato”<< endl;
else{
cout << “Elemento estratto = “ << Coda[0] << endl;
for(int i=1; i<= fine; i++) Coda[i-1] = Coda[i];
fine- -;
}
}
void clearCoda( ) {
fine = -1;
cout<< “Coda vuota” << endl;
}
void readCoda( ) {
for(int i=0; i<= fine; i++) {
cout<< Coda[i] << endl;
}
}
void push( ) {
int dato;
if (fine == MAX-1)
cout<<“La coda è piena. Impossibile inserire altri dati”<< endl;
else{
cout << “dato da inserire = “;
cin>> dato;
fine++;
Coda[fine] = dato;
}
}
Laboratorio di Informatica – A.A. 2013-2014
Laboratorio di Informatica – A.A. 2013-2014
a cura di Pascoschi Giovanni
void menu( ) {
cout << endl;
cout << “1. Pulisci coda” << endl;
cout << “2. Estrai un dato” << endl;
cout << “3. Aggiungi un dato” << endl;
cout << “4. Leggi coda” << endl;
cout << “5. Fine” << endl;
}
19
Laboratorio di Informatica – A.A. 2013-2014
Riepilogo della lezione
Fine della lezione
Funzioni in C++
Strutture di dati
Tabelle di dati
Array di oggetti
Pila/Coda con array
Laboratorio di Informatica – A.A. 2013-2014
Domande?
a cura di Pascoschi Giovanni
21
Laboratorio di Informatica – A.A. 2013-2014
a cura di Pascoschi Giovanni
22
Fly UP