O Que acham ? algo a mudar ou melhorar ? //Crie um TAD lista, agora utilizando ponteiros. A TAD deve conter a função para Inserir um elemento, Retirar um elemento, Listar todos os elementos em ordem contrária #include <conio.h> #include <stdio.h> #include <stdlib.h> struct no{ struct no * prox; int valor;}; int inserir(no ** l, int val, int * qnt); int listar(no * l); int apagar(no ** l, int * qnt); void menu(){ printf("\ 1- Insere");printf("\n 2- Remove");printf("\n 3- Lista");printf("\n 4- Exit");printf("\n\nValor: ");} int main(){ char opcao; int v,erro = 0,numero=0; no * lista = NULL; while(1){ system("cls"); menu(); scanf("%c",&opcao); if(opcao == '1'){ system("cls"); printf("\nDigite o valor a ser inserido: "); scanf("%i",&v); erro = inserir(&lista,v,&numero); }else if(opcao == '2')apagar(&lista,&numero); else if(opcao == '3')erro = listar(lista); else if(opcao == '4')exit(1); else if(erro == 0) printf("\n\nERROR: Digite uma das opcoes acima"), system("pause>nul");}} int inserir(no ** l, int val, int * qnt){ no * novo; novo = (no *) malloc(sizeof(no)); if((*l) == NULL){ (*l) = novo; novo->valor = val; (*l)->prox = NULL; }else{ novo->valor = val; novo->prox = (*l); (*l) = novo;} (*qnt)++; return 1;} int listar(no * l){ int i = 0; system("cls"); if(l == NULL){ printf("lista inexistente para consulta\n"); system("pause");} else{ while(l != NULL){ i++; printf("\nPOS: %i Valor: %i",i,l->valor); l = l->prox;}} system("pause>nul"); return 1;} int apagar(no ** l, int * qnt){ no * aux, *aux2; int pos, i = 1; aux = aux2 = (*l); if((*l) == NULL){ printf("Lista Inexistente para remover\n"); system("pause");} else{ system("cls"); printf("Digite a posicao para ser apagada: "); scanf("%i",&pos); if(pos <= *qnt && pos > 0){ if(pos == 1){ (*l) = (*l)->prox; free(aux); free(aux2); (*qnt)--; if((*qnt) == 1){ (*l) = NULL;}} else{ if(pos == 2){ aux = aux->prox; (*l) = aux2->prox; free(aux2); (*qnt)--;} else{ while(i != pos-1){ aux = aux->prox; aux2 = aux2->prox; i++;} aux = aux->prox; aux2->prox = aux->prox; free(aux); (*qnt)--;}}} else{ system("cls"); printf("Quantidade inexistente na lista\n"); system("pause");} return 1;}} //Acrescente ao TAD lista através de ponteiros funções para Retirar um elemento da lista e para consultar um elemento na lista. #include <conio.h> #include <stdio.h> #include <stdlib.h> struct no{ struct no * prox; int valor;}; int inserir(no ** l, int val, int * qnt); int listar(no * l); int apagar(no ** l, int * qnt); int listar_elemento(no * l); void menu(){ printf("\ 1- Insere");printf("\n 2- Remove");printf("\n 3- Lista");printf("\n 4- Lista");printf("\n 5- Exit");printf("\n\nValor: ");} int main(){ char opcao; int v,erro = 0,numero=0; no * lista = NULL; while(1){ system("cls"); menu(); scanf("%c",&opcao); if(opcao == '1'){ system("cls"); printf("\nDigite o valor a ser inserido: "); scanf("%i",&v); erro = inserir(&lista,v,&numero);} else if(opcao == '2')erro = apagar(&lista,&numero); else if(opcao == '3')erro = listar(lista); else if(opcao == '4')erro = listar_elemento(lista); else if(opcao == '5')exit(1); else if(erro == 0) printf("\n\nERROR: Digite uma das opcoes acima"), system("pause>nul");}} int listar_elemento(no * l){ int buscar,i=0; system("cls"); if(l == NULL)printf("\nNao existe lista!"); else{ printf("Digite o elemento a ser buscado: "); scanf("%i",&buscar); while(l != NULL){ if(l->valor == buscar){i++;} l = l->prox;} printf("\n elemento não Encontrado",i);} system("pause>nul"); return 1; } int inserir(no ** l, int val, int * qnt){ no * novo; novo = (no *) malloc(sizeof(no)); if((*l) == NULL){ (*l) = novo; novo->valor = val; (*l)->prox = NULL;} else{ novo->valor = val; novo->prox = (*l); (*l) = novo;} (*qnt)++; return 1;} int listar(no * l){ int i = 0; system("cls"); if(l == NULL){ printf("Lista inexistente para Consulta\n"); system("pause");} else{ while(l != NULL){ i++; printf("\nPOS: %i Valor: %i",i,l->valor); l = l->prox; } } system("pause>nul"); return 1;} int apagar(no ** l, int * qnt){ no * aux, *aux2; int pos, i = 1; aux = aux2 = (*l); if((*l) == NULL) { printf("não existe lista para voce remover\n"); system("pause");} else{ system("cls"); printf("Digite a posicao para ser apagada: "); scanf("%i",&pos); if(pos <= *qnt && pos > 0){ if(pos == 1){ (*l) = (*l)->prox; free(aux); free(aux2); (*qnt)--; if((*qnt) == 1){ (*l) = NULL;} }else{ if(pos == 2){ aux = aux->prox; (*l) = aux2->prox; free(aux2); (*qnt)--;} else{ while(i != pos-1){ aux = aux->prox; aux2 = aux2->prox; i++;} aux = aux->prox; aux2->prox = aux->prox; free(aux); (*qnt)--;}}} else{ system("cls"); printf("Voce digitou uma quantidade inexistente na lista\n"); system("pause");}} return 1;}