Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- typedef int T; //definiamo una var T per lo stesso motivo per il quale definivamo
- //una const int N quando usavamo gli array statici
- typedef struct cell {
- T info;
- cell * next;
- cell * prev;
- } * list;
- //void make(list & aux, list & temp, int num);
- //void to_head(list & aux, list & head);
- void print(list lista);
- int length(list lista);
- int main() {
- list aux = new cell;
- list temp = aux;
- list head = aux;
- int index;
- int M = 0;
- do {
- switch (M) {
- case 0: //Menu', con M inizializzata a 0, a prima run ci entra sempre
- cout << endl << "###########################" << endl
- << "########## MENU' ##########" << endl
- << "1) Crea lista" << endl
- << "2) Stampa lista" << endl
- << "3) Naviga lista" << endl
- << "4) Lunghezza lista" << endl //messa qua temporaneamente, da inglobare in 2)
- << "0) Torna al Menu'" << endl
- << "Inserisci il numero corrispondente all'azione che vuoi prendere " << endl
- << "Inserire un numero non valido fara' terminare il programma" << endl
- << ">> ";
- cin >> M;
- break;
- case 1:
- cout << "Che tipo di lista desideri creare?" << endl
- << "1) Crea lista con inserimento manuale voci" << endl
- << "2) Crea lista inizializzata a valore 0" << endl
- << ">> ";
- cin >> M;
- if (M == 1) {
- cout << "Inserisci il numero di nodi iniziali: ";
- cin >> index;
- for (int i = 0; i < index; i++) {
- cout << "Inserisci il valore nella casella numero " << i + 1 << ": ";
- if (i < index -1) {
- cin >> aux->info;
- aux = new cell;
- aux->prev = temp;
- temp->next = aux;
- temp = aux;
- }
- else {
- cin >> aux->info;
- aux->next = nullptr;
- aux = head;
- index = 1;
- cout << endl << "~ ~Ho creato la lista e riportato l'interesse in testa~ ~" << endl;
- }
- }
- }
- else if (M == 2) {
- cout << "Inserisci il numero di nodi iniziali: ";
- cin >> index;
- for (int i = 0; i < index; i++) {
- if (i < index - 1) {
- aux->info = 0;
- aux = new cell;
- aux->prev = temp;
- temp->next = aux;
- temp = aux;
- }
- else {
- aux->info = 0;
- aux->next = nullptr;
- aux = head;
- index = 1;
- cout << endl << "~ ~Ho creato la lista e riportato l'interesse in testa~ ~" << endl;
- }
- }
- }
- else {
- cout << endl << "Voce Menu' inesistente" << endl << endl;
- }
- M = 0;
- break;
- case 2:
- print(head);
- M = 0;
- cout << endl;
- break;
- case 3:
- cout << "Menu' navigazione lista" << endl
- << "1) Naviga uno slot avanti" << endl
- << "2) Naviga uno slot dietro" << endl
- << "3) Porta l'interesse in testa" << endl
- << "4) Porta l'interesse in coda" << endl
- << "Attualmente l'interesse e' ";
- if (index == 1) cout << "in testa" << endl;
- else if (index == length(head)) cout << "in coda" << endl;
- else cout << "sulla cella intermedia numero " << index << endl;
- cout << "Il valore nella cella interessata e' " << aux->info << endl
- << "Che azione vuoi intraprendere? " << endl << ">> ";
- cin >> M;
- if (M == 1) {
- aux = aux->next;
- index++;
- }
- else if (M == 2) {
- aux = aux->prev;
- index--;
- }
- else if (M == 3) {
- aux = head;
- index = 1;
- }
- else if (M == 4) {
- aux = head;
- while (aux->next != nullptr) {
- aux = aux->next;
- }
- index = length(head);
- }
- M = 3;
- break;
- case 4:
- cout << "La lista ha una lunghezza di " << length(head) << " elementi" << endl;
- M = 0;
- break;
- }
- /*
- cout << "Quanti nodi iniziali deve avere la lista? ";
- int index; //L'indice che scorrera' la lista, ti dira' dov'e' attualmente l'interesse
- cin >> index;
- //crea
- //int input;
- for (int i = 0; i < index; i++) {
- cout << "Inserisci il valore nella casella numero " << i + 1 << ": ";
- cin >> aux->info; //input;
- //make(aux, temp, input);
- //to_head(aux, head);
- aux = new cell;
- temp->next = aux;
- temp = aux;
- if (i == index - 1) {
- aux->next = nullptr;
- aux = head;
- index = 1;
- cout << endl << "~ ~Ho riportato l'interesse in testa~ ~" << endl;
- }
- }
- //stampa
- print(head);
- /*while (aux->next != nullptr) {
- cout << aux->info << " ";
- aux = aux->next;
- }*/
- } while (M >= 0);
- cout << endl;
- }
- //crea la lista //ma questo si fa una volta sola, quindi non ha senso...
- /*void make(list & aux, list & temp, int num) {
- aux = new cell;
- aux->info = num;
- temp->next = aux;
- temp = aux;
- }*/
- //riporta l'interesse in testa //ma e' abbastanza scomodo usarla
- //il codice per rifare cio' e' breve ed e' meglio fare il tutto manualmente
- /*void to_head(list & aux, list & head) {
- aux->next = nullptr;
- aux = head;
- cout << endl << "~ ~Ho riportato l'interesse in testa~ ~" << endl;
- }*/
- //stampa tutta la lista //la var ausiliaria "lista" puo' essere anche head
- //poiche' non e' passata per reference, head non viene davvero spostata
- void print(list lista) {
- while (lista != nullptr) {
- cout << lista->info << " ";
- lista = lista->next;
- }
- }
- int length(list lista) {
- if (lista != nullptr)
- return length(lista->next) + 1;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement