Ir ao conteúdo

MadroxD

Membro Pleno
  • Posts

    24
  • Cadastrado em

  • Última visita

Reputação

3
  1. @Mazze pode me dar um exemplo ?
  2. Pessoal to com um problema aqui, eu precisava criar uma lista q ficasse removendo os seus elementos de 2 em 2, por exemplo se minha lista tiver 6 elementos (1,2,3,4,5,6) e fosse definido que ela comece as eliminacoes pelo numero 1, o primeiro elemento a sair seria o 3 em seguida o 5. criei a função que insere, remove,imprime e conta quantos elementos tem a lista. no main eu criei pra testar: int i; int m=6, p=1, n=2; for(i=p; i<=m; i++){ Inserir(&cabeca,i); } printf("a lista tem %d elementos\neles:",qtd); Listar(cabeca); for(i=p+n; i<=m; i=i+n){ printf("\nFOI REMOVIDO %d DA LISTA\n",i); Remover(&cabeca,i); } printf("\na lista tem %d elementos\neles:",qtd); Listar(cabeca); for(i=p+n; i<=qtd; i=i+n){ printf("\nFOI REMOVIDO %d DA LISTA\n",i); Remover(&cabeca,i); } no primeiro for ele fez certinho removeu o numero 3 e 5, a lista que possuía 6 elementos agora tem 4 { 1,2,4,6} . Então no segundo for era para ser removido o numero 4 e voltar para o laço, 4 porque é ele q esta na posição 3. mas o problema é que esta removendo os mesmo numeros da anterior ... gostaria q vocês me ajudasse nessa!!
  3. @arfneto mandei o codigo completo, obrigado pela atenção esta ajudando muito ! massadajudeu.pdf
  4. @arfneto EstaVazia() funciona? sim Listar() esta retornando o que? ou dá erro? não esta retornando nada, se eu colocar um printf('%d", cabeca->proximo;) no while ela vai imprimir todos os elementos q eu digitei Está certo de que devia somar também no return? não eu ja corrigi o objetivo da funcao Listar() é apenas contar os elementos da lista
  5. @arfneto Estou usando C, inclusive vi agora que marquei tag errada ... enfim, estou aprendendo ainda a trabalhar com estrutura algumas coisa é como se fosse falar grego não entendo porque ela não retorna o qtd int Listar(Item *cabeca) { int qtd; if (EstaVazia(cabeca)){ printf( "Vazia\n" ); } else{ while(cabeca != NULL) { cabeca = cabeca->proximo; qtd++; } } return qtd++; }
  6. @arfneto não sei fazer desse jeito, mas obrigado
  7. @KXSY entao mano, a função para adicionar na lista, remover da lista esta certo o unico problema é que eu preciso de uma função q possa me retornar um dado (quantos elementos tem na lista), porque a ideia é tipo de uma roleta russa, que vai eliminando os dados até que sobre 1 elemento. Então eu criei um while(Remover(&cabeca)!= 1), ou seja enquanto tiver mais de um elemento ele vai ficar removendo e dentro do while eu coloquei um for(i=1; i<=6; i=i+2){ Remover(&cabeca,i-1); que é para remover de dois em dois: olha esse desenho para entender melhor
  8. @KXSY obrigado pela atenção, eu acho q me expliquei mal, essa funcao "void" esta errada eu preciso trabalhar com o valor no programa tem um while q trabalha enquanto ela tem mamanho, quando ela chegar a 1 elemento dentro da lista ela tem q para ou seja a ideia é executar ate ela ficar com 1 elemento segue o codigo completo em anexo; massadajudeu.rar adicionado 2 minutos depois @Mazze Obrigado pela atenção, sim ele tem q passar para int porque vou precisar trabalhar com o valor vou deixar o codigo aqui #include <stdio.h> #include <stdlib.h> struct Item { int numero; struct Item *proximo; }; bool Inserir(Item **cabeca, int valor) { Item *novo, *anterior, *atual; // -> Aloca memória para o novo item novo = (Item *)malloc(sizeof(Item)); // -> Checa se foi alocado memória corretamente. if (novo != NULL) { // -> Define e inicializa os valores. novo->numero = valor; novo->proximo = NULL; anterior = NULL; atual = *cabeca; // -> Atual é o ponteiro para o item da cabeça // -> Ordenação // Verifica se a posição atual não é nula (início ou fim) // Verifica se o valor é maior do que o número do item. while (atual != NULL && valor > atual->numero) { anterior = atual; atual = atual->proximo; } // -> Se não há posição anterior, então o novo item será a cabeça. if (anterior == NULL) { novo->proximo = *cabeca; // -> recebe o que já tem na cabeça. *cabeca = novo; // -> cabeça nova. } else // -> Arranjando posição no meio da lista... Remanejando. { // -> Elemento anterior aponta para o novo. anterior->proximo = novo; // -> Novo elemento aponta para o resto da lista. novo->proximo = atual; } return true; } else { return false; } } bool Remover(Item **cabeca, int valor) { Item *anterior, *atual, *itemRemover; anterior = NULL; atual = *cabeca; // -> Procura o valor. while(atual != NULL && atual->numero != valor) { anterior = atual; atual = atual->proximo; } // -> Quando encontra o valor. if(atual != NULL) { itemRemover = atual; if(anterior != NULL) { // -> Encurta o caminho. anterior->proximo = atual->proximo; } else // -> Quando o item é a cabeça. { // -> Ela recebe o próximo do primeiro item. *cabeca = (*cabeca)->proximo; } // -> Libera da memória o item excluído. free(itemRemover); return true; } return false; } bool EstaVazia(Item *cabeca) { return cabeca == NULL; } void Listar(Item *cabeca) { if (EstaVazia(cabeca)) { printf( " A lista esta vazia.\n\n" ); } else { printf( "Listando... \n"); while(cabeca != NULL) { printf("%i ", cabeca->numero); cabeca = cabeca->proximo; } } } main() { Item *cabeca = NULL; int i; int m=6, p=1, n=2; for(i=p; i<=m; i++){ Inserir(&cabeca,i); } //while(Remover(&cabeca)!= 1){//numero de elementos dentro da lista // for(i=1; i<=6; i=i+n){//tem q andar pela lista de 2 em 2 eliminando os numeros em q ele cair // Remover(&cabeca,i-1); // } //} Listar(cabeca); }
  9. Quero saber como faço para retornar na tela o numero total de elementos em uma fila, por exemplo: tenho uma fila dinamica que pelo meu codigo recebe 6 elementos, ela tem q me retornar o numero de elementos para q eu possa trabalhar com ele no main criei essa funcao que emprime os elementos: void Listar(Item *cabeca) { int i; if (EstaVazia(cabeca)) { printf( " A lista esta vazia.\n\n" ); } else { while(cabeca != NULL) { printf("%i ", cabeca->numero); cabeca = cabeca->proximo; } } }
  10. @arfneto seria uma estrutura que armazena de forma alinhada, estatica porque tem que ser pre definido o tamanho da capacidade de memoria, enfim, o problema desse meu codigo é que é necessario retirar elementos especificos não só removelo subistituindo por 0 mas remover até o espaco de memoria ou seja devo fazer uma fila dinamica. obrigado pela atenção @arfneto
  11. é possivel remover um elemento especifico dentro de uma lista estatica? listar.rar
  12. Boa tarde, estava tentando incrementar uma pilha em um programa mas esta dando erro na propria funcao sendo que peguei de um livro trab.rar
  13. MadroxD

    C manter dados de um vetor

    @devair1010 sua ideia deu certo, ajudou muito !! tinha ate me esquecido de agradecer, vou deixar o codigo pronto aqui alocamento swap.rar
  14. @Mazze @BEZERRA_BRITO o programa deu certo galera, mas uma coisa em que eu reparei foi que em alguns casos a saida n sai o valor exato e sim um aproximado ... segue o meu codigo para vocês euclidiana.pdf
  15. galera estou queria saber como q faz para ficar atualizando os dados de um vetor. ex, tenho um caso em q le os dados do ver, em outra condicional eu preciso usar esse dado q foi atribuido mas n esta indo. memoria.txt

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...