123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- // esercizzio_liste.cpp : Defines the entry point for the console application.
- //
- /*
- fare un programma che permette l inserimento ordinato degli elementi di una lista la visualizzazione e il cancella ovvero che permette di cancellare
- un nodo dato in input il nodo da ricercare tutto questo in un menu
- */
- #include "stdafx.h"
- #include <iostream>
- #define LEN 20
- typedef struct {
- char nome[LEN + 1];
- char cognome[LEN + 1];
- int età;
- }DATI;
- typedef struct NODO {
- DATI dati;
- NODO*next;
- }NODO;
- bool lista_vuota(NODO*n);
- NODO*alloca();
- void inserisci(NODO*n);
- NODO*ultimo_(NODO*n);
- void leggi(NODO*n);
- void visualizza(NODO*n);
- void trova(NODO*n);
- void menù();
- void dealloc(NODO*n);
- int main()
- {
- menù();
- return 0;
- }
- void menù() {
- NODO*n=0;
- int scelta = 0;
- system("cls");
- printf("menù\n");
- printf("0.esci\n");
- printf("1.inserisci\n");
- printf("2.visuaizza\n");
- printf("3.rimozione elemento\n");
- scanf_s("%d", &scelta, sizeof(int));
- switch (scelta) {
- case 0:
- printf("arrivederci e lasciate la mancia\n");
- system("pause");
- break;
- case 1:
- inserisci(n);
- break;
- case 2:
- visualizza(n);
- system("pause");
- break;
- case 3:
- trova(n);
- system("pause");
- break;
- default:
- printf("valore non valido\n");
- system("pause");
- break;
- }
- }
- bool lista_vuota(NODO*n) {
- if (n == NULL) {
- return true;// la lista è vuota
- }
- else
- return false; // la lista è piena
- }
- NODO*alloca() {
- NODO*nuovo=NULL;
- nuovo = (NODO*)malloc(sizeof(NODO));
- if (nuovo == NULL) {
- printf("errore!!\n");
- return 0;
- }
- nuovo->next = NULL;
- }
- void inserisci(NODO*n) {
- int scelta = 0;
- NODO*ultimo = 0;
- NODO*nuovo = 0;
- do {
- system("cls");
- printf("menù\n");
- printf("0.esci\n");
- printf("1.continua ad aggiungere\n");
- scanf_s("%d", &scelta, sizeof(int));
- switch (scelta) {
- case 0:
- printf("arrivederci\n");
- break;
- case 1:
- if (lista_vuota(n) == true) {
- nuovo = alloca();
- leggi(nuovo);
- nuovo->next = ultimo;
- }
- else {
- ultimo = ultimo_(n);
- nuovo = alloca();
- leggi(nuovo);
- nuovo->next = ultimo;
- }
- break;
- default:
- printf("valore non valido\n");
- break;
- }
- } while (scelta != 0);
- dealloc(n);
- }
- NODO*ultimo_(NODO*n) {
- NODO*p;
- p = n;
- while (p->next != NULL) {
- p = p->next;
- }
- return p;
- }
- void leggi(NODO*n) {
- printf("inseire cognome\n");
- scanf_s("%s", n->dati.cognome, LEN + 1);
- printf("inseire nome\n");
- scanf_s("%s", n->dati.nome, LEN + 1);
- printf("inseire età \n");
- scanf_s("%s", n->dati.età, LEN + 1);
- }
- void visualizza(NODO*n) {
- NODO*p;
- int cont = 0;
- p = n;
- while (p != NULL) {
- printf(" il nodo è %d\n il cognome è %s\n il nome è %s\n l'età è di %d\n", cont, p->dati.cognome, p->dati.nome, p->dati.età);
- p = p->next;
- cont++;
- }
- }
- void trova(NODO*n) {
- NODO*t = 0;
- char ricerca[LEN + 1];
- printf("inseire il ocgnome da ricercare\n");
- scanf_s("%s", ricerca, LEN + 1);
- while (n != NULL) {
- if (strcmp(n->dati.cognome, ricerca) == 0) {
- t = n;//copio i dati
- break;
- }
- n = n->next;
- }
- while (n != NULL) {
- if (n->next == t) {
- n->next = t->next;// coipio il puntatore al interno del puntatore precedente
- }
- n = n->next;
- }
- }
- void dealloc(NODO*n) {
- NODO*p;
- if (lista_vuota(n) == true) {
- printf("la lista è vuota");
- }
- else {
- while (n != NULL) {
- p = n;//metto p uggluale ad n
- n = p->next;//faccio puntare il puntatore n al altro elemento cosi ho eliminato l'elemento precedente
- free(p);//libero p
- p = NULL; //pongo p ugguale a null cosi da poterlo riutilizzare
- }
- }
- }
|