[Off] [Desafio] Estrutura Pilha
#1

Boa noite, decidi postar esse desafio sу pra dar uma movimentada, nгo tenho tido contato com o povo do fуrum ultimamente.



O desafio й bastante simples, pra quem conhece, basta implementar uma pilha usando vetores.

A estruturaзгo precisa conter:
  • Mйtodos
    • pop - mйtodo para retirar um item da pilha
    • push - mйtodo para acrescentar um item a pilha
    • top - mйtodo para verificar qual й o elemento que estб no topo da pilha
    • size - mйtodo para verificar quantos elementos tem na pilha

    Estruturaзгo:
    Vocк usarб um vetor para ser a pilha, e irб fazer os mйtodos citados acima para trabalhar em cima desse vetor.

    Exemplos: se por acaso vocк usar o mйtodo push(10), vocк estarб inserindo o valor 10 no topo da pilha(vetor).
    Se vocк usar pop(), vocк estarб retirando o valor que estб no atual topo da pilha(vetor).

    serб necessбrio ter uma variбvel que armazene o index do topo da pilha(vetor), para que vocк possa manipular a pilha, quando vocк usar o pop(), ele nгo irб retirar o valor da pilha, ele irб apenas decrementar a variбvel do topo, assim quando utilizar push(valor), vocк irб sobrescrever o valor antigo(excluindo ele).

Para quem nгo conhece a estrutura, existe o colega ******.
Conceitos:
Pilha descriзгo(wiki)
Pilha descriзгo


OBS: Й um desafio um tanto complexo, levando em conta o nнvel visto nessa board diariamente, mas й uma boa prбtica.


Quem for conseguindo pode postando o cуdigo, e a lуgica usada(explicaзгo, sу se quiser).
Reply
#2

Eu vi isso em um PDF que eu estava estudando mais nao consigui resolver ... Mais tem esse code que eu entendi um pouco , E igual a isto ou esta errado ?

OBS: Nao foi eu que fiz , Autor : mantu

Код:
package help.guj.zagaia;  
  
public class SimpleStackTest {  
    public static void main(String[] args) {  
        String[] names = {  
            "Mark", "Berg", "John", "Beni", "Jebb", "June",  
            "Mary", "Karl", "Fred", "Hall", "Troy", "Joan"  
        };  
        SimpleStack stack = new SimpleStack(10);  
          
        System.out.println(  
            "Pilha de " + stack.getCapacity() + " posiзхes criada: " + stack  
        );  
        System.out.println();  
          
        System.out.println("Preenchendo a pilha:");  
        for(int i = 0; i < names.length; i++) {  
            System.out.print("\tInserindo o nome \"" + names[i] + "\":\t");  
            if(stack.push(names[i]) == null)  
                System.out.println("PILHA CHEIA!!! impossнvel inserir...");  
            else  
                System.out.println(  
                    stack + ". " + (stack.getCapacity() - stack.getSize()) +   
                    " posiзхes restantes."  
                );  
        }  
        System.out.println();  
          
        System.out.println("Removendo 5 elementos da pilha:");  
        for(int i = 1; i <= 5; i++) {  
            System.out.print("\t" + i + "a. remoзгo: \"" + stack.pop() + "\".");  
            System.out.println(" A pilha agora esta assim: " + stack);  
        }  
        System.out.println();  
          
        System.out.println(  
            "O atual nome no topo da pilha й \"" + stack.peek() + "\"."  
        );  
        System.out.println(  
            "O que? Nгo acredita??? Veja entгo: " + stack  
        );  
        System.out.println("Ora essa...");  
        System.out.println();  
          
        stack.clear();  
        System.out.println("Limpando a pilha: " + stack);  
        System.out.println();  
          
        System.out.print("Consigo tirar mais algo da pilha? ");  
        System.out.println(  
            stack.pop() == null ? "Nгo consigo..." : "Consigo sim!"  
        );  
    }  
}
E isso ? se for tenho mais ou menos uma ideia de como fazer
Reply
#3

Nгo, isso й um exemplo de uso...

A pilha dele ai jб tб pronta, que й a classe "SimpleStack", й isso que eu pedi no desafio...
Que seja implementado a pilha.


Й mais fбcil do que parece, mas posso imaginar que vгo ter dificuldades porque a maioria aqui nгo manja mesmo de lуgica.
Reply
#4

De uma olhada!!

@Edit Adicionado mйtodo "Size"

Код:
#include <a_samp>

const Maximo    = 40 ;

new __@vetor[Maximo],
    __@tamanho;
    

main() {

    criarPilha();
    
    adicionarPilha(20);
    adicionarPilha(30);
    
    printf("Elemento na pilha: %d\n", elementoNaPilha());

    printf("Elementos na pilha: %d elementos\n", tamanhoPilha());

    retirarPilha();
    printf("Elemento na pilha: %d\n", elementoNaPilha());

    retirarPilha();
    printf("Elemento na pilha: %d\n", elementoNaPilha());
}

stock criarPilha() {

    __@tamanho = 0;
}

stock elementoNaPilha() {

    if(!__@tamanho) {
        print("Pilha estб vazia");
         return -1;
    }
	
    return __@vetor[__@tamanho];
}

stock adicionarPilha(elemento) {

    if(__@tamanho > Maximo)
        print("Pilha estб cheia");
	    
    __@vetor[__@tamanho++] = elemento;
}

stock retirarPilha() {

    if(!__@tamanho)
        print("Pilha estб vazia");
	    
    __@tamanho--;
}

stock tamanhoPilha() {

    return __@tamanho;
}
Reply
#5

@Marlon

bem bacana cara, fez uma estrutura de dados bastante ъtil jб.
Pra uma pessoa que tem uma boa lуgica pra fazer isso, por que nгo faz releases produtivos desse tipo ?

Sу faltou o mйtodo size...

Abraзos


OBS: se quiser continuar o desafio, pode implementar uma Lista simplesmente encadeada, e fazer a pilha usando ela.
Reply
#6

Quote:
Originally Posted by Willian_Luigi
Посмотреть сообщение
@Marlon

bem bacana cara, fez uma estrutura de dados bastante ъtil jб.
Pra uma pessoa que tem uma boa lуgica pra fazer isso, por que nгo faz releases produtivos desse tipo ?

Sу faltou o mйtodo size...

Abraзos


OBS: se quiser continuar o desafio, pode implementar uma Lista simplesmente encadeada, e fazer a pilha usando ela.
Й por que eu nunca me envolvi muito com forum samp ... mas quem sabe ...

@Topic
Adicionei o mйtodo size

@Outro Desafio
Quem sabe amanhг eu possa estб elaborando este outro desafio ... Ando meio ocupado com minha aplicaзгo que estou desenvolvendo !!

Abraзos
Reply
#7

Refazendo.
Reply
#8

Sua lуgica tб bem furada Dan, hб vбrias formas de gerar erros se tu der isso pra alguйm testar.


@Marlon, seu cуdigo tem um furo tambйm, vocк tб comeзando a adicionar valores no index 1 do vetor ao invйs do 0, e o seu mйtodo de retornar o elemento no topo tб pegando o tamanho-1, logo se tu inserir um valor inserir(10), ele vai inserir o valor na posiзгo 1 do vetor, e quando tu usar elementoPilha() ele vai dar erro, pois vai estar pegando a posiзгo 0 do vetor(que nгo existe/nгo foi preenchida).

O mais correto seria fazer:
pawn Код:
//inserir elemento
__@vetor[__@tamanho++] = valor;
Reply
#9

Bom, como jб fizeram em Pawn, resolvi dar uma apimentada e fazer em C++, atй porque nгo programo mais Pawn, e atualmente tenho como linguagem foco C++.

Код:
#define max 5

typedef struct{
      int tamanho;
      int item[max];
} pilha;
void iniciar(pilha &pilha)
{
    pilha.item[0] = pilha.tamanho = -1;
}
void push(pilha &p, int n)
{
    ++p.item[++p.tamanho] = n;
}
void pop(pilha &p)
{
    if(p.tamanho != -1) p.item[p.tamanho--] = -1;
}
int top(pilha &p)
{
    return p.item[p.tamanho];
}
int size(pilha &p)
{
    return p.tamanho+1;
}
Reply
#10

@Gusgato, Ficou meio estranho o seu uso dos ponteiros, espero que o seu 'dar uma apimentada' nгo tenha sido pra deixar o cуdigo ilegнvel.

No mais, bacana vocк estar estudando C++, poderia estar praticando esse tipo de estrutura...
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)