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

(Resolvido) Ajuda


Josefran

Pergunta

Galera ai tem duas implementações

lista **listadupla(lista *p, int n){
      int i;
      lista *a, *b, *c, *d, *q;
      
      matriz[1] = NULL;
      matriz[2] = NULL;
      matriz[0] = p;
      q = p;
      while(q){
               if(q->item < n){
                          if(!matriz[1]){
                                         matriz[1] = (lista *)mallocX (sizeof(lista));
                                         matriz[1]->item  = q->item;
                                         matriz[1]->next =  NULL;
                                         a = matriz[1];
                                         c = matriz[1];
                                         break;
                                         }
                          matriz[1] ->next = (lista *)mallocX (sizeof(lista));
                          matriz[1] = matriz[1]->next;               
                          matriz[1]->item = q->item;
                          c->next = matriz[1];
                          c = matriz[1];
                          }
               else{
                    if(!matriz[2]){
                                         matriz[2] = (lista *)mallocX (sizeof(lista));
                                         matriz[2]->item  = q->item;
                                         matriz[2]->next =  NULL;
                                         b = matriz[2];
                                         d = matriz[2];
                                         break;
                                         }
                          matriz[2] ->next = (lista *)mallocX (sizeof(lista));
                          matriz[2] = matriz[2]->next;               
                          matriz[2]->item = q->item;
                          d->next = matriz[2];
                          d = matriz[2];
                          }
               q = q->next;
                    }
                    
                    matriz[1] = a;
                    matriz[2] = b;
                     
               return matriz;     
      
      }

void exibe(int i){
     lista *p;
     if(i == 0){
     p = primeira;
     while(p){
              printf("%d\n", p->item);
              p = p->next;
              }
              }
     else
         {
              p = matriz[i];
              if(!matriz[i]){
                        printf("não existe itens aki\n");
                        return;}
          
     while(p){
              printf("%d\n", p->item);
              p = p->next;
              }}
          
              }

é seguinte a matriz tem apenas 3 posições. a 0 que é a lista original, a 1 que são todos os elementos menores q um "n" fornecido e a 2 que são os maiores.

O problema é quando rodo o código e gero a lista e tudo ele divide a lista original na matriz, mas na ora de exibir ele apenas exibe os elementos maiores e da erro para exibir os menores e ai alguém consegue entender o que ta errado?

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

desculpa a pressa mas olha o código inteiro

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>


int quant=0;
struct Lista{
       int item;
       struct Lista *next;
       };
typedef struct Lista lista;
lista *primeira=NULL, *ultima=NULL, *matriz[3];

void adiciona();
void busca();
void exibe(int i);
void remove();
void menu();
void tamanho();
int frequencia(lista *p, int n);
void substituir(lista *p, int n, int m);
void *mallocX (unsigned int nbytes);
lista **listadupla(lista *p, int n);

void *mallocX (unsigned int nbytes) 
{
   void *ptr;
   ptr = malloc (nbytes);
   if (ptr == NULL) {
      printf ("Socorro! malloc devolveu NULL!\n");
      exit (EXIT_FAILURE);
   }
   return ptr;
}

void adiciona(){
     lista *p;
     p = (lista *)mallocX (sizeof(lista));
     printf("Digite o item da lista:\n");
     scanf("%d", &p->item);
     if(!primeira){
                   p->next = NULL;
                   primeira = p;
                   ultima = p;
                   quant++;
                   return;
                   }
     p->next = NULL;
     ultima->next = p;
     ultima = p;
     quant++;
     
     }
     
void busca(){
     int s;
     int p=0;
     lista *q;
     q = primeira;
     printf("Digite o valor do item da lista\n");
     scanf("%d", &s);
     while(q){
              if(q->item == s){
                                  p++;
                                  printf("O item esta na %d posicao\n", p);
                                  return;}
                                  p++;
                                  q = q->next;
                                  }
     printf("O item não esta na lista\n");
     }

void remove(){
     int s;
     lista *q, *ant, *prox;
     q = primeira;
     prox = q -> next;
     ant = NULL;
     printf("Digite o valor do item da lista\n");
     scanf("%d", &s);
     while(q){
              if(q->item == s){
                                  if(!ant){
                                           free(q);
                                           primeira = primeira -> next;
                                           quant--;
                                           return;}
                                  ant->next = prox;
                                  free(q);
                                  quant--;
                                  return;}
                                  ant = q;
                                  if(q->next){
                                  q = q->next;
                                  prox = q->next;
                                  break;
                                  }
                                  q = NULL;
                                  }
     printf("O item não esta na lista\n");
     }
     
void exibe(int i){
     lista *p;
     if(i == 0){
     p = primeira;
     while(p){
              printf("%d\n", p->item);
              p = p->next;
              }
              }
     else
         {
              p = matriz[i];
              if(!matriz[i]){
                        printf("não existe itens aki\n");
                        return;}
          
     while(p){
              printf("%d\n", p->item);
              p = p->next;
              }}
          
              }
void tamanho(){
     printf("O tamanho do lista e %d\n", quant);
     }
     
int frequencia(lista *p, int n){
    lista *q;
    int i=0, cont=0;
          if(!q){
                printf("A lista estar vazia\n");
                return 0;
                }
          while(q){
                   if(q->item == n){
                              i++;
                              cont++;
                              printf("Ele esta na posicao %d\n", cont);
                              }
                   q = q->next;
                   cont++;
                   }
                   return i;
                   }

void substituir(lista *p, int n, int m){
     lista *q;
     q = p;
     if(n == m)
               return;
     while(q){
              if(q->item == n){
                         q->item = m;
                         }
              q = q->next;
              }
              }
              
lista **listadupla(lista *p, int n){
      int i;
      lista *a, *b, *c, *d, *q;
      
      matriz[1] = NULL;
      matriz[2] = NULL;
      matriz[0] = p;
      q = p;
      while(q){
               if(q->item < n){
                          if(!matriz[1]){
                                         matriz[1] = (lista *)mallocX (sizeof(lista));
                                         matriz[1]->item  = q->item;
                                         matriz[1]->next =  NULL;
                                         a = matriz[1];
                                         c = matriz[1];
                                         break;
                                         }
                          matriz[1] ->next = (lista *)mallocX (sizeof(lista));
                          matriz[1] = matriz[1]->next;               
                          matriz[1]->item = q->item;
                          c->next = matriz[1];
                          c = matriz[1];
                          }
               else{
                    if(!matriz[2]){
                                         matriz[2] = (lista *)mallocX (sizeof(lista));
                                         matriz[2]->item  = q->item;
                                         matriz[2]->next =  NULL;
                                         b = matriz[2];
                                         d = matriz[2];
                                         break;
                                         }
                          matriz[2] ->next = (lista *)mallocX (sizeof(lista));
                          matriz[2] = matriz[2]->next;               
                          matriz[2]->item = q->item;
                          d->next = matriz[2];
                          d = matriz[2];
                          }
               q = q->next;
                    }
                    
                    matriz[1] = a;
                    matriz[2] = b;
                     
               return matriz;     
      
      }
      
              
                                   
          
     
void menu(){
     int i=1, n, freq;
     lista **p;
     while(i){
     printf("Digite a opcao correspondente:\n 1- Inserir;\n 2- Remover;\n 3- Buscar; \n 4- Exibir;\n 5- Tamanho da Lista;\n 6- Verificar Frequencia\n 7- Substiruir numeros\n 8- Criar Duas Listas\n 9- Sair.\n");
     scanf("%d",&i);
     switch(i){
               case 1:
                    system("cls");
                    adiciona();
                    system("cls");
                     break;
               case 2:
                    system("cls");
                    remove();
                    system("pause");
                    system("cls");
                    break;
               case 3:
                    system("cls");
                    busca();
                    system("cls");
                    break;
               case 4:
                    system("cls");
                    printf("Digite qual das listas você deseja exibir:\n 1- original\n 2- menor\n 3-maior\n");
                    scanf("%d", &n);
                    exibe(n-1);
                    system("pause");
                    system("cls");
                    break;
               case 5:
                    system("cls");
                    tamanho();
                    system("cls");
                    break;
               case 6:
                    system("cls");
                    printf("Digite o valor que deseja verificar frequencia\n");
                    scanf("%d", &n);
                    freq = frequencia(primeira, n);
                    printf("A frequencia e de %d vezes\n", freq);
                    system("pause");
                    system("cls");
                    break;
               case 7:
                    system("cls");
                    printf("Digite o número que voce deseja substituir:\n");
                    scanf("%d", &n);
                    printf("Digite o número pelo qual vai ser substiruido:\n");
                    scanf("%d", &freq);
                    substituir(primeira, n, freq);
                    system("cls");
                    break;
               case 8:
                    system("cls");
                    printf("Digite o número que voce deseja separar as listas:\n");
                    scanf("%d", &n);
                    p = listadupla(primeira, n);
                    system("cls");
                    break;
               case 9:
                    exit(0);
                    break;
               default:
                       printf("Opcao invalida\n");
                       }}}


main(){

     menu();
     return 1;
     }

Link para o comentário
Compartilhar em outros sites

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,1k
    • Posts
      651,8k
×
×
  • Criar Novo...