Ir ao conteúdo
  • Cadastre-se

KIBUM

Membro Júnior
  • Posts

    3
  • Cadastrado em

  • Última visita

Reputação

0
  1. KIBUM

    C lista encadeada em c

    Olá Simon, desculpa a demora, estou muito ocupado com a faculdade. Essa é a questão 1177 do URI e esse é o código completo: #include <stdio.h> #include <stdlib.h> #include <string.h> struct Lista{ int valor; struct lista *prox; }; typedef struct Lista lista; lista* inicializa(void){ return NULL; } lista* insere(lista* li, int i){ lista* novo = (lista*) malloc(sizeof(lista)); novo->valor = i; novo->prox = li; return novo; } void imprime (lista* li, int x){ int i = 0, j = 0, count = 0, aux, aux2; lista* p; aux = x - x; aux2 = x; do{ for (p = li; p != NULL; p = p->prox){ p->valor = aux; printf("N[%d] = %d\n", i, p->valor); aux++; if(p->valor == aux2-1) aux = 0; p->valor = aux; i++; j++; } }while(j < 1000); } void libera (lista* li){ lista* p = li; while (p != NULL) { lista* t = p->prox; free(p); p = t; } } int main() { int t; lista* lista1; lista1 = inicializa(); scanf("%d", &t); lista1 = insere(lista1, t); imprime(lista1, t); libera(lista1); return 0; } Pelo que entendi, você está me sugerindo adicionar um novo elemento na struct que seria um ponteiro para o nó anterior, certo? Então, ficaria mais ou menos assim: struct Lista{ int valor; struct lista *prox; struct lista *ante; }; lista* insere(lista* li, int i){ lista* novo = (lista*) malloc(sizeof(lista)); novo->valor = i; novo->prox = li; novo->ante = NULL; return novo; } void imprime (lista* li, int x){ int i = 0, j = 0, aux; lista* p; //aux = 0; p->valor = 0; do{ for (p = li; p != NULL; p = p->prox){ printf("N[%d] = %d\n", i, p->valor); p->prox->valor = p->valor+1; p->ante->valor = p->valor; if(p->ante->valor == p->valor-1) p->valor = 0; i++; j++; } }while(j < 1000); } Acho que não, né?
  2. KIBUM

    C lista encadeada em c

    Olá Mauro, muito obrigado por responder , consegui resolver o problema criando duas variáveis auxiliares, o código ficou assim: void imprime (lista* li, int x){ int i = 0, j = 0, count = 0, aux, aux2; lista* p; aux = x - x; aux2 = x; do{ for (p = li; p != NULL; p = p->prox){ p->valor = aux; printf("N[%d] = %d\n", i, p->valor); aux++; if(p->valor == aux2-1) aux = 0; p->valor = aux; i++; j++; } }while(j < 1000); } Tenho outra dúvida, como faço pra fechar um tópico aqui? Abraços!
  3. KIBUM

    C lista encadeada em c

    void imprime (lista* li){ int i = 0, j = 0, count = 0; lista* p; do{ for (p = li; p != NULL; p = p->prox){ p->valor = p->valor-1; printf("N[%d] = %d\n", i, p->valor); count++; if(p->valor == 0) p->valor = count; count = 0; i++; j++; } }while(j < 10); } Boa noite a todos, estou tentando criar um programa em C utilizando lista encadeada, esse programa imprime uma variável T-1 até o 0 e reinicia a contagem. Ex: Entrada - 3. Saída - 0,1,2,0,1,2,0,1,2,0,1,2...0,1,2 Não entendo onde está o erro, a saída do meu programa fica assim: 2,1,0,0,0,0,0....0,0,0 E se alguém puder me dar dicas de como inverter a saída eu agradeço. Obrigado, abraços! :3

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...