1 / 25

Exercicios sobre a matéria da P3 de 2006.1

Exercicios sobre a matéria da P3 de 2006.1. Listas, Árvores e Tabela de Dispersão. ex_p3.c. int intervalo(Arv* a, int x1, int x2) { if (a==NULL) return 0; if (a->info>x2) { return intervalo(a->esq,x1,x2); } else if (a->info<x1) { return intervalo(a->dir,x1,x2); }

tanek
Download Presentation

Exercicios sobre a matéria da P3 de 2006.1

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Exercicios sobre a matéria da P3 de 2006.1 Listas, Árvores e Tabela de Dispersão

  2. ex_p3.c

  3. int intervalo(Arv* a, int x1, int x2) { if (a==NULL) return 0; if (a->info>x2) { return intervalo(a->esq,x1,x2); } else if (a->info<x1) { return intervalo(a->dir,x1,x2); } else { /* pertence ao intervalo */ return 1 + intervalo(a->esq,x1,x2) + intervalo(a->dir,x1,x2); } }

  4. hashAluno.c

  5. int hash(char* nome) { int i,soma=0; for (i=0;nome[i]!=‘\0’;i++) soma=(soma+nome[i])%N; return soma; } int busca(Hash tab, char* nome) { int i = hash(nome); Aluno* p; for (p=tab[i];p!=NULL;p=p->prox) { if (strcmp(p->nome,nome)==0) return p->quant; } return -1; }

  6. lista2.c

  7. struct lista { char nome[81]; float nota; struct lista* prox }; typedef struct lista Lista; Lista* insere (Lista* lst, char* nome, float nota) { Lista* novo=(Lista*) malloc(sizeof(Lista)); strcpy(novo->nome,nome); novo->nota=nota; novo->prox=lst; return novo; }

  8. Lista* retira_ultimo(Lista* lst) { if (lst==NULL) return NULL; else{ Lista* ant=NULL; Lista* p=lst; while (p->prox!=NULL) { ant=p; p=p->prox; } free(p); if (ant!=NULL) { ant->prox=NULL; return lst; } else return NULL; } }

  9. int cheia(Arv* a) { if (a==NULL) return 1; if (a->esq==NULL&&a->dir==NULL) return 1; if (a->esq==NULL||a->dir==NULL) return 0; return cheia(a->esq)&&cheia(a->dir); }

  10. int maximo(ArvGen* a) { if (a->prim==NULL) return a->info; else { int max=a->info; ArvGen* p; for (p=a->prim;p!=NULL;p=p->prox) { int mp=maximo(p); max=(max>mp)?max:mp; } return max; } }

  11. Lista* constroi(int n, int* v) { int i; Lista* head=NULL; for (i=0;i<n;i++) { Lista* novo=(Lista*) malloc(sizeof(Lista)); novo->info=v[i]; novo->prox=head; head=novo; } return head; }

  12. int soma_info_folhas (Arv* a) { if (a==NULL ) return 0; else if (a->esq==NULL&&a->dir==NULL) return a->info; else return soma_info_folhas(a->esq)+soma_info_folhas(a->dir); }

  13. int num_nos_x(ArvGen* a,int x) { if (a->prim==NULL) return (a->info>x)?1:0; else { ArvGen* p; int n=(a->info>x)?1:0; for (p=a->prim; p!=NULL; p=p->prox) { n+=num_nos_x(p,x); } return n; } }

  14. void imprime (Arv* a) { if (!arv_vazia(a)){ imprime(a->esq); /* mostra sae */ printf("%d ", a->info); /* mostra raiz */ imprime(a->dir); /* mostra sad */ } }

  15. /* conta o numero de nos ate o nivel n */ int conta (Arv* a, int n) { if (a==NULL || n==-1) return 0; else return 1+conta(a->esq,n-1)+conta(a->dir,n-1); }

  16. void imprime (ArvGen* a) { ArvGen* p; printf("<%d",a->info); for (p=a->prim; p!=NULL; p=p->prox) imprime(p); /* imprime cada sub-árvore filha */ printf(">"); }

More Related