Buscar

Lista encadeada

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

#include <stdio.h>
#include <stdlib.h>
typedef struct elemento {
	int dado;
	struct elemento *proximo;
}t_elemento;
typedef struct lista {
	t_elemento *inicio;
	t_elemento *fim;
}t_lista;
t_lista* criarLista() {
	t_lista *lista = (t_lista *) malloc(sizeof(t_lista));
	lista->inicio = NULL; 
	lista->fim = NULL;
	return lista;
}
void insereInicio(int valor, t_lista *lista) {
	t_elemento *novoNoInicio = (t_elemento *) malloc(sizeof(t_elemento)); 
	novoNoInicio->dado = valor; 
	novoNoInicio->proximo = (*lista).inicio; 
	lista->inicio = novoNoInicio;
	if(lista->fim == NULL) { //Se a lista estuver vazia o final da lista recebe o novo dado
		lista->fim = novoNoInicio;
	}
}
void insereFinal(int valor, t_lista *lista) {
	t_elemento *novoNoFim = (t_elemento *) malloc(sizeof(t_elemento));
	novoNoFim->dado = valor;
	novoNoFim->proximo = NULL;
	if(lista->inicio == NULL) { //Se a lista estiver vazia eu coloco meu novo nó no inicio
		lista->inicio = novoNoFim;
	}else {
		lista->fim->proximo = novoNoFim;
	}
	lista->fim = novoNoFim;
}
void imprimir(t_lista *lista) {
	t_elemento *atual = lista->inicio;
	while(atual != NULL) {
		printf("%d\n", atual->dado);
		atual = atual->proximo;
	}
	printf("Fim da lista\n");
}
int main(void) {
	int N;
	t_lista *lista = criarLista();
	while(1) {
		scanf("%d", &N);
		
		if(N == 0) {
			break;
		}
		insereInicio(N, lista);
	}
	imprimir(lista);
	return 0;
}

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais