então, tenho que ler passar cada caso do switch para procediementos e ler os dados, acrescentar na pilha. /******************************************************************************* * Implementação de Lista dinâmica encadeada não ordenada * * Opções: 1 - Inserir no inicio * * 2 - Inserir no final * * 3 - Consultar toda lista * * 4 - Remover da Lista * * 5 - esvaziar a lista * * 6 - sai do programa * *******************************************************************************/ #include<stdio.h> #include<stdlib.h> #include<conio.h> main() { //definindo o registro que representará a lista struct LISTA { int num; struct LISTA *prox; }; // criação do ponteiro para lista //a lista está vazia, logo o ponteiro inicio tem valor NULL //o ponteiro inicio conterá o endereço do primeiro elemento da lista struct LISTA *inicio = NULL; //o ponteiro fim conterá o endereço do último elemento da lista struct LISTA *fim = NULL; //o ponteiro aux é um ponteiro auxiliar struct LISTA *aux; //o ponteiro anterior é um ponteiro auxiliar struct LISTA *anterior; //menu de opções int op, numero, achou; do { printf("\n========================================================================\n"); printf(" Insercao e remocao de numeros em uma Lista Encadeada (não ordenada) \n"); printf("========================================================================\n"); printf("\n 1 - Inserir no inicio"); printf("\n 2 - Inserir no final"); printf("\n 3 - Consultar toda lista"); printf("\n 4 - Remover da Lista"); printf("\n 5 - Esvaziar a lista"); printf("\n 6 - Sair"); printf("\n\n Escolha a operacao: "); scanf("%d",&op); switch(op) { case 1: { struct LISTA *novo; novo = (struct LISTA*) malloc(sizeof(struct LISTA)); printf("\nDigite um numero a ser inserido"); scanf("%d", &novo->num); //testa se foi alocado espaço if (novo == NULL) { exit(0); } else { if (inicio == NULL) { //a lista está vazia e o elemento inserido será o primeiro e o último inicio = novo; fim = novo; fim->prox = NULL; } else { // a lista já contem elementos e o novo elemento será inserido no inicio da lista novo->prox = inicio; inicio = novo; } printf("\nNumero inserido no inicio da lista"); } break; } case 2: { struct LISTA *novo; novo = (struct LISTA*) malloc(sizeof(struct LISTA)); printf("\nDigite um numero a ser inserido"); scanf("%d", &novo->num); //testa se foi alocado espaço if (novo == NULL) { exit(0); } else { if (inicio == NULL) { // a lista estava vazia e o elemento inserido será o primeiro e o último inicio = novo; fim = novo; fim->prox = NULL; } else { // a lista já contem elementos e o novo elemento será inserido no fim da lista fim->prox = novo; fim = novo; fim->prox = NULL; } printf("\nNumero inserido no fim da lista"); } break; } case 3: { if (inicio == NULL) { // a lista está vazia printf("\nLista vazia"); } else { //a lista contém elementos e estes serão mostrados do inicio ao fim printf("\nConsultando toda a lista"); aux = inicio; while(aux != NULL) { printf("\nnum = %d",aux->num); aux = aux->prox; } } break; } case 4: { if (inicio == NULL) { // a lista está vazia printf("\nLista vazia"); } else { //a lista contém elementos e o elemento a ser removido será digitado printf("\nDigite um numero a ser removido"); scanf("%d", &numero); //todas as ocorrencias da lista, iguais ao número digitado, serão removidas aux = inicio; anterior = NULL; achou = 0; while(aux != NULL) { //o numero digitado foi encontrado na lista e será removido if(aux->num == numero) { achou++; if(aux == inicio) { //o numero a ser removido é o primeiro da lista inicio = aux->prox; free(aux); aux = inicio; } else if (aux ==fim) { //o numero a ser removido é o último da lista anterior->prox = NULL; fim = anterior; free(aux); aux = NULL; } else { //o numero a ser removido está no meio da lista anterior-> prox = aux->prox; free(aux); aux = anterior->prox; } } else { anterior = aux; aux = aux->prox; } } if(achou == 0) printf("\nNumero não encontrado"); else if (achou == 1) printf("\nNumero removido 1 vez"); else printf("\nNumero removido %d vezes",achou); } break; } case 5: { if (inicio == NULL) { // a lista está vazia printf("\nLista vazia"); } else { // a lista será esvaziada aux = inicio; while(aux != NULL) { inicio = inicio->prox; free(aux); aux = inicio; } printf("\nLista esvaziada"); } break; } } }while(op != 6); getch(); }