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);
}
}
}