Prévia do material em texto
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
typedef struct sPonto{
int info;
struct sPonto *prox;
} Ponto;
typedef struct sListaSimples{
Ponto *prim;
} ListaSimples;
void criarLista(ListaSimples *pList){
pList->prim = NULL;
}
void consultar(ListaSimples *pList){
Ponto *p;
printf("Lista: ");
for (p = pList->prim; p != NULL; p = p->prox){
printf("%d ->", p->info);
}
printf("NULL\n");
}
void insInicial(ListaSimples *pList, int v){
Ponto *novo;
novo = (Ponto*)malloc(sizeof(Ponto));
if (novo != NULL){
novo->info = v;
novo->prox = pList->prim;
pList->prim = novo;
} else{
printf("Memória Insuficiente\n");
}
}
void remInicial(ListaSimples *pList){
Ponto *pAux = pList->prim;
if (pAux != NULL){
pList->prim = pList->prim->prox;
free(pAux);
printf("Valor Removido\n");
}
else{
printf("Lista Vazia\n");
}
}
void insNaOrdem(ListaSimples *pList, int v){
Ponto *novo;
novo = (Ponto*)malloc(sizeof(Ponto));
if (novo != NULL){
novo->info = v;
Ponto *pAtu, *pAnt;
pAnt = NULL;
pAtu = pList->prim;
while (pAtu != NULL && pAtu->info < v){
pAnt = pAtu;
pAtu = pAtu->prox;
}
novo->prox = pAtu;
if (pAnt != NULL){
pAnt->prox = novo;
}
else{
pList->prim = novo;
}
}
else{
printf("Memória Insuficiente\n");
}
}
void remEspecifico(ListaSimples *pList, int v){
Ponto *pAtu, *pAnt;
pAnt = NULL;
pAtu = pList->prim;
while (pAtu != NULL && pAtu->info != v){
pAnt = pAtu;
pAtu = pAtu->prox;
}
if (pAnt != NULL){
if (pAtu != NULL) {
pAnt->prox = pAtu->prox;
free(pAtu);
printf("Valor removido\n");
}
else{
printf("Valor não encontrado\n");
}
}
else{
printf("Lista Vazia\n");
}
}
void remTudo(ListaSimples *pList){
Ponto *pAux = pList->prim;
if (pAux != NULL){
while (pAux != NULL){
pList->prim = pAux->prox;
free(pAux);
pAux = pList->prim;
}
printf("Todos os elementos foram removidos!\n");
}
else{
printf("Lista Vazia\n");
}
}
void altElemento(ListaSimples *pList, int v1, int v2){
Ponto *pAtu, *pAnt;
pAnt = NULL;
pAtu = pList->prim;
while (pAtu != NULL && pAtu->info != v1){
pAnt = pAtu;
pAtu = pAtu->prox;
}
if (pAnt != NULL){
if (pAtu != NULL){
pAtu->info = v2;
printf("Valor alterado!\n");
}
else{
printf("Valor não encontrado.\n");
}
}
else{
printf("Lista Vazia.\n");
}
}
int estaVazia(ListaSimples *pList) {
return(pList->prim == NULL);
}
void main(){
setlocale(LC_ALL, "portuguese");
ListaSimples minhaLista;
int valor, op, valorAlt;
criarLista(&minhaLista);
printf("AVA1 - ESTRUTURA DE DADOS\n");
printf("MATHEUS GOMES\n\n");
printf("Escolha uma opção:\n");
while (1) {
printf("\n(1) Incluir elemento no início\n");
printf("(2) Incluir elemento em ordem\n");
printf("(3) Alterar elemento\n");
printf("(4) Remover elemento do início\n");
printf("(5) Remover elemento específico\n");
printf("(6) Remover todos os elementos\n");
printf("(7) Mostrar lista\n");
printf("(0) Sair\n");
scanf("%d", &op);
system("cls");
switch (op) {
case 1: //Incluir elemento no início
printf("Valor: ");
scanf("%d", &valor);
insInicial(&minhaLista, valor);
break;
case 2: //Incluir elemento em ordem
printf("Valor: ");
scanf("%d", &valor);
insNaOrdem(&minhaLista, valor);
break;
case 3: //Alterar elemento
printf("Valor a ser alterado: ");
scanf("%d", &valor);
printf("Novo valor: ");
scanf("%d", &valorAlt);
altElemento(&minhaLista, valor, valorAlt);
break;
case 4: //Remover elemento do início
remInicial(&minhaLista);
break;
case 5: //Remover elemento específico
printf("Qual o valor? ");
scanf("%d", &valor);
remEspecifico(&minhaLista, valor);
break;
case 6: //Remover todos os elementos
remTudo(&minhaLista);
break;
case 7: //Mostrar lista
if (estaVazia(&minhaLista)) {
printf("Lista vazia!\n");
}
else {
consultar(&minhaLista);
}
break;
case 0: //Sair
remTudo(&minhaLista);
exit(0);
default:
printf("Opção inexistente!\n");
}
}
}