Ir ao conteúdo

C lista encadeada em C, preciso criar um programa em c<code>


Ir à solução Resolvido por Visitante,

Posts recomendados

  • Solução
Postado

preciso de um programa em C, que recebe o valor de uma carta se for maior que a anterior e colocado no fim da fila se for menor que a anterior é colocada no início 

eu cheguei a escrever esse código, se alguém puder dar aquele help <>

 

<#include <stdio.h>
#include <stdlib.h>
typedef struct node{
int carta;
struct node *next;
struct node *prev;
}Tnode;
typedef struct DECK{
Tnode *head;
Tnode *tail;
}deck;
deck *criardeck(){
deck *d=(deck*)malloc(sizeof(deck));
d->head=NULL;
d->tail=NULL;
}
deck *PorNoInicio(deck *d,int carta){
if(d==NULL){
   Tnode *node=(Tnode*) malloc(sizeof(Tnode));>
    node->carta=carta;
    node->prev=node;
 node->next=node;
 d->head=node;
 d->tail=node;

}else{
    Tnode *node =(Tnode*) malloc(sizeof(Tnode));
d->head->prev= node;
d->head->next= node;
node->next=d->head;
node->prev=d->tail;
d->head=node;
}
}
deck *PorNoFim(deck *d, int carta){
    if(d==NULL){
PorNoInicio(d,carta);
}else{
Tnode *node=d->head, *novo;
while(node->next!=d->head){
    node=node->next;
}
novo=(Tnode*)malloc(sizeof(Tnode));
novo->carta=carta;
node->next=novo;
novo->prev=node;
novo->next=d->head;
d->tail=novo;
}
}
  deck *Imprimir(deck *d){
  Tnode *node=d->head;
  printf("%d",node->carta);
  node=node->next;
  while(node!=d->head){
    printf("%d\n",node->carta);
    node=node->next;
  }
  }
int main(){
  deck *d= criardeck();
  int retirada=0;
  int comp=0;
  while(retirada>=0){
      scanf("%d",&retirada);
    if(retirada>=comp){
        d = PorNoFim(d, retirada);
    }else{
    d = PorNoInicio( d, retirada);
    }
    comp=retirada;
  }
Imprimir(d);
free(d);
  return 0;
}

 

Postado
1 hora atrás, Atomicsub7 disse:

preciso de um programa em C, que recebe o valor de uma carta se for maior que a anterior e colocado no fim da fila se for menor que a anterior é colocada no início 

eu cheguei a escrever esse código, se alguém puder dar aquele help

mas o que você quer fazer exatamente?

Postado
8 minutos atrás, kgin disse:

mas o que você quer fazer exatamente?

eu quero fazer uma lista, que conforme ela vai recebendo os valores ela compare eles e organiza, por exemplo o código recebe m input de 8 2 7 9 4 6 3 5 a lista recebe e organiza da comparando o valor digitado com o aterior se for maior que o anterior ela e colocada no final se for menor e colocada no inicio, dessa maneira o output seria 2 7 4 3 5 6 9 8

Postado

Isso, só que eu não sei quanto é esse x, ele vai digitando ai quando ele quiser terminar o while acaba e printa o que ele digitou, o codigo é testa no spoj, então é um robo que insere os dados

 

Postado

uma lista não é um node, um node não é uma lista. Se programar assim só vai ter problemas.

 

Para inserir na ordem apenas manipule os ponteiros: encontre a posição certa e ajuste os ponteiros. Já postei vários exemplos disso aqui em C e C++. Deve ter programas completos que pode ler aqui mesmo, pesquisando no conteúdo do forum por lista ligada. Não me lembro agora.

 

 

 

 

Postado

@Atomicsub7 Não sei se isso te ajuda, mas eu dei uma modificada nessa lista que eu tenho aqui

/* Lista encadeada generica */
#include <stdio.h>
#include <stdlib.h>

struct no_t
{
    int valor;
    struct no_t *anterior, *proximo;
};

struct lista_t
{
    struct no_t *inicio, *fim;
};

void
apagaNo(struct no_t **no);
/*
 * Apaga apenas um nó
 */

struct no_t
*criaNo(int valor);
/*
 * Cria um nó
 */

void
apagaLista(struct lista_t **lista);
/*
 * Apaga toda uma lista
 */

struct lista_t
*criaLista(void);
/*
 * Cria uma lista vazia
 */

struct no_t
*colocaNoInicio(struct lista_t *lista, int valor);
/*
 * Coloca um nó no inicio da lista e devolve o nó colocado
 */

struct no_t
*colocaNoFim(struct lista_t *lista, int valor);
/*
 * Coloca um nó no fim da lista e devolve o nó colocado
 */

int main(void)
{
    struct lista_t *lista = criaLista();
    struct no_t *no = NULL;

    colocaNoFim(lista, 10);
    colocaNoFim(lista, 11);
    colocaNoFim(lista, 12);
    colocaNoInicio(lista, 1);
    colocaNoInicio(lista, 2);
    colocaNoInicio(lista, 3);

    printf("Mostra a lista do comeco ao fim\n");
    no = lista->inicio;
    while (no != NULL) {
        printf("%d\n", no->valor);
        no = no->proximo;
    }

    printf("Mostra a lista do fim ao comeco\n");
    no = lista->fim;
    while (no != NULL) {
        printf("%d\n", no->valor);
        no = no->anterior;
    }

    apagaLista(&lista);
    return(0);
}

void
apagaNo(struct no_t **no)
{
    if (*no != NULL) {
        (*no)->anterior = (*no)->proximo = NULL;
        free(*no);
    }
    *no = NULL;
}

struct no_t
*criaNo(int valor)
{
    struct no_t *no = malloc(sizeof(*no));
    if (no != NULL) {
        no->anterior = no->proximo = NULL;
        no->valor = valor;
        return(no);
    }

    return(NULL);
}

void
apagaLista(struct lista_t **lista)
{
    if (*lista != NULL) {
        struct no_t *tmp = (*lista)->inicio;
        while (tmp != NULL) {
            struct no_t *aux = tmp->proximo;
            apagaNo(&tmp);
            tmp = aux;
        }
        (*lista)->inicio = (*lista)->fim = NULL;
        free(*lista);
    }

    (*lista) = NULL;
}

struct lista_t
*criaLista(void)
{
    struct lista_t *lista = malloc(sizeof(*lista));

    if (lista != NULL) {
        lista->inicio = lista->fim = NULL;
        return(lista);
    }
    return(NULL);
}


struct no_t
*colocaNoInicio(struct lista_t *lista, int valor)
{
    struct no_t *no = criaNo(valor);

    if (no != NULL) {
        if (lista->inicio == NULL) {
            lista->inicio = lista->fim = no;
        } else {
            lista->inicio->anterior = no;
            no->proximo = lista->inicio;
            lista->inicio = no;
        }
        return(no);
    }

    return(NULL);
}

struct no_t
*colocaNoFim(struct lista_t *lista, int valor)
{
    struct no_t *no = criaNo(valor);
    if (no != NULL) {
        if (lista->inicio == NULL) {
            lista->inicio = lista->fim = no;
        } else {
            lista->fim->proximo = no;
            no->anterior = lista->fim;
            lista->fim = no;
        }
        return(no);
    }

    return(NULL);
}

 

Eu não consegui compilar o seu algoritmo 😕

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!