Ir ao conteúdo

Posts recomendados

Postado

Boa noite, galera. Gostaria de uma ajudinha em completar a funcao abaixo. Só consegui remover os “anos” que repetem da lista, o resto estou quebrando a cabeça. Quem puder ajudar, ficarei muito grato.

separa_ano – a função recebe a lista encadeada (ou seja, o endereço do
primeiro nó da lista) e um ano, e MODIFICANDO a lista original, retorna uma
(sub)lista encadeada somente com os livros daquele ano. Não devem ser criados
novos nós. O trecho correspondente aos livros desse ano deve ser “cortado” da
lista original. A lista original deve ser “emendada”, e o endereço do primeiro nó do
trecho (sublista) arrancado deve ser retornado ( sendo necessário colocar NULL no
campo prox do último nó dessa (sub)lista ). A sua função deve levar em conta a
ordenação da lista original. A função retorna o endereço do primeiro nó da (sub)
lista resultante. Para facilitar, considere que o ano solicitado nunca é o do
primeiro livro ou do último livro. Se não existir nenhum livro para o ano recebido,
a função retorna NULL.

Citação
Citação


typedef struct noDaLista NoDaLista;
struct noDaLista
{
 char titulo[51];
 char autor[51];
 int ano;
 int quantidade;
 NoDaLista *prox;
};

NoDaLista* separa_ano( NoDaLista *lista, int ano) {
  NoDaLista *p, *a;
  p = lista;
  a = NULL;
  NoDaLista *novo = (NoDaLista *)malloc(sizeof(NoDaLista));
  while(p != NULL)
  {
    if(p->ano == ano)
    {
      a->prox = p->prox;
      free(p);
      p = a;
    }
    a = p;
    p = p->prox;
  }
  return lista;
}

 

 

 

 

 

Postado
16 horas atrás, Ligia Barros disse:

a função recebe a lista encadeada (ou seja, o endereço do
primeiro nó da lista

 

Essa é uma noção comum, mas não está certa. Se fizer só isso vai trabalhar MUITO mais. E está já trabalhando muito mais. A lista tem outras variáveis --- ou pode ter --- além desse endereço. E isso é bom e não ruim. Facilita apenas.


Veja uma possibilidade

struct no
{
    void*      item;
    struct no* proxima;
    struct no* anterior;
};  // no
typedef struct no Node;

struct a_propria_lista
{
    char*     nome;
    unsigned  quantos;
    unsigned  maximo;
    Node*     inicio;
    Node*     fim;
};
typedef struct a_propria_lista Lista;

Pra que isso? Simples: ao declarar

Lista uma_lista, outra_lista, lista[500];
Lista* lista;

Você tem centenas de listas, mas cada uma pode ter um nome, já tem ponteiros pros dois lados, uma capacidade em termos de número de nós, um total atualizado de nós e um ponteiro para o início e outro para o fim. Tudo fica mais fácil.

E em cada nó tem os itens, só que foram declarados (void*) item. Então sua lista funciona para qualquer coisa, para o resto da vida.

 

O enunciado não está bom e talvez esteja até errado mesmo. Se vai criar uma sub-lista é uma outra estrutura. Se vai apagar os nós da lista original quer dizer que não está criando uma sub-lista mas apenas editando a lista original e apagando livros que não são do ano desejado. 

 

Se vai criar uma sub-lista não vai criar os nós de dados, mas vai criar os nós correspondentes à estrutura da sub_lista.

 

De todo modo não é nada complicado. Escreva a lista normal se ainda não fez isso, as funções todas. Claro que vai criar uma função mostra() para poder listar e testar se criou direitinho, e então copie essa função para criar a sub lista. É óbvio que para listar vai percorrer a lista toda e então no caminho vai criando a sub lista e corrigindo os ponteiros

 

 

 

 

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!