Ir ao conteúdo
  • Cadastre-se

Posts recomendados

Postado

Eu tenho uma lista encadeada onde armazena nome do filme, posição da lista em que quer armazenar e a chave do filme (um código para busca). Essas 3 variáveis estão dentro de uma struct, eu quero usar uma função em que digitando a chave do filme eu verifico se o filme existe na lista.

A minha ideia é o seguinte, eu estou querendo criar um ponteiro para apontar no nó da lista e verificar se a chave exista ali de fato. Mas a dúvida é: como criar esse ponteiro e como trabalhar com ele dentro da função. Deixarei abaixo mais ou menos a ideia do código e se possível já corrigir ou refazer o código por favor, pois é urgente e estou atrasado, rs.

 

Obs: Aqui está apenas o .h, a main.c nada mais nada menos está lendo o comando em que o usuário digita para buscar uma chave

#include "lista.h"

typedef struct no_ NO;
typedef struct item ITEM;
	

struct item{
	int chave;
	int posicao;
	char nome[20];
};

struct no_{
	ITEM item;
	NO *proximo;
};

struct lista_{
	NO *inicio;
}

/* Criação e inicialização da lista */

LISTA* lista_criar(void){
	
	LISTA *lista = (LISTA*) malloc(sizeof(LISTA));
	if(lista != NULL){
		lista->inicio = NULL;
	}
	return(lista);
}
/* Função em que busca o elemento na lista 
  int comando = comando em que o usuário digita para buscar */
int lista_buscar(int chave, LISTA *lista, int comando){ 
	if(comando == 5){
		if(){ /* aqui eu queria verificar se a chave procurada é o primeiro elemento da lista
        		Mas como ? Seria if(*inicio == chave) ?*/
        }
      else{ /* caso a chave procurada não seja o primeiro elemento da lista 
      		Tava com a ideia de jogar um for e verificar cada nó da lista e verificar a chave, mas como ?
	}
}

 

  • Haha 1
Postado
typedef struct no_ NO;
typedef struct item ITEM;

struct item{
	int chave;
	int posicao;
	char nome[20];
};

struct no_{
	ITEM item;
	NO *proximo;
};

struct lista_{	NO *inicio; }

 

A lista com ponteiros só para um lado é mais problema do que solução. Nos casos --- quase todos --- em que tem uma coleção e quer iterar, navegar para frente e para trás, é muito chato não ter o ponteiro para o outro lado.

Sua lista só tem um ponteiro para o início. Podia ter o tamanho e a capacidade, o normal. E se tivesse ponteiros para os dois lados poderia ter um ponteiro para o fin também.

 

Em geral se está implementando a lista com ponteiros não usa a posição. Se usa a posição quando a lista está em um vetor e não em ponteiros.

 

E como buscar o filme?

 

Tudo depende de como vai colocar os filmes lá. Se vai colocar por ordem de chave ou de nome ou apenas inserir no começo. 

 

Claro que o mais versátil seria colocar o filme na ordem e ter os ponteiros para o outro campo, certo? Inserir na ordem de chave e ter os ponteiros para a posição  ou mesmo ter dois conjuntos de ponteiros na ordem. 

 

Com ponteiros só para a frente seria meio b3st@ inserir no final. Então inserindo no começo para buscar um filme por chave ou nome apenas segue a lista e procura um a um. Se inseriu por ordem de algum dos campos a única diferença é que na busca por esse campo não precisa varrer a lista toda.

 

Qualquer loop serve. Até achar o cara ou o ponteiro para o próximo ser nulo.

Postado

@arfneto

 

Eu ainda não aprendi a ideia de ter ponteiro para os dois lados, nem sabia que seria possível isso. Sobre de como colocaria os filmes na lista esqueci de mencionar isso mesmo, mas seria da seguinte forma:

 

Cada filme novo que eu insiro na lista ele iria para a primeira posição, então se eu insiro um segundo filme o que era primeiro passa a ser o segundo e assim vai. E também é uma lista não ordenada.

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