
MadroxD
Membro Pleno-
Posts
24 -
Cadastrado em
-
Última visita
Reputação
3-
@Mazze pode me dar um exemplo ?
-
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!!
-
@arfneto mandei o codigo completo, obrigado pela atenção esta ajudando muito ! massadajudeu.pdf
-
@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
-
@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++; }
-
@arfneto não sei fazer desse jeito, mas obrigado
-
@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
-
@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); }
-
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; } } }
-
@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
-
é possivel remover um elemento especifico dentro de uma lista estatica? listar.rar
-
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
-
@devair1010 sua ideia deu certo, ajudou muito !! tinha ate me esquecido de agradecer, vou deixar o codigo pronto aqui alocamento swap.rar
-
@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
-
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