Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Andrei222

Lista em C.

Recommended Posts

O Programa é uma lista encadeada aonde o campo info é um ponteiro para um TAD,mas não ta funcionando a inserção e a impresão.

 

 

#include<stdio.h>
#include<stdlib.h>
typedef struct cliente {
int CRM;
 
 
}Cliente;
 
 
typedef struct no{
Cliente*info;
struct no*prox;
}Lista;
 
 
void inicial(Cliente*p){
p=NULL;
}
void CadastrarCliente(Cliente*p){
printf("Entre com o Identificador\n");
scanf("%d",&p->CRM);
}

Lista*criar (void)
{Lista*p=malloc(sizeof(Lista));
p->info=NULL;
return p;
}
 
void inseriri(Lista*p,Cliente*c1){
Cliente*novo=malloc(sizeof(Cliente));
Lista*l=malloc(sizeof(Lista));
novo->CRM=c1->CRM;
l->info=novo;
l->prox=p;
p=l;
} // do while
 
 
 void imprimi(Lista*p){
Lista*l;
Cliente*c1;
for(l=p;l!=NULL;l=l->prox)
  printf("%d",l->info->CRM);
 
 
 }

int main(){
Cliente c1;
Lista *p;
p=criar();
CadastrarCliente(&c1);
inseriri(p,&c1);
iprimi(p);
return 0;
 
}
 


Compartilhar este post


Link para o post
Compartilhar em outros sites

Português é bem-vindo. Pode ser código, mas passa-se mais tempo lendo do que escrevendo código.

#include <stdio.h>
#include <stdlib.h>
#define ERROR_MSG(msg,line_no)	printf("[ERRO]%s(%s@%d)\n", msg, __FILE__, line_no)

typedef struct cliente {
	int CRM;
} Cliente;
 
 
typedef struct no{
	int CRM;
	struct no * proximo;
} No;


/* Realiza a pesquisa pelo crm informado.
 * Caso o crm não seja encontrado, retorna NULL e define ultimo_no como a cauda da lista,
 * para facilitar a inserção do novo cliente.
 * Caso o crm seja encontrado, retorna o endereço de memória do nó que o contém.
 */
No * pesquisar_crm(No * lista, No ** ultimo_no, int crm) {
	No * tmp = lista;
	while (tmp != NULL) {
		if (tmp->CRM == crm) return tmp;
		(*ultimo_no) = tmp;
		tmp = tmp->proximo;
	}
	return NULL;
}

No * cadastrar_cliente(No * lista) {
	int tmp_crm;

	printf("Informe o CRM: ");
	scanf("%d", &tmp_crm);

	No * novo_cliente;
	No * inicio_lista = lista;

	if (!lista) {
		inicio_lista = malloc(sizeof(No));
		if (!inicio_lista) {
			ERROR_MSG("Alocação de memória", __LINE__-2);
		} else {
			inicio_lista->CRM = tmp_crm;
			inicio_lista->proximo = NULL;
		}
	} else {

		No * ultimo_no;
		No * pos = pesquisar_crm(inicio_lista, &ultimo_no, tmp_crm);

		if (pos != NULL) {
			puts("Cliente já existente.");
		} else {
			novo_cliente = malloc(sizeof(No));
			if (!novo_cliente) {
				ERROR_MSG("Alocação de memória", __LINE__-2);
			} else {
				novo_cliente->CRM = tmp_crm;
				novo_cliente->proximo = NULL;
				ultimo_no->proximo = novo_cliente;
			}
		}
	}

	return inicio_lista;
}


void imprimir(No * lista) {
	for(No * tmp=lista; tmp != NULL; tmp=tmp->proximo) {
		printf("CRM: %d\n", tmp->CRM);
	}
}

int main(void){
	No * lista = NULL;

	for(int i = 0; i < 5; i++)
		lista = cadastrar_cliente(lista);
	imprimir(lista);
	free(lista);
 	return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.