Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda com estrutura de dados...


Samukaaa

Pergunta

Preciso de ajuda com essa lista escadeada, os erros são na parte de remoção o ultimo item não é removido da lista, é na parte de perquisar itens...

porfavor eu preciso pra amanhã;

#include <stdio.h> 
#include <stdlib.h> 
#include <conio.h> 
#include <windows.h> 

#define dgetchar() getchar();getchar();



// Estrutura da LISTA
struct tipo_lista {
   int cod;    
   char nome[30];
   int qtd;
   float valor;
    
   struct tipo_lista *prox;
};


// Definição de um NOVO tipo de DADOS chamado Lista
typedef struct tipo_lista Lista;



/*******************************************************************************
  Procedimento e Funções de Apoio
*******************************************************************************/

// Posiciona uma mensagem na coluna e linha especificada
void gotoxy(int coluna, int linha);

//Desenhar borda
void desenharBorda();

// Exibi o Menu Principal
void menuPrincipal();


/*******************************************************************************
  Procedimento e Funções para Manipular a LISTA 
*******************************************************************************/

  // declara uma lista não inicalizada
       Lista *listaRegistro;
       
       //Inseri dados
       Lista* inserirDados(Lista *lista);//declaração da função
       
       //exibir dados
       void LiberarLista(Lista *lista);
       
       //exibir dados
       void exibirDados(Lista *lista);

       void excluir(Lista *lista, int v);
       //Buscar
 //      void ListaBusca(Lista *lista);
       
       
       
       //função de inicialização : retorna uma lista vazia
       Lista *inicializa();
       
       

 // Função de inicialização: retorna uma lista vazia 
Lista *inicializa(void)
{
  return NULL;
}



/*******************************************************************************
  Programa PRINCIPAL
*******************************************************************************/
int main()
{
     
   // Repetição Infinita
   for (;;)
   {
      menuPrincipal();      
   } 
      
   return 0;        
  
}


/*******************************************************************************

  BORDAS

*******************************************************************************/


// Função para posicionar na coordenada X,Y
// (Coluna(X),Linha(Y)) da tela.
void gotoxy(int coluna, int linha)
{
    COORD point;
    point.X = coluna; point.Y = linha;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), point);
}


// Desenhar borda
void desenharBorda()
{
   int i = 0;
   
   for (i=0;i<80;i++){
    gotoxy(i,0);
    printf("#");
    
    gotoxy(i,3);
    printf("#");
//-------------------
    gotoxy(i,14);
    printf("");
    
    gotoxy(i,15);
    printf("");
    
    gotoxy(i,16);
    printf("");
    
    gotoxy(i,17);
    printf("");
    
    gotoxy(i,18);
    printf("");
//---------------------
    gotoxy(i,19);
    printf("#");
    
    gotoxy(i,24);
    printf("#");
           
   }
   
   for (i=0;i<24;i++){
    gotoxy(0,i);
    printf("#");
    
    gotoxy(79,i);
    printf("#");
       
   }
}


// Procedimento para exibir o Menu Principal
void menuPrincipal()
{
      int op;
      
      // Limpa a tela.
      system("title INFORMATICA MCS");
      system("cls"); 
      
      // Alterar a cor do fundo da tela e a cor da fonte (fundo azul e fonte branca).
      system("color 4F"); 

      desenharBorda();

       
      gotoxy(25,1);
      printf("M C S   I N F O R M A T I C A");

      
      // LISTA ***************************************************************** 
      gotoxy(25,5);
      printf("CADASTRO");
              
      gotoxy(25,8);     
      printf("[1] - INSERIR PRODUTO"); 
      
      gotoxy(25,10);     
      printf("[2] - EXIBIR PRODUTOS");
      
      gotoxy(25,12);     
      printf("[3] - BUSCAR PRODUTOS");
      gotoxy(25,14);     
      
      printf("[4] - EXCLUIR PRODUTOS");
      gotoxy(25,16);     
      
      printf("[5] - LIBERAR LISTA");
      gotoxy(25,18);  

     
      // SAIR  *****************************************************************
      
      gotoxy(25,18);
      printf("[0] - SAIR");
      
      gotoxy(25,20); 
      printf("Digite a Operacao: ");
      scanf("%d",&op);

      
      switch(op){
         
         int numero;
         
         // LISTA ***************************************************************         
         case 1 : 
            // Inseri um elemento na Lista          
            listaRegistro = inserirDados(listaRegistro);
            break;
         case 2 : 
            // Exibir dados
            exibirDados(listaRegistro);
            break; 
            
         case 4: 
                  gotoxy(25,26);
                 printf("Digite o codigo para retirar\n");
                 scanf("%d",&numero);
               excluir(listaRegistro, numero);
               break;  
           //Buscar em lista    
         case 3 : 
            gotoxy(25,26); 
    //        ListaBusca(listaRegistro);
               break;  
               
               case 5 : 
            // LIBERAR
            LiberarLista(listaRegistro);
            break;
               
       



         // SAIR  **************************************************************
         // Finaliza o programa
         case 0 : 
            exit(0);
            break;  
            
         default: 
            printf("Opção Errada");
       }
}


// Inseri Dados 
Lista* inserirDados(Lista *lista)
{
  int cod;     
  char nome[30];
  int qtd;
  float valor;

  // Alocar memória para o novo registro da lista
  //Lista *novo = (Lista*) malloc(sizeof(Lista));
  
  Lista* novo = (Lista*) malloc(sizeof(Lista));

  novo->prox = lista;

  

  system("cls"); // Limpa a tela.
           
  gotoxy(30,1);
  printf("Inserir Dados");
  
  gotoxy(5,4);
  printf("Entre com o codigo do Produto: ");
   scanf("%d",&cod);
  
  gotoxy(5,5);
  printf("Entre com o nome do Produto: ");
  getchar();
  gets(nome);
    
  gotoxy(5,6);
  printf("Entre com a Quantidade: ");
  scanf("%d",&qtd);
  
  gotoxy(5,7);
  printf("Entre com o Valor: ");
  scanf("%f",&valor);
  
    
   // Atribuir os valores lido 
   // para o novo elemento da lista
   novo->cod = cod;
   sprintf(novo->nome, " %s", nome);   
   novo->qtd = qtd;
   novo->valor  = valor;
   
   // Associar o novo elemento a lista 
   //novo->prox = lista;
    
  gotoxy(30,20);
  printf("Pressione uma tecla para continuar...");
  getchar();
  getchar();
  
  return novo;
           
}



// Exibir Dados 
void exibirDados(Lista *lista)
{
  int i=0;
  // Variável (ponteiro) auxiliar para percorrer a lista 
  Lista* p; 

  system("cls"); // Limpa a tela.
           
  gotoxy(30,1);
  printf("Exibir Dados");
  
  gotoxy(5,5);
  printf("Codigo");
  
  gotoxy(20,5);
  printf("Produto");
  
  gotoxy(40,5);
  printf("Quantidade");
  
  gotoxy(60,5);
  printf("Valor");

 // Imprimir todos os elementos da lista  
 for (p = lista; p != NULL; p = p->prox)
  {
    gotoxy(5,i+7);
    printf("%d",p->cod);
        
    gotoxy(20,i+7);
    printf("%s",p->nome); 

    gotoxy(40,i+7);
    printf("%d",p->qtd);
     
    gotoxy(60,i+7);
    printf("%2.2f",p->valor);     
    
    i++;  
  }
  
  gotoxy(30,22);
  printf("Pressione uma tecla para continuar...");
  getchar();
  getchar();
  
}

//################################################################################################

/* função vazia: retorna 1 se vazia ou 0 se não vazia */


int vazia (Lista* l)
{
  if (l == NULL)
     return 1;
  else
     return 0;
}

void excluir (Lista* l, int v)

{
  Lista* ant = NULL; /* ponteiro para elemento anterior */
  Lista* p = l;      /* ponteiro para percorrer a lista*/
  
  
  if (vazia(l) == 1 )
     {
       printf("Operacao não pode ser realizada! Lista esta vazia.");
       return;            
     } 
  
  
  /* procura elemento na lista, guardando anterior */
  while (p != NULL && p->cod != v)
   {
    ant = p;
    p = p->prox;
   ]
    
   }
   
   /* verifica se achou elemento */
   if (p == NULL)
    {
      printf("O elemento [ %d ] não consta na Lista.\n",v);
      return;    
    }  
      
   /* retira elemento */
   if (ant == NULL)
    {
         /* retira elemento do inicio */
         l = p->prox;   
         
        
           
    }
   else
    {
       /* retira elemento do meio da lista */
       ant->prox = p->prox;
    }
  
 // Liberar da memoria   
 free(p);

}

/* Função Buscar */


/*
  void ListaBuscar(Lista *l , int v)
{
       
        system("cls"); 
      
       printf("Digite o valor a ser buscado");
       scanf("d%", &v);
       
       
       Lista*p;
       
       for(p=l;p!=NULL; p=p->prox); {
                             //info
                         if(p->cod == v){ 
                         
                         return p;
                         
                         }
                         
                         else {
                          
                          return NULL;
                          
                         }
                         
                         
         */                
                 






void LiberarLista(Lista* lista)
{
    int t;
     
     Lista* p = lista;
while(p !=NULL ){
        
    Lista* t = p ->prox;
    
    free(p);
    
    p=t;
    
}
}

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...