Skip to content

Commit

Permalink
1° Snippet a ser adicionado! 🥳
Browse files Browse the repository at this point in the history
  • Loading branch information
devicewhite committed Oct 13, 2024
1 parent a1f4468 commit 93b91c0
Showing 1 changed file with 146 additions and 0 deletions.
146 changes: 146 additions & 0 deletions snippets/stack.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
# O que é Pilha ou Stack

Uma pilha (stack) é uma estrutura de dados onde os elementos são inseridos e removidos seguindo o princípio LIFO (Last In, First Out), ou seja, o último elemento a ser inserido é o primeiro a ser removido.

Pense em um baralho de cartas, a última carta é a primeira a ser removida.

# Como fazer no Pawn

### Parte 1°: Criando o cabeçalho

1. Primeiro precisamos definir o tamanho da nossa pilha
```pawn
#define MAX_STACK_SIZE 100
```

2. Após isso precisamos criar um array, onde armazenaremos os valores inseridos na pilha
```pawn
new Stack[MAX_STACK_SIZE];
```

3. Também vamos precisar de uma variavel que armazene a posição do ultimo valor inserido
```pawn
new top = -1; // -1 significará vazio
```

Como resultado, esse será o nosso pontapé inicial:

```pawn
#define MAX_STACK_SIZE 100
new Stack[MAX_STACK_SIZE];
new top = -1;
```

### Parte 2°: Criando função Push (Inserir)

1. Primeiros criaremos o cabeçalho da nossa função
```pawn
stock Push(valor)
{
}
```

2. Antes de inserir o valor na pilha, precisamos saber se tem espaço suficiente
```pawn
if(top >= (MAX_STACK_SIZE - 1))
{
// A pilha está cheia
return 0;
}
```

3. Se a pilha estiver vazia, então podemos inserir o valor na pilha
```pawn
Stack[++top] = valor;
return 1;
```

Como resultado, essa será a nossa função Push

```pawn
stock Push(valor)
{
if(top >= (MAX_STACK_SIZE - 1)) return 0;
Stack[++top] = valor;
return 1;
}
```

### Parte 3°: Criando função Pop (Remover)

1. Primeiros criaremos o cabeçalho da nossa função
```pawn
stock Pop()
{
}
```

2. Antes de remover o valor da pilha, precisamos saber se tem algum valor nela
```pawn
if(top == -1)
{
// A pilha está vazia
return -1;
}
```

3. Caso tenha algum valor na pilha, retornamos e removemos o seu valor
```pawn
return Stack[top--];
```

Como resultado, essa será nossa função Pop

```pawn
stock Pop()
{
if(top == -1) return -1;
return Stack[top--];
}
```

### Parte 4°: Criando funções extras

Podemos criar funções extras para saber o estado da nossa pilha

Por exemplo, veja essas duas funções `IsStackEmpty` e `IsStackFull`

```pawn
stock IsStackEmpty() return (top == -1);
stock IsStackFull() return (top >= (MAX_STACK_SIZE - 1));
```

### Parte 5°: Testando o sistema

Eu elaborei um script para testar as funções `push` e `pop`, acompanhe abaixo

```pawn
// codigo da minha pilha
#include <stack>
main()
{
Push(5);
Push(10);
Push(25);
printf("1° Valor a sair: %d", Pop());
printf("2° Valor a sair: %d", Pop());
printf("3° Valor a sair: %d", Pop());
}
```

Como resultado, ao executar o script receberemos os seguintes registros
```
1° Valor a sair: 25
2° Valor a sair: 10
3° Valor a sair: 5
```

---

Este pequeno tutorial simples foi elaborado por [DeviceBlack](https://github.com/devicewhite)

Espero que façam um bom proveito desse estilo de armazenamento de dados em arrays

0 comments on commit 93b91c0

Please sign in to comment.