laialii

Lista encadeada

Feb 24th, 2016
321
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.00 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. struct reg {
  5.     int valor;
  6.     struct reg *prox;
  7. };
  8. typedef struct reg celula;
  9.  
  10. void imprime(celula *c){
  11.     //função que insere um elemento ao final
  12.     // da lista
  13.     while(c->prox != NULL){
  14.         printf("%d", c->prox->valor);
  15.         c = c->prox;
  16.     }
  17. }
  18.  
  19. void insere(celula *c, int num){
  20.     //função que varre a lista e imprime cada elemento
  21.     celula *nova;
  22.     nova = malloc(sizeof(celula));
  23.     nova->valor = num;
  24.     nova->prox = NULL;
  25.  
  26.     while(c->prox != NULL){
  27.         c = c->prox;
  28.     }
  29.     c->prox = nova;
  30. }
  31.  
  32. int busca(celula *c, int num) {
  33.     // função que insere num no final da lista e retorne
  34.     // o "indice virtual" (a partir do 0) ou -1 se nao
  35.     // encontrar
  36.     int indice = 0;
  37.  
  38.     while(c->prox->valor != NULL){
  39.         if (num==c->valor){
  40.             c = c->prox;
  41.             printf("%d", indice);
  42.         }
  43.         else
  44.             return -1; 
  45.         indice+=1;
  46.     }
  47.  
  48. }
  49.  
  50. void remove(celula *c, int num) {
  51.     // função que varre a lista em busca de num e remove
  52.     // a celula (desaloca), reapontando o ponteiro prox
  53.     // do elemento anterior ao removido
  54.  
  55.     while(c->prox->valor != NULL){
  56.         if (num!=c->valor)
  57.             printf("%d", c->valor);
  58.         else
  59.             c = c->prox;
  60.     }
  61. }
  62.  
  63. int main(){
  64.     int opcao, num;
  65.    
  66.     celula *cabeca;
  67.     cabeca = malloc(sizeof(celula));
  68.     //malloc tem o tamanho de 1 celula
  69.     cabeca->prox = NULL;
  70.     //iniciando a lista sem nenhum elemento
  71.    
  72.     do{
  73.         printf("1. Imprime a lista;\n2. Insere elemento ao final da lista;\n3. Busca elemento na lista;\n4. Remove elemento da lista;\n0. Encerra o programa.\n");
  74.         scanf("%d", &opcao);
  75.         if (opcao == 1) imprime (cabeca);
  76.         if (opcao == 2) {
  77.             printf("Informe um inteiro:\n");
  78.             scanf("%d", &num);
  79.             insere(cabeca, num);
  80.         }
  81.         if (opcao == 3) {
  82.             printf("Informe um inteiro para a busca:\n");
  83.             scanf("%d", &num);
  84.             busca(cabeca, num);
  85.         }
  86.         if (opcao == 4) {
  87.             printf("Informe um inteiro a ser removido:\n");
  88.             scanf("%d", &num);
  89.             remove(cabeca, num);
  90.         }  
  91.     } while (opcao!=0);
  92.    
  93.     return 0;
  94. }
Advertisement
Add Comment
Please, Sign In to add comment