Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <malloc.h>
- #include <string.h>
- #define N 20
- struct nodo{
- char inf[N];
- struct nodo *figlio;
- struct nodo *fratello;
- };
- int menuAlb(struct nodo *);
- void albero(struct nodo *);
- void addElem(struct nodo *);
- void ciclo1(struct nodo *, struct nodo **, int *);
- struct nodo *ciclo2(struct nodo *, int);
- void delElem(struct nodo *);
- struct nodo *ricerca(struct nodo *, struct nodo **, char *);
- void delNodo(struct nodo *, struct nodo *);
- void delPiano(struct nodo *);
- void ordina(struct nodo *, int);
- void printAlb(struct nodo *);
- main()
- {
- struct nodo *radice=NULL;
- int menu=-1;
- radice=(struct nodo *)malloc(sizeof(struct nodo));
- printf("\nNome edificio?\t");
- scanf("%s", radice->inf);
- radice->fratello=NULL; radice->figlio=NULL;
- while(menu=!0){
- if(menu==-1) menu=1;
- else menu=menuAlb(radice);
- switch(menu){
- case 1:{ albero(radice); break;}
- case 2:{ addElem(radice); break;}
- case 3:{ delElem(radice); break;}
- case 4:{ delPiano(radice); break;}
- case 6:{ printAlb(radice); break;}
- case 0:{ break;}
- default:{ printf("\nOpzione non ammessa!\t"); getchar();}
- }}
- }
- int menuAlb(struct nodo *p)
- {
- int menu;
- system("cls");
- printf("-------------------------\n\t%s\n", p->inf);
- printf("\n1. Aggiungi piano\n\n2. Aggiungi dipendenti\n\n3. Elimina dipendente\n\n4. Cancella piano\n\n6. Stampa albero\n\n0. Exit\t");
- scanf("%d", &menu);
- getchar();
- return menu;
- }
- void albero(struct nodo *p)
- {
- struct nodo *px, *paus=p->fratello;;
- int n=0;
- char newDip;
- ciclo1(p, &px, &n);
- p->fratello=(struct nodo *)malloc(sizeof(struct nodo));
- p=p->fratello; p->inf[0]=n; p->fratello=paus; p->figlio=NULL;
- printf("\nPiano %d creato", n); getchar();
- }
- void addElem(struct nodo *p)
- {
- struct nodo *px, *paus=NULL;
- int val, liv, m=-1, n=-1;
- char cognome[N];
- ciclo1(p, &px, &n);
- if(n==0){ printf("\nNessun piano ancora presente!\t"); getchar();}
- else{
- while(m<=0 || m>n){
- printf("\nA che piano vuoi aggiungere dipendenti? L'ultimo e' il %d\t", n);
- scanf("%d", &m);}
- p=ciclo2(p, m);
- printf("\nCognome dipendente?\t");
- scanf("%s", cognome);
- if(p->figlio==NULL){ p->figlio=(struct nodo *)malloc(sizeof(struct nodo)); p=p->figlio;}
- else{ p=p->figlio; ciclo1(p, &paus, &n);
- paus->fratello=(struct nodo *)malloc(sizeof(struct nodo)); p=paus->fratello;}
- strcpy(p->inf, cognome); p->figlio=NULL; p->fratello=NULL;}
- }
- void delPiano(struct nodo *p)
- {
- struct nodo *r=p, *px, *paus=p, *paux;
- int n=-1, m=-1;
- ciclo1(p, &px, &n);
- if(n==0){ printf("\nNessun piano ancora presente!\t"); getchar();}
- else{
- while(m<=0 || m>n){
- printf("\nChe piano vuoi eliminare? l'ultimo e' il %d\t", n);
- scanf("%d", &m);}
- p=ciclo2(p, m);
- while(paus!=p){ px=paus;
- paus=paus->fratello;}
- if(p->figlio!=NULL){
- paus=p->figlio;
- while(paus!=NULL){
- paux=paus->fratello; free(paus); paus=paux;}}
- px->fratello=p->fratello;
- free(p);
- ordina(r->fratello, n);
- printf("\nEliminazione completata con successo!\t");
- getchar(); getchar();}
- }
- void ordina(struct nodo *p, int n)
- {
- if(n>1){
- n--;
- p->inf[0]=n;
- ordina(p->fratello, n);}
- }
- void ciclo1(struct nodo *p, struct nodo **paus, int *n)
- {
- if(p!=NULL){
- ++*n; *paus=p;
- ciclo1(p->fratello, paus, n);}
- }
- struct nodo *ciclo2(struct nodo *p, int m)
- {
- if(p->inf[0]!=m) p=ciclo2(p->fratello, m);
- return p;
- }
- void delElem(struct nodo *p)
- {
- struct nodo *paus=NULL;
- char cognome[N];
- printf("\nCognome dipendente da eliminare?\t");
- scanf("%s", cognome);
- p=ricerca(p, &paus, cognome);
- if(p==NULL) printf("\nNessun elemento trovato!\t");
- else{ printf("\nElemento trovato!"); delNodo(p, paus);
- printf("\nEliminazione completata con successo!\t");}
- getchar(); getchar();
- }
- struct nodo *ricerca(struct nodo *p, struct nodo **paus, char *c)
- {
- struct nodo *px;
- while(p!=NULL){
- *paus=p;
- px=p->figlio;
- while(px!=NULL){
- if(strcmp(px->inf, c)==0) return px;
- else px=px->fratello;}
- p=p->fratello;}
- return NULL;
- }
- void delNodo(struct nodo *p, struct nodo *paus)
- {
- struct nodo *paux;
- if(p==paus->figlio){
- paus->figlio=p->fratello;
- free(p);}
- else{
- paus=paus->figlio;
- while(paus!=p){ paux=paus;
- paus=paus->fratello;}
- paux->fratello=p->fratello;
- free(p);}
- }
- void printAlb(struct nodo *p)
- {
- struct nodo *paus;
- system("cls");
- printf("\n\n\t%s\n\n", p->inf);
- p=p->fratello;
- while(p!=NULL){
- printf("\n %d-->", p->inf[0]);
- paus=p->figlio;
- while(paus!=NULL){
- printf(" -> %s", paus->inf);
- paus=paus->fratello;}
- p=p->fratello;}
- getchar();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement