Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Krisofferson

[Resolvido] Lista encadeada de novo

Recommended Posts

Amigos, tenho pesquisado muito mas com pouco resultados!

eu estou tentando inserir os dados da estrutura abaixo, mas não consigo sair do lugar

 

//Estrutura utilizada para representar uma transação efetuada na conta ou cartão de crédito
typedef struct Transacao
{
	float fValor;
	stData sData;
	int iOperacao;
	stHorario sHorario;
	struct Transacao *prProximo;
}stTransacao;

//Estrutura utilizada para representar uma lista de transações
typedef struct Lista
{
	stTransacao *prInicio;
	stTransacao *prFim;
}stLista;

pensei que a função abaixo iria colocar todos os valores da struct stTransacao dentro da lista, mas da erro de conversão de tipos e etc.... Gostaria de um help com isso!!!

 

stTransacao *insLista(stTransacao *sortLista, float *valor, 
					stData *pData, int *Operacao, stHorario *pHorario){
	stTransacao *prTransacao = NULL;
	if (sortLista == NULL){
		if (sortLista = (stTransacao *)malloc(sizeof(stTransacao))){
			strcpy(sortLista -> fValor, valor);
			strcpy(sortLista -> sData, pData);
			strcpy(sortLista -> iOperacao, Operacao);
			strcpy(sortLista -> sHorario, pHorario);
			sortLista -> prProximo = NULL;
			printf("%s", sortLista);
			return sortLista;
		}
	}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

ah sim, lembrando que quando a estrutura tinha só um elemento do tipo char como abaixo eu consegui fazer a lista ordenada tranquilo, mas não consegui aplicar a mesma lógica pra essa estrutura com mais de um item com tipos de dados diferentes

 

#define TAM 60

typedef struct no{
	char conteudo[TAM];
	struct no *proximo;
}no;

no *ins(no *lista,char *elemento)
{
	if (lista==NULL){
		if (lista=(no*)malloc(sizeof(no))){
			strcpy(lista -> conteudo, elemento);
			lista -> proximo = NULL;
			return lista;
		}
		else
			printf("Estouro de memoria!\n");
	}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Krisofferson

 

há uma ideia de usar os comandos strcmp() e stricmp(); ja que é uma string

 

mas não me recordo muito bem, tbm não sei se esta correto

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, achei meio confuso o seu código

pq você usa strcpy para copiar valores que não são string??????

 

Isso está errado, bastava o uso do operador "=".

ou um memcpy, que copia a memória diretamente.

 

com ponteiros, você faria:

void atribuir(int *de, int *para)
{
(*para) = (*de);
// (*para) significa: o lugar que "para" aponta. O mesmo vale para "de";
}
e como você imprime na tela, um endereço de memória usando "%s"??

 

o correto seria imprimir com a flag "%x" que representa hexadecimal.

 

e se você fizesse assim:

 

//como parametros da função, só é preciso passar o início da lista e os valores que você quer adicionar.

void inserir(stTransacao *inicio, int valor1, int valor2)
{
//curr é o ponteiro que vai andar a lista toda, até encontrar o final.
stTransacao *curr;
stTransacao *novo = (stTransacao*)malloc(sizeof(stTransacao));

	curr = inicio;
	//aqui você faz a atribuição dos valores, utilizei apenas exemplos
	novo->valor_a = valor1;
	novo->outro_valor = valor2;

	//é importante atribuir NULL aqui, pois ele será o último nó após a inclusão.
	//e nos identificamos o último nó pois o item "proximo" dele aponta para NULL
	novo->prProximo = NULL;

	//agora vamos encontrar o final da lista, para adicionar o item
	while (curr->prProximo != NULL)
	{
		curr = curr->prProximo;
	}

	//quando encontrarmos o NULL, significa que é o último nó, vamos adicionar aqui.
	curr->prProximo = novo;
}

Nas duas funções que você postou, pelo que eu entendi, você ja deve passar o endereço do último nó, correto?

Compartilhar este post


Link para o post
Compartilhar em outros sites

VictorCacciari, valeu cara! Agora eu consegui entender como as structs e listas funcionam!! Tava misturando tudo mas já consegui separar os conceitos! vlw

Que bom que pude ajudar. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.