Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
/*
UNIVERSIDADE VEIGA DE ALMEIDA
CURSO: Sistemas de Informação
MATÉRIA: Estrutura de Dados
PROFESSOR: Paulo Márcio de Souza Freire
ALUNA: Elen Pires de Araújo
MATRÍCULA: 20203301257
NOVEMBRO / 2021
NOVA IGUAÇU / RJ
Obs.: Olá professor, fiz o trabalho no MacOS, portanto na linha 166 o comando atual é "clear".
Caso vá rodar o programa no windows favor subsituir o comando por "cls".
Para inclusão e exclusão fiz uso das EDs pilha + lista (Last In First Out), já que não foi
especificado se deveria possibilitar inclusão e exclusão no início E no final também.
O programa funcional e testado com o compilador GCC.
*/
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
typedef struct node
{
int num;
struct node *prox;
} Node;
typedef struct lista
{
Node *prim;
} Lista;
void criar_lista(Lista *pLista)
{
pLista->prim = NULL;
}
// Consulta
void mostrarLista(Lista *pLista)
{
Node *p;
printf("Lista: ");
for (p = pLista->prim; p != NULL; p = p -> prox)
{
printf("%d - ", p->num);
}
printf("NULL\n");
}
// Inserção modo pilha (LIFO)
void inserir_no_inicio(Lista *pLista, int valor)
{
Node *novo;
novo = (Node *)malloc(sizeof(Node));
if(novo != NULL)
{
novo -> num = valor;
novo -> prox = pLista->prim;
pLista->prim = novo;
}
else
{
printf("Memória insuficiente \n");
}
}
// Alteração
void alterar(Lista *pLista, int valor1, int valor2)
{
Node *pAtual, *pAnterior;
pAnterior = NULL;
pAtual = pLista->prim;
while (pAtual != NULL && pAtual -> num != valor1)
{
pAnterior = pAtual;
pAtual = pAtual->prox;
}
if(pAnterior != NULL)
{
if(pAtual != NULL)
{
pAtual->num = valor2;
printf("Valor alterado \n");
}
else
{
printf("Valor não encontrado \n");
}
}
else
{
printf("Lista vazia \n");
}
}
// Remoção modo pilha (LIFO)
void remover_do_inicio(Lista *pLista)
{
Node *pAux = pLista->prim;
if(pAux != NULL)
{
pLista->prim = pLista->prim->prox;
free(pAux);
printf("Valor removido \n");
}
else
{
printf("Lista vazia \n");
}
}
void remover_tudo(Lista *pLista)
{
Node *pAux = pLista->prim;
if(pAux != NULL)
{
while(pAux != NULL)
{
pLista->prim = pAux->prox;
free(pAux);
pAux = pLista->prim;
}
printf("Todos os elementos foram removidos.\n");
}
else
{
printf("Lista vazia.\n");
}
}
int estaVazia(Lista *pLista) {
return (pLista->prim == NULL);
}
int main()
{
setlocale(LC_ALL, "portuguese");
Lista lista;
int valor, operacao, valorAlterado;
criar_lista(&lista);
printf("Escolha uma opção: \n");
while(1) {
printf("\nOpção 1 - Inserir elemento do início\n");
printf("\nOpção 2 - Remover elemento do início\n");
printf("\nOpção 3 - Mostrar lista\n");
printf("\nOpção 4 - Alterar elemento da lista\n");
printf("\nOpção 0 - Sair\n");
scanf("%d", &operacao);
system("clear");
switch (operacao)
{
case 1:
printf("Valor? ");
scanf("%d", &valor);
inserir_no_inicio(&lista, valor);
break;
case 2:
remover_do_inicio(&lista);
break;
case 3:
if(estaVazia(&lista)){
printf("Lista vazia\n");
}
else {
mostrarLista(&lista);
}
break;
case 4:
printf("Valor a ser alterador: ");
scanf("%d", &valor);
printf("Novo valor: ");
scanf("%d", &valorAlterado);
alterar(&lista, valor, valorAlterado);
break;
case 0:
remover_tudo(&lista);
exit(0);
default:
printf("Opção inexistente.\n");
}
}
return 0;
}