Ir para conteúdo

POWERED BY:

Arquivado

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

Kimura

Stack

Recommended Posts

Estou montando este programa em C para trabalhar com Stacks Mas não está funcionando corretamente.

 

struct stack
{
	int data;
	struct stack *next;
} stack;

void push(struct stack **top, int valor, int *status)
{
	struct stack *cache;

	cache = (struct stack *) malloc(sizeof(struct stack));

	if(cache == NULL)
	{
		*status = 0;
	}
	else
	{
		cache->data	=	valor;
		cahe->next	=	*top;
		*top				=	cache;
		*status			=	1;
	}
}

int pop(struct stack **top, int *status)
{
	int valor;
	struct stack *cache;

	if(*top == NULL)
	{
		*status = 0;
	}
	else
	{
		valor		= (*top)->data;
		cache	= *top;
		*top		= (*top)->next;
		free(cache);
		*status	= 1;
	}
	return valor;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que você quer é trabalhar com uma lista ligada... mas inserir e retirar dados como se fosse uma stack, certo?

é muito simples....

eu refiz o código:

 

http://codepad.org/gBnVmKC1

da uma olhada, veja se entende

 

La no fórum Artigos e Laboratório de Códigos fontes (C/C++) (subforum de C/C++) eu escrevi um tutorial bem simples para ponteiros... as vezes te ajuda em alguma coisa.

Se você buscar por "lista encadeada" no fórum vai encontrar muita coisa interesante também.

 

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Victor,

 

Te agradeço mesmo pela reformulação do código, mas tem um porém: Eu não posso reformular este código inteiro.

 

Se puder me diga onde estou errando.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hmmm... entendi.

 

Sinceramente, acho que complicaram a toa... mas... =P

O compilador para, você leu o que ele diz a respeito??

Eu ainda posso até fazer um chute, ele vai te falar que está a passar um tipo de ponteiros diferente do esperado, e falta um argumento na função pop();

 

topo1 já um ponteiro para um ponteiro para tpilha...

você está passando apenas a "tpilha" apontada pelo ponteiro apontado por topo1.

(ficou meio confuso... hahahahhahha)

 

Se eu entendi, você tem que unir as duas stacks em uma nova stack, chamada topo3?

-------------------------------

EDIT:

Dei uma modificada na função pra você, veja o que você acha:

(obs.: não compilei ainda, assim que eu for pra casa compilo)

 

void unePilhas(struct tpilha **topo1, struct tpilha **topo2, struct tpilha **topo3)
{
int *dummy = (int*)malloc(sizeof(int));

	for (;;)
	{
		if ((*topo1) == NULL && (*topo2) == NULL)
			return;
		
		else if ((*topo1) == NULL && (*topo2) != NULL)
			Push(topo3, Pop(topo2, dummy), dummy);
			
		else if ((*topo2) == NULL && (*topo1) != NULL)
			Push(topo3, Pop(topo1, dummy), dummy);
			
		else if ((*topo1)->dados > (*topo2)->dados)
			Push(topo3, Pop(topo2, dummy), dummy);
			
		else if ((*topo1)->dados <= (*topo2)->dados)
			Push(topo3, Pop(topo1, dummy), dummy);
	}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Victor,

 

Ontem à noite eu consegui eliminar os erros de compilação:

 

Obs.: Vou anotar o seu modo, que parecer ser bem interessante também.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Kimura, continua faltando argumentos para as funções pop() e push().

 

Para ordenar os valores da pilha3, você pode usar um método de ordeação, como bolha, por exemplo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esqueci de te falar, eu removi o status das funções pop e push. Por isso consegui organizar o código direitinho.

Estou na main agora.

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.