Ir ao conteúdo
  • Cadastre-se
jpaulofsa

C Lista simplesmente Encadeada inserir par no inicio e ímpar no final

Recommended Posts

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

struct tipo_no {
    int dado;
    struct tipo_no * proximo;
};

typedef struct tipo_no No;

struct tipo_lista{
     No *primeiro;
     No *ultimo;
};

typedef struct tipo_lista Lista;  

void criarLista(Lista* lista){
  lista->primeiro = NULL;
  lista->ultimo=NULL;   
}

int listaVazia(Lista* lista){
   if ((lista->primeiro == NULL) || (lista->ultimo==NULL)) return 1;
   else return 0;
}

void inserirFinal(Lista* lista,int valor){
  No *novo;   
  novo = (No*)malloc(sizeof(No));
  novo->dado = valor;
  novo->proximo=NULL;
  if(listaVazia(lista)==1){
    lista->primeiro = novo;                       
  }else{
     (lista->ultimo)->proximo = novo;    
  }                                 
  lista->ultimo = novo;     
}

void inserirInicio(Lista* lista,int valor){
  No *novo;   
  novo = (No*)malloc(sizeof(No));
  novo->dado = valor;
  novo->proximo=NULL;
  if(listaVazia(lista)==1){
    lista->ultimo = novo;                       
  }else{
     novo->proximo = lista->primeiro;    
  }                                 
  lista->primeiro = novo;     
} 
//Função que adiciona os números pares no início da lista e os números ímpares no final da lista
void inserir(Lista* lista, int valor){
	if(lista(valor) % 2 = 0){
		inserirInicio();
	} else {
		inserirFinal();
	}
}

void listar(Lista* lista){
   No* ponteiro = lista->primeiro;
   while(ponteiro!= NULL){
       printf("%d ",ponteiro->dado);             
       ponteiro = ponteiro->proximo;              
   }   
   printf("\n");
}

int main(int argc, char *argv[]){
  Lista* lista = (Lista*) malloc(sizeof (Lista));   
  criarLista(lista);
  int op=0,valor;
  do{
    system("cls");  
    printf("\n1-Inserir no Final\n2-Inserir no Inicio\n3-Listar\n4-Sair\n");
    scanf("%d",&op);
    switch(op){
       case 1:printf("\nInforme o Valor:");
              scanf("%d",&valor);
              inserirFinal(lista,valor);
              break;
       case 2:printf("\nInforme o Valor:");
              scanf("%d",&valor);
	   		  inserirInicio(lista,valor);
              break;
       case 3:system("cls");
              listar(lista);                
              system("PAUSE");	
    }  
  }while(op != 4);     
  system("PAUSE");	
  return 0;
}

Boa tarde! preciso fazer a implementação da função:

//Função que adiciona os números pares no início da lista e os números ímpares no final da lista
void inserir(Lista* lista, int valor){
    if(lista(valor) % 2 = 0){
        inserirInicio();
    } else {
        inserirFinal();
    }
}

para caso o novo número inserido seja para, vá para o início da lista e caso ímpar, vá para o final da lista. Para isso já foram implementadas as funções InserirFinal() e InserirInicio(), alguém poderia me ajudar e esclarecer onde estou errando?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!

Com relação a essa função, falta apenas os parâmetros. Entre em contato com autor do programa e peça-lhe mais esclarecimentos. Caso não consiga essa função faz mais sentido desta maneira:

//Função que adiciona os números pares no início da lista e os números ímpares no 
//final da lista
void inserir(Lista* lista, int valor){
  /* A função inserir tem duas outras internas a ela
  
        see:: inserirInicio
        see:: inserirFinal
        
        As duas funções internas exigem igualmente dois parâmetros
           ::lista : parametro do tipo Lista.
           ::valor : parametro do tipo int.
  */
  if((valor % 2) == 0){inserirInicio(lista, valor);}
  else{inserirFinal(lista, valor);}
  return;}

Você entendeu isso?

O.k!

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 hora atrás, AnsiC disse:

Olá!

Com relação a essa função, falta apenas os parâmetros. Entre em contato com autor do programa e peça-lhe mais esclarecimentos. Caso não consiga essa função faz mais sentido desta maneira:


//Função que adiciona os números pares no início da lista e os números ímpares no 
//final da lista
void inserir(Lista* lista, int valor){
  /* A função inserir tem duas outras internas a ela
  
        see:: inserirInicio
        see:: inserirFinal
        
        As duas funções internas exigem igualmente dois parâmetros
           ::lista : parametro do tipo Lista.
           ::valor : parametro do tipo int.
  */
  if((valor % 2) == 0){inserirInicio(lista, valor);}
  else{inserirFinal(lista, valor);}
  return;}

Você entendeu isso?

O.k!

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

struct tipo_no {
    int dado;
    struct tipo_no * proximo;
};

typedef struct tipo_no No;

struct tipo_lista{
     No *primeiro;
     No *ultimo;
};

typedef struct tipo_lista Lista;  

void criarLista(Lista* lista){
  lista->primeiro = NULL;
  lista->ultimo=NULL;   
}

int listaVazia(Lista* lista){
   if ((lista->primeiro == NULL) || (lista->ultimo==NULL)) return 1;
   else return 0;
}

void inserirFinal(Lista* lista,int valor){
  No *novo;   
  novo = (No*)malloc(sizeof(No));
  novo->dado = valor;
  novo->proximo=NULL;
  if(listaVazia(lista)==1){
    lista->primeiro = novo;                       
  }else{
     (lista->ultimo)->proximo = novo;    
  }                                 
  lista->ultimo = novo;     
}

void inserirInicio(Lista* lista,int valor){
  No *novo;   
  novo = (No*)malloc(sizeof(No));
  novo->dado = valor;
  novo->proximo=NULL;
  if(listaVazia(lista)==1){
    lista->ultimo = novo;                       
  }else{
     novo->proximo = lista->primeiro;    
  }                                 
  lista->primeiro = novo;     
} 
//Função que adiciona os números pares no início da lista e os números ímpares no final da lista
void inserir(Lista* lista, int valor){
	if((valor % 2) == 0){
		inserirInicio(lista, valor);
	} else {
		inserirFinal(lista, valor);
	}
}

void listar(Lista* lista){
   No* ponteiro = lista->primeiro;
   while(ponteiro!= NULL){
       printf("%d ",ponteiro->dado);             
       ponteiro = ponteiro->proximo;              
   }   
   printf("\n");
}

int main(int argc, char *argv[]){
  Lista* lista = (Lista*) malloc(sizeof (Lista));   
  criarLista(lista);
  int op=0,valor;
  do{
    system("cls");  
    printf("\n1-Inserir Numero\n2-Listar\n3-Sair\n");
    scanf("%d",&op);
    switch(op){
       case 1:printf("\nInforme o Valor:");
              scanf("%d",&valor);
              inserir(lista,valor);
              break;
       case 2:system("cls");
              listar(lista);                
              system("PAUSE");	
    }  
  }while(op != 3);     
  system("PAUSE");	
  return 0;
}

Muito obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×