Lista Ligada / encadeada
Boa tarde pessoal.
Estou fazendo um programinha com lista encadeada e estou com problema para remover...
O problema é na hora de ajustar o ponteiro prox da celula anterior = prox da atual;
E com o ponteiro anterior também da problema...
Também tem problema na alteração...
Alguém poderia ajudar? Não sei onde estou errando...
aí vai o código...
#include <stdio.h>#include <stdlib.h>/ DECLARAÇÃO DE VARIAVEIS 'GLOBAIS' / int intContadorLista = 0;/ DECLARAÇÃO DE FUNÇÕES / METÓDOS / void escreverCabecalho(); void escreverVoltarMenu(); void consultar(); void inserir(); void alterar(); void remover(); void listar(); void sair();/ ESTRUTURA DA CÉLULA DA LISTA / struct celula { int codigo; char descricao[20]; float preco_unit; int qtde_estoque; struct celula ante; struct celula prox; }; typedef struct celula lista;/ INICIO DO PROGRAMA /int main() { char strOpcaoMenu; // strOpcaoMenu = NULL; / CRIA A LISTA (COM CABEÇA) / lista pLista; pLista = malloc(sizeof(lista)); pLista->ante = NULL; pLista->prox = NULL; / LAÇO DO PROGRAMA / while(strOpcaoMenu != '9') { escreverCabecalho(); / MENU / printf(" M E N U\n"); printf(" = = = =\n\n"); printf(" 1. Consultar\n"); printf(" 2. Inserir\n"); printf(" 3. Alterar\n"); printf(" 4. Remover\n"); printf(" 5. Gravar em arquivo\n"); printf(" 6. Recuperar do arquivo\n"); printf(" 7. \n"); printf(" 8. Listar\n"); printf(" 9. Sair\n\n"); printf(" Opcao: "); scanf("%s", &strOpcaoMenu); //printf("- - - - - - - - - - - - - - - - - - - - - - - - - - -\n"); escreverCabecalho(); switch(strOpcaoMenu) { case '1': consultar(pLista); break; case '2': inserir(pLista); break; case '4': remover(pLista); break; case '8': listar(pLista); break; case '9': sair(pLista); break; default: printf("Opcao \"%c\" eh invalida!", strOpcaoMenu); printf("\n\n"); escreverVoltarMenu(); } } return 0; system("exit");}void escreverCabecalho() { system("cls"); printf("\n"); printf("- - - - - - - - - -| S. M. E N. |- - - - - - - - - -\n"); printf("- - - - - - - - - - - - - - - - - - - - - - - - - - -"); printf("\n\n");}void escreverVoltarMenu() { printf("\n\n Precione uma telca para voltar..."); getch(); }void consultar(lista pLista) { printf(" C O N S U L T A R\n"); printf(" = = = = = = = = =\n\n"); int intCodigo; printf(" Digite o codigo a ser consultado, ou zero (0) para voltar: "); scanf("%d", &intCodigo); if (intCodigo != 0) { lista p; p = pLista->prox; while(p != NULL && p->codigo != intCodigo) p = p->prox; if (p != NULL) { printf("\n\n Codigo..............: %d", p->codigo); printf("\n Descricao...........: %s", p->descricao); printf("\n Preco unitario......: %1.2f", p->preco_unit); printf("\n Qatindade em estoque: %d", p->qtde_estoque); } else printf("\n\n Codigo nao encontrado."); escreverVoltarMenu(); } }void inserir(lista pLista) { printf(" I N S E R I R\n"); printf(" = = = = = = =\n\n"); lista nova; nova = malloc(sizeof(lista)); nova->ante = pLista; nova->prox = pLista->prox; pLista->prox = nova; intContadorLista++; nova->codigo = intContadorLista; printf(" Codigo: %d", nova->codigo); printf("\n\n Descricao: "); scanf("%s", &nova->descricao); printf(" Preco Unitario: "); scanf("%f", &nova->preco_unit); printf(" Quantidade em estoque: "); scanf("%d", &nova->qtde_estoque); escreverVoltarMenu();}void alterar(lista pLista) { / printf(" A L T E R A R\n"); printf(" = = = = = = =\n\n"); int intCodigo; printf(" Digite o codigo do registro a ser alterado, ou zero (0) para voltar: "); scanf("%d", &intCodigo); if (intCodigo != 0) { lista p; p = pLista->prox; while(p != NULL && p->codigo != intCodigo) p = p->prox; if (p != NULL) { char strAlterar; printf("\n\n Codigo..............: %d", p->codigo); printf("\n Descricao...........: %s", p->descricao); printf("\n Preco unitario......: %1.2f", p->preco_unit); printf("\n Qatindade em estoque: %d", p->qtde_estoque); while(strAlterar != 'S' && strAlterar != 's' && strAlterar != 'N' && strAlterar != 'n') { printf("\n\n Remover (S/N)? "); scanf("%s", &strAlterar); } } else printf("\n\n Codigo nao encontrado."); escreverVoltarMenu(); } /}void remover(lista pLista) { printf(" R E M O V E R\n"); printf(" = = = = = = =\n\n"); int intCodigo; printf(" Digite o codigo do registro a ser removido, ou zero (0) para voltar: "); scanf("%d", &intCodigo); if (intCodigo != 0) { lista p; p = pLista->prox; while(p != NULL && p->codigo != intCodigo) p = p->prox; if (p != NULL) { char strRemover; printf("\n\n Codigo..............: %d", p->codigo); printf("\n Descricao...........: %s", p->descricao); printf("\n Preco unitario......: %1.2f", p->preco_unit); printf("\n Qatindade em estoque: %d", p->qtde_estoque); while(strRemover != 'S' && strRemover != 's' && strRemover != 'N' && strRemover != 'n') { printf("\n\n Remover (S/N)? "); scanf("%s", &strRemover); if (strRemover == 'S' || strRemover == 's') { lista q; q = p->ante; q->prox = p->prox; q = p->prox; if (q != NULL) q->ante = p->ante; free(p); printf("\n\n Removido..."); } } } else printf("\n\n Codigo nao encontrado."); escreverVoltarMenu(); } }void listar(lista pLista) { printf(" L I S T A R\n"); printf(" = = = = = ="); char strVazia = 's'; lista p; p = pLista->prox; while(p != NULL) { strVazia = 'n'; printf("\n\n Codigo..............: %d", p->codigo); printf("\n Descricao...........: %s", p->descricao); printf("\n Preco unitario......: %1.2f", p->preco_unit); printf("\n Qatindade em estoque: %d", p->qtde_estoque); p = p->prox; } if (strVazia == 's') printf("\n\n Lista vazia!"); escreverVoltarMenu();}void sair(lista *pLista) { printf(" S A I R\n"); printf(" = = = =\n\n"); free(pLista); printf(" Precione uma tecla para sair..."); getch();}
vlw galera... abraço...
Discussão (4)
Carregando comentários...