Ir ao conteúdo
  • Cadastre-se
Ali Awada

C Exercício de lista em c

Recommended Posts

Considere o trecho de código abaixo a uma fila de atendimento bancário

...
typdef struct cliente {
char nome[64];
int conta;
struct cliente *proximo;
}tpCliente;
...
void novoCliente(tpCliente *cabeca, tpCliente **cliente);
void atendeCliente(tpCliente *cabeca, tpCliente **cliente);
...

1)Implemente a função novoCliente, que tem por objetivo colocar o cliente no fim da fila de atendimento bancário (o ultimo cliente a entrar na fila deve ser o ultimo a ser atendido). Utilize o protótipo definido acima;

2)Implemente a função atendeCliente, que tem por objetivo retirar da fila de atendimento o primeiro cliente e devolve-lo para função chamadora através do ponteiro **cliente. Utilize o protótipo definido acima;

 

Usei a função de inserir na direita, ou seja, no final de uma lista encadeada no ex 1

tpCliente* inserir_direita(tpCliente *aux ,int v)
{
	tpCliente *primeiroNo = aux;
	tpCliente *novoNo = (tpCliente*) malloc (sizeof(tpCliente));
	novoNo->valor = v;
	novoNo->proximo = NULL;
	
	if(aux != NULL)
	{
	while(aux->proximo != NULL){
		aux = aux->proximo;
	}
	
	aux->proximo = novoNo;
	return primeiroNo;
	}else{
		return novoNo;
	}
}

e de remover primeiro no ex 2

void removerPrimeiro()
{
    if (primeiroNo != NULL)
    {
        tpCliente *no = primeiroNo;
        primeiroNo = no->proximo;
        free(no);
    }
}

mas não to sabendo como adaptar para esse exercício com dois ponteiros, qualquer ajuda é bem vinda, agradeco desde ja.

Compartilhar este post


Link para o post
Compartilhar em outros sites

***[ Olá, sou estudante de Ciências-Física, e tenho dialeto C ANSI como hobby, C'hobby rsrs!

      Meu contato com C/Python foi na matéria Introdução à Computação. ]

 

 

UPDATE:

Em 09/07/2018 às 15:22, Ali Awada disse:

e de remover primeiro no ex 2

Ou seja, lista é uma variável do tipo Cliente; sua utilidade é copiar o próximo cliente, já variável cliente é do tipo ponteiro de Cliente, vai receber endereço do cliente atual.

 

 

Quando pensei em elaborar identificadores para as funções, optei por usar verbos que indicam ação.

snake_case:

/* atenda_clt --- retirar outro cliente da fila */
void atender_clt(&fila, &proximo);
Spoiler

void atender_clt(tpCliente * fila, tpCliente ** proximo) {
  if (fila == NULL) {
    	printf("Todos Clientes atendido(s)!\n");
    	return;
  }
  else {
    	* proximo = fila;
    	* fila = * proximo->proximo;
    	printf("1 Cliente atendido(s)!\n");
    	return;
  }
}

 

Dúvidas, sugestões e dicas?

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

×