Programação Progressiva
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Programação Progressiva

Fórum para dúvidas dos sites: Programação Progressiva, Java Progressivo, C Progressivo


Você não está conectado. Conecte-se ou registre-se

Dúvida Lista Simplismente Encadeada

Ir para baixo  Mensagem [Página 1 de 1]

1Dúvida Lista Simplismente Encadeada Empty Dúvida Lista Simplismente Encadeada Sex Set 12, 2014 6:09 am

pipoca



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...

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

Ir para o topo  Mensagem [Página 1 de 1]

Permissões neste sub-fórum
Não podes responder a tópicos