Buscar

LSE - Exemplo 2: Lista não ordenada e sem repetidos

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 4 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Lista Linear Simplesmente Encadeada
Exemplo 2 – Lista não ordenada e sem elementos repetidos
#include <stdio.h>
typedef struct no {
 int valor;
 struct no * prox;
} TNo;
void inserirInicio (TNo* *lista, int num);
void listar (TNo * lista);
void remover (TNo* *lista, int n);
void removerTodos (TNo* *list);
TNo* buscar (TNo *lista, int n) ;
void alterar (TNo *lista, int num);
int main () {
 TNo * LSE = NULL;
 char op;
 int numero;
 do {
 printf ("1 - Inserir no inicio da lista \n");
 printf ("2 - Remover elemento procurado\n");
 printf ("3 - Alterar valor \n");
 printf ("4 - Exibir todos da lista \n");
 printf ("5 - Sair do programa \n");
 printf ("Informe a opcao: ");
 op = getchar (); fflush (stdin);
 switch (op) {
 case '1': printf ("Informe o valor: ");
 scanf ("%i", &numero); fflush (stdin);
 inserirInicio (&LSE,numero);
 break;
 case '2': printf ("Informe o valor a remover: ");
 scanf ("%i", &numero); fflush (stdin);
 remover (&LSE, numero);
 break;
 case '3': printf ("Informe o valor: ");
 scanf ("%i", &numero); fflush (stdin);
 alterar (LSE,numero);
 break;
 case '4': listar (LSE); break;
	 case '5': removerTodos (&LSE); break;
 default: printf ("Opcao invalida \n");
 }
 } while (op != '5');
 return 0;
}
�
void inserirInicio (TNo* *lista, int num){
	// Inserir no inicio da lista. Nao permite repetidos.
 TNo * novo;
	int achou;
	
 achou = buscar (*lista,num);
	if (achou == 1) 
 printf ("Insercao nao efetuada. Elemento repetido. \n");
	else {
 novo = (TNo *) malloc (sizeof(TNo));
 novo->valor = num;
 if (*lista == NULL) {
 *lista = novo;
 novo->prox = NULL;
 }
 else {
 novo->prox = *lista;
 *lista = novo;
 }
	}
}
void listar (TNo * lista) {
	// exibir todos os elementos da lista
 TNo * aux;
 if (lista == NULL) 
 printf ("Lista vazia \n");
 else {
 aux = lista;
 while (aux != NULL) {
 printf ("%i \n", aux->valor);
 aux = aux->prox;
 }
 }
}
void alterar (TNo *lista, int num) {
	TNo * aux;
	aux = buscar(lista, num);
	if (aux == NULL)
		printf ("Elemento nao encontrado \n");
	else {
		printf ("Informe o novo valor: ");
		scanf ("%i", aux->valor);
		printf ("Alteracao efetuada \n");
	}
}
�
void remover (TNo* *lista, int n) {
	// remover utilizando busca sequencial simples
	TNo * aux1, *aux2;
	int achou = 0; 
	if (*lista == NULL)
		printf ("Lista vazia \n");
	else if ((*lista)->valor == n) { // remover primeiro
		aux1 = *lista;
		*lista = (*lista)->prox;
		free (aux1);
	}
	else {
		aux1 = *lista;
		aux2 = aux1->prox;
 while (aux2 != NULL) {
			if (aux2->valor == n) {
				achou = 1;
				break;
			}
			else {
			 aux1 = aux1->prox;
			 aux2 = aux2->prox;
			}
		}
		if (achou == 1) {
			aux1->prox = aux2->prox;
			free (aux2);
			printf ("Elemento removido \n");
		}
		else
			printf ("Elemento nao encontrado \n");
	}
}
TNo* buscar (TNo *lista, int n) {
	// busca sequencial simples
	TNo * aux;
	if (lista == NULL)
		return NULL;
	else {
		aux = lista;
		while (aux != NULL) {
			if (aux->valor == n)
				return aux;
			aux = aux->prox;
		}
		return NULL;
	}
}
�
void removerTodos (TNo* *list) {
	TNo * aux;
	while (*list != NULL) {
		aux = *list;
		*list = (*list)->prox;
		free(aux);
	}
}

Outros materiais