Tutoriais Sobre Pilhas

Estou querendo fazer uma pilha com alocação dinamica sem usar as Java Collections, gostaria de sabe se alguem conhece algum material na net, pra eu poder dar uma boa olhada.

Obrigado desde já

(PS: Já olhei no GOOGLE)

Por que você quer fazer isso??
Por que não usa Stack, por exemplo?

Abraço,

Armando

é pra um trabalho, o professor gostaria que nos fizemos por conta propria, eu tenho um aqui q um colega fez, mas naum entendi nd, e eu kero aprender como se faz, naum so copia.

[quote=armando]Por que você quer fazer isso??
Por que não usa Stack, por exemplo?

Abraço,

Armando[/quote]

Provavelmente porque ele está estudando estrutura de dados… porque isso ensina a programar melhor, treinando pontos importantes… porque aumenta a compreensão de como uma estrutura de dados funciona internamente… etc etc…

Amigo, a teoria é igual para qualquer inguagem, pode dar uma estudada em um livro de C++ ou Java que dá na mesma…

Voce vai ter os métodos push() e o pop() apenas. Precisa tbm definir se sua lista será genérica ou se, para propósito didático, vc vai implementar para segurar apenas inteiros, por exemplo.
Vc vai precisar de duas classes. A primeira é a classe Node, que representa cada elemento da sua pilha, e possui um campo para o dado e um campo para o próximo elemento a ser inserido na pilha.
A segunda classe é a pilha propriamente dita, que possui uma referência para um Node, que seria a “base” da pilha… Dai é só ir inserindo… Isso está bem teórico mesmo, mas é pra vc pensar um pouco :slight_smile:

Abraço!

Bom, eu não conheço nenhum tutorial assim, pronto, mas vamos lá…

Se você não quer usar collections, terá que fazer um array com alocação dinâmica. Isso não existe diretamente no java, o que você vai ter que fazer é o seguinte: comece com um array de tamanho 10, por exemplo. Quando chegar no último item, você cria um outro array, auxiliar, com tamanho de 10 posições a mais que o anterior, copia todos os itens para o novo array, e atribui esse array auxiliar ao array da sua classe.

De maneira geral, você tem que criar uma classe Pilha com esse array e os métodos push e pop. O método pop deve se comportar de acordo com o tipo de fila, se é FIFO ou LIFO. O método push é que faz o controle da alocação dinâmica.

Deu pra entender? Tenta aí, vai postando o código…

Abraço,

Armando

[quote=armando]Bom, eu não conheço nenhum tutorial assim, pronto, mas vamos lá…

Se você não quer usar collections, terá que fazer um array com alocação dinâmica. Isso não existe diretamente no java, o que você vai ter que fazer é o seguinte: comece com um array de tamanho 10, por exemplo. Quando chegar no último item, você cria um outro array, auxiliar, com tamanho de 10 posições a mais que o anterior, copia todos os itens para o novo array, e atribui esse array auxiliar ao array da sua classe.

De maneira geral, você tem que criar uma classe Pilha com esse array e os métodos push e pop. O método pop deve se comportar de acordo com o tipo de fila, se é FIFO ou LIFO. O método push é que faz o controle da alocação dinâmica.

Deu pra entender? Tenta aí, vai postando o código…

Abraço,

Armando[/quote]

Na moral… Isso vai dar um puta trabalho, dá pra fazer bem mais simples e funcional… e melhor: mais eficiente!

cassio
poderia me explicar?

Fiz um exemplo simples… pode ser melhorado

Classe Node

/*
 * Exemplo bem básico, esse node segura apenas um int
 * Vc pode mudar o tipo de dado se quiser. Dá pra tornar
 * genérico tbm
 */
public class Node {
	
	//atributos
	public int valor;
	public Node prox;
	
	//construtor
	public Node(int v){
		valor = v;
		prox = null;
	}
}

classe Pilha


public class Pilha {
	
	//atributos
	private Node topo = null; //o topo da pilha	
	
	//construtor
	public Pilha(){}
	
	//retorna se a pilha esta vazia
	public boolean isEmpty(){
		return topo == null;
	}
	
	//insere na pilha
	public void push(int v){
		Node novo = new Node(v);
		if(topo == null)
			topo = novo;
		else{
			novo.prox = topo;
			topo = novo;
		}
	}
	
	//retira um elemento do topo da pilha e retorna seu valor
	public int pop(){
		int retVal = topo.valor;
		Node aux = topo;
		topo = topo.prox;
		aux = null;		
		return retVal;
	}

}

Classe para teste

import java.util.Scanner;

public class TestePilha {	
		
	public static void main(String args[]){
		Pilha pilha = new Pilha();
		Scanner input = new Scanner(System.in);
		System.out.print("Informe uma palavra: ");
		String palavra = input.next();
		
		//inserindo os caracteres de palavra na pilha
		for(int i = 0; i < palavra.length(); i++){
			pilha.push(palavra.charAt(i));
		}
		
		/*
		 * exibindo a palavra ao contrário
		 * 
		 * ==> lembre-se: a pilha funciona assim:
		 *  O primeiro a entrar eh o ultimo a sair! 
		 */
		 while(!pilha.isEmpty()){
			 System.out.print((char)pilha.pop());
		 }		
	}
}

Abraço!

brigadao cara, era isso mesmo q eu queria valeu msm

Olá pessoal, estou tentando pazer um puma aplicação com pilha mas estou me enrolando, o professor pediu p fazer um programa para ler do teclado 20 nomes, colocar em um vetor de String; Usar uma estrutura de dados PILHA para criar um outro vetor com esses nomes lidos na sua ordem inversa de entrada.

Eu estou tendo muita dificuldade em pilha criei o vetor mas n to sabendo colocar p armazenar na pilha em ordem inversa:
import java.util.Scanner;

public class Pilha2 {
static String[] array = new String[20];

public static void main(String[] args) {

	int i;
	Scanner input = new Scanner(System.in);
	for (i = 0; i < array.length; i++) {
		System.out.print("Digite uma String na posicão " + i + " = ");
		array[i] = input.next();

	}

}

}

eu sei q n fiz nada, mas… espero q me ajudem.