Bom dia pessoal,
Estou com uma dúvida referente a Lista Simplesmente Encadeada em C que ta me matando. A lista ta funcionando perfeitamente, já criei as funções para inserir no inicio e final e para imprimir. Os números para iniciar a lista são obtidos após sorteio de números (função rand()) onde os números ímpares e pares devem ser inseridos a esquerda e direita respectivamente, e após a lista deve ser impressa. Até aí tudo bem. O problema está na função para pesquisar um numero digitado pelo usuário, onde se o numero existir na lista deverá retornar para o usuário a posição que o número está na lista. (o valor deverá ser lido na main e passado por parâmetro para a Função de pesquisa). Se alguém puder dar uma mão aí agradeço. Segue o código...
Estou com uma dúvida referente a Lista Simplesmente Encadeada em C que ta me matando. A lista ta funcionando perfeitamente, já criei as funções para inserir no inicio e final e para imprimir. Os números para iniciar a lista são obtidos após sorteio de números (função rand()) onde os números ímpares e pares devem ser inseridos a esquerda e direita respectivamente, e após a lista deve ser impressa. Até aí tudo bem. O problema está na função para pesquisar um numero digitado pelo usuário, onde se o numero existir na lista deverá retornar para o usuário a posição que o número está na lista. (o valor deverá ser lido na main e passado por parâmetro para a Função de pesquisa). Se alguém puder dar uma mão aí agradeço. Segue o código...
- Código:
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <conio.h>
struct nodo{
int dados;
struct nodo *prox;
};
int InsereEsquerda (struct nodo **inicio, int valor){ // função recebe como parâmetro o ponteiro (ptri) e o valor inteiro
struct nodo *novo=NULL;
novo=(struct nodo *)malloc(sizeof(struct nodo));
if (novo != NULL){
novo->dados=valor;
novo->prox=*inicio;
*inicio=novo;
}
else
printf("Nao foi possivel alocar\n");
}//fim da função insereEsquerda
int InsereDireita(struct nodo **inicio, int valor){ // função recebe como parâmetro o ponteiro (ptri) e o valor inteiro
struct nodo *novo=NULL, *aux=NULL;
novo=(struct nodo *)malloc(sizeof(struct nodo));
if(novo != NULL){
novo- dados = valor;
novo->prox=NULL;
if(*inicio == NULL)
*inicio=novo;
else{
aux=*inicio;
while(aux->prox != NULL){
aux = aux->prox;
}
aux->prox=novo;
}
}
else
printf("\nNao foi possivel alocar");
}//fim da funçao insere_direita
int ImprimeLSE(struct nodo **inicio){
struct nodo *aux=NULL;
if(*inicio!=NULL){
aux=*inicio;
while(aux != NULL){
printf("%i\t", aux->dados);
aux=aux->prox;
}
}
else
printf("\nLista Vazia\n");
}// fim da função ImprimeLSE
int main(){
struct nodo *ptri=NULL; // Inicialização do ponteiro *ptri como nulo
int i, nro, num;
for(i=0; i<20; i++){
nro = rand()%51; // sorteio dos 20 numeros
if(nro %2 == 0){ // se par inserir a direita
InsereDireita(&ptri, nro);
}
else { // se impar inserir a esquerda
InsereEsquerda (&ptri, nro);
}
}
ImprimeLSE(&ptri); //impressão da lista
printf("\n\nInforme um número para pesquisar na Lista: ");
scanf("%i", &num);
//se o numero digitado estiver na lista...
printf("\n\nA posição %i na lista ", ??????? );
//se o numero digitado não estiver na lista
printf("\n\nO número informado não consta na lista");
getch();
}