Esercizio 8
Basandosi sull'algoritmo della lista a puntatori, realizzare una coda di interi che preveda una funzione di push per inserire un nuovo elemento, una funzione pop per estrarre il primo elemento inserito e una funzione print per stampare la coda.
#include<iostream>
using namespace std;
/*definisco la struttura record */
struct T {
int x;
T* y;
};
//anche stavolta definiamo i prototipi
void push(T *j);
T *pop(T *j);
// pop restituisce un puntatore all'inizio della coda
void print(T *j);
main() {
T *j;//primo
j->x=0;j->y=NULL;//iniz.lista vuota
int ch;
do{
ch=0;
cout<<"1]inserisci\n";
cout<<"2]togli\n";
cout<<"0]exit\n";
cin>>ch;
switch(ch) {
case 1:push(j);print(j);break;
case 2:j=pop(j);print(j);;break;
case 0:cout<<"EXIT";break;
default:cout<<"-non
valido-";break;
}//end switch
}while(ch);
}//fine main
void push(T *j){
int n;
cout<<"ins:";
if((cin>>n).good())
if(!j->x && j->y==NULL)j->x=n;//se
è il primo
else{
T *p = new T;
p->x = n;
p->y = NULL;
T *q =j;
while(q->y!=NULL)q=
q->y;//scansione
q->y=p;
}//fine if(!j->x &&
j->y==NULL)
}//fine push
/* funzione pop */
T *pop(T *j){
if(!j->x && j->y==NULL){
cout<<"vuota\n";
return j;
} //se c'è un solo elemento e lo tolgo
else{
if(j->x && j->y==NULL){
j->x=0;
cout<<"vuota\n";
return j;
}//se c'è più di un elemento
else return j->y;
}
}//fine pop
void print(T *j) {
T* p= j;
while(p != NULL) {
cout<<p->x<<" ";
p = p->y;
}//fine while
cout<<endl;
}//fine print
In questo caso, il lavoro fatto dalla
funzione di estrazione pop() è semplice.
Se la coda è vuota pop non deve fare niente.
Se la coda contiene un solo elemento, quell'elemento deve essere posto a
0, con l'istruzione:
if(j->x && j->y==NULL){
j->x=0;
cout<<"vuota\n";
return j;
}
=>
Se la coda contiene più di un elemento la funzione ritorna un puntatore
all'elemento successivi al primo:
return j->y;