Esercizio 7
Scrivi un programma per realizzare una lista di interi inseriti da tastiera, l'inserimento deve essere effettuato da una funzione (push) che inserisce un elemento in fondo alla lista. Il programma deve prevedere la presenza di una funzione (pop) che toglie un elemento scelto dall' dall'utente, presente nella lista, la stessa funzione si occuperà di riorganizzare la struttura dopo tale operazione.
#include<iostream>
using namespace std;
/*definisco la struttura record */
struct T {
int x;
T* y;
};
void push(T *j);//stavolta definiamo i prototipi
void pop(T *j);
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: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
void pop(T *j){
if(!j->x && j->y==NULL)cout<<"vuota\n";
else{
T *p =j;
if(p->y==NULL)p->x=0;
else {
while((p->y)->y!=NULL)
p=p->y;
p->y=NULL;
}
}
}//fine pop
void print(T *j) {
T* p= j;
while(p != NULL) {
cout<<p->x<<" ";
p = p->y;
}//fine while
cout<<endl;
}//fine print
La funzione di push ripete il meccanismo di inserimento
già vista nella parte teorica per la lista a puntatori. Il main() inizializza
la pila creando un elemento che contiene 0 e punta a NULL.
La funzione pop deve replicare il meccanismo della pila (first in first
out). Se la pila non è vuota:
allora il primo elemento contiene un numero diverso da 0. In tal caso, dopo
che il puntatore p è stato fatto puntare al primo elemento, viene eseguita
l'operazione:
if(p->y==NULL)p->x=0;
e la pila torna in condizione iniziale cioè vuota.
Se vi è più di un elemento viene eseguito il task:
while((p->y)->y!=NULL)p=p->y;
p->y=NULL;
il puntatore p cammina fino al penultimo elemento; poi l'elemento cui punta
p viene fatto puntare a NULL.