Função recursiva para procurar item de uma lista

Irei postando ao longo do tempo, alguns exercícios da faculdade que fiz recentemente.

Procure recursivamente um determinado valor em uma lista simplesmente encadeada. A função recebe o valor (v) e o inicio da lista (*L) como parâmetros e devolve 1 se encontrou o valor, ou 0, caso contrário.

/*=============================================================================*
* includes                                                                     *
*=============================================================================*/

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

/*=============================================================================*
* typedef                                                                      *
*=============================================================================*/

struct lista {
       int iNum;
       struct lista *pLista;
};

typedef lista Lista;

/*=============================================================================*
* declaracoes                                                                  *
*==============================================================================*
/*-----------------------------------------------------------------------------*
* declaracoes - prototipos de funcoes                                          *
*-----------------------------------------------------------------------------*/

Lista* insereLista(Lista *pLista, int iNum);
int procuraItem(Lista *pLista, int iNum);

/*-----------------------------------------------------------------------------*
* funcao "main"                                                                *
*-----------------------------------------------------------------------------*/

int main(int argc, char *argv[]) {
    int iQtdLista = 0, iProcura = 0;
    Lista *pLista = NULL;
    pLista = (Lista *) malloc(sizeof(Lista));
    
    do {
       printf("\nDigite com quantos numeros deseja preencher a lista: ");
       scanf("%d", &iQtdLista);
       } while (iQtdLista <= 0);
    
    srand(time(NULL));
    
    for (int i = 0; i < iQtdLista; i++) {
        int iNum = (int) rand() % 10000;
        printf("\n%d", iNum);
        pLista = insereLista(pLista, iNum);
    }
    
    printf("\n\nQual numero deseja procurar? ");
    scanf("%d", &iProcura);
    int ret = 100;
    ret = procuraItem(pLista, iProcura);
    
    if (ret == 1) 
       printf("\nNumero encontrado");
    else
        printf("\nNumero nao encontrado");
    
    printf("\n");
    
    system("pause");
}

/*-----------------------------------------------------------------------------*
* corpo das funções - insereLista                                              *
*-----------------------------------------------------------------------------*/

Lista* insereLista(Lista *pLista, int iNum) {
       Lista *pAux = NULL;
       pAux = (Lista *) malloc(sizeof(Lista));
       pAux->iNum = iNum;
       pAux->pLista = pLista;
       return pAux;
}

/*-----------------------------------------------------------------------------*
* corpo das funções - procuraItem                                              *
*-----------------------------------------------------------------------------*/

int procuraItem(Lista *pLista, int iNum) {
    if (pLista) {
       if (pLista->iNum == iNum) {
          return 1;
       } else {
              return procuraItem(pLista->pLista, iNum);
              }
    }
}
Anúncios

Um comentário sobre “Função recursiva para procurar item de uma lista

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s