Guest User

Untitled

a guest
Jul 22nd, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.17 KB | None | 0 0
  1. # include <malloc.h>
  2. # include <stdio.h>
  3. # include <stdlib.h>
  4. # include <conio.h>
  5.  
  6. typedef int TIPOCHAVE;
  7.  
  8. # define MAX 10
  9.  
  10. typedef struct {
  11.         TIPOCHAVE chave;
  12. } REGISTRO;
  13.  
  14. typedef struct {
  15.         REGISTRO A[MAX];
  16.         int nElem;
  17. } LISTA;
  18.  
  19. bool inicializaLista(LISTA *l) {
  20.      l->nElem = 0;
  21.      int i;
  22.      for(i = 0; i < MAX; i++){
  23.             l->A[i].chave = i;
  24.             l->nElem++;
  25.      }
  26.      return (true);
  27. }
  28.  
  29. bool printaLista(LISTA l){
  30.      int i = 0;
  31.      for(i; i < l.nElem; i++) {
  32.             printf("%i ", l.A[i].chave);
  33.      }
  34.      return (true);
  35. }
  36.  
  37. bool insere(LISTA *l, int i, TIPOCHAVE ch) {
  38.      if((i > (l->nElem)) || i < 0 || (l->nElem >= MAX)) {
  39.            printf("\nErro");
  40.            return (false); //posição incorreta ou lista cheia
  41.      }
  42.      if((l->nElem > 0) && (i < l->nElem)) {
  43.                  int j;
  44.                  for(j = l->nElem; j >= (j + i); j--){
  45.                      l->A[j] = l->A[j-1];
  46.                  }
  47.      }
  48.      l->A[i].chave = ch;
  49.      l->nElem++;
  50.      return(true);
  51. }
  52.  
  53. int busca(LISTA l, TIPOCHAVE ch) {
  54.     if(l.nElem == 0) return(-1);
  55.     int i = 0;
  56.     while(i < l.nElem) {
  57.             if(l.A[i].chave == ch) return(i);
  58.             else i++;
  59.     }
  60.     return (-1);
  61. }
  62.  
  63. int buscaBin(LISTA l, TIPOCHAVE ch){
  64.     if(l.nElem == 0) return(-1);
  65.     int inf, sup, meio;
  66.     inf = 0;
  67.     sup = l.nElem;
  68.     while(inf <= sup){
  69.               meio = (inf + sup)/2;
  70.               if(l.A[meio].chave == ch) return (meio);
  71.               else if(l.A[meio].chave > ch) { //vai para esquerda
  72.                    sup = meio -1;
  73.               }
  74.               else { //vai para a direita
  75.                    inf = meio + 1;
  76.               }
  77.     }
  78.     return (-1); // não achou;
  79. }
  80.  
  81. int main() {
  82.     LISTA lista;
  83.     inicializaLista(&lista);  
  84.     printaLista(lista);
  85.     //insere(&lista, 1, 6);
  86.     //printf("\nlista printada:\n");
  87.     //printaLista(lista);
  88.     //int index = busca(lista, 6);
  89.     //printf("\nPosicao da chave busca eh %i \n", index);
  90.     int index = buscaBin(lista, 5);
  91.     printf("\nPosicao da chave usando busca binaria eh %i \n", index);
  92.     system("pause");
  93. }
Add Comment
Please, Sign In to add comment