Skip to content

Commit

Permalink
new file: 13-duas-pilhas-estat.c
Browse files Browse the repository at this point in the history
new file:   14-np-pilhas-estat.c
  • Loading branch information
anabeatrizchagas committed Jan 23, 2023
1 parent f6cf433 commit 2046d92
Show file tree
Hide file tree
Showing 2 changed files with 282 additions and 0 deletions.
135 changes: 135 additions & 0 deletions 13-duas-pilhas-estat.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
// importando pacotes

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

// definindo tamanho padrao do vetor

#define MAX 50

// criando estruturas

typedef struct
{
int chave;

} REGISTRO;

typedef struct
{
REGISTRO V[MAX];
int topo1;
int topo2;

} DUAS_PILHAS_EST;

// declarando funcoes

void inicializacao(DUAS_PILHAS_EST *p);
void exibicaoPilhaK(DUAS_PILHAS_EST *p, int k);

int tamanhoPilhaK(DUAS_PILHAS_EST *p, int k);
int popPilhaK(DUAS_PILHAS_EST *p, int k);

bool vetorEstaCheio(DUAS_PILHAS_EST *p);
bool pushPilhaK(DUAS_PILHAS_EST *p, int k, int ch);

// implementando funcoes

void inicializacao(DUAS_PILHAS_EST *p)
{
p->topo1 = -1;
p->topo2 = MAX;

}

void exibicaoPilhaK(DUAS_PILHAS_EST *p, int k)
{
if(k == 1)
{
int i;
for(i = p->topo1; i >= 0; i--) printf("%d ", p->V[i].chave);

} else if (k == 2) {

int j;
for(j = p->topo2; j < MAX; j++) printf("%d ", p->V[j].chave);

}

}

int tamanhoPilhaK(DUAS_PILHAS_EST *p, int k)
{
if(k == 1)
{
return (p->topo1 + 1);

} else if (k == 2) {

return (MAX - p->topo2);
}

}

int popPilhaK(DUAS_PILHAS_EST *p, int k)
{
int resp = -1; // se a pilha estiver vazia

if(k == 1 && p->topo1 != -1)
{
resp = p->V[p->topo1].chave; // se for a pilha 1 com elemente
p->topo1--;

} else if (k == 2 && p->topo2 < MAX) {

resp = p->V[p->topo2].chave; // se for a pilha 2 com elementos
p->topo2++;

}

return(resp);

}

bool vetorEstaCheio(DUAS_PILHAS_EST *p)
{
if(p->topo2 - p->topo1 == 1) return (true);
else return (false);

}

bool pushPilhaK(DUAS_PILHAS_EST *p, int k, int ch)
{
if(vetorEstaCheio(p) == true)
{
return (false);

} else {

if(k == 1)
{
p->topo1++;
p->V[p->topo1].chave = ch;

} else if (k == 2) {

p->topo2--;
p->V[p->topo2].chave = ch;

}

return (true);

}

}

// funcao main

int main()
{

return 0;
}
147 changes: 147 additions & 0 deletions 14-np-pilhas-estat.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
// importando pacotes

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

// definindo tamanho do vetor e qtd de pilhas

#define MAX 50
#define NP 5

// criando estruturas

typedef struct
{
int chave;

} REGISTRO;

typedef struct
{
REGISTRO V[MAX];
int base[NP + 1];
int topo[NP + 1];

} NP_PILHAS;

// declarando funcoes

void inicializacao(NP_PILHAS *p);
void exibicaoDaPilhaK(NP_PILHAS *p, int k);

int tamDaPilhaK(NP_PILHAS *p, int k);
int popPilhaK(NP_PILHAS *p, int k);

bool pilhaKestaCheia(NP_PILHAS *p, int k);
bool deslocaPilhaKparaDir(NP_PILHAS *p, int k);
bool deslocaPilhaKparaEsq(NP_PILHAS *p, int k);
bool pushPilhaK(NP_PILHAS *p, int k, int ch);

// implementando funcoes

void inicializacao(NP_PILHAS *p)
{
int i;
for(i = 0; i <= NP; i++)
{
p->base[i] = ((MAX / NP) * i) - 1;
p->topo[i] = p->base[i];

}


}

void exibicaoDaPilhaK(NP_PILHAS *p, int k)
{
int i;
for(i = p->base[k] + 1; i <= p->topo[k]; i++) printf("%d ", p->V[i].chave);
printf("\n");

}

int tamDaPilhaK(NP_PILHAS *p, int k)
{
return (p->topo[k] - p->base[k]);

}

int popPilhaK(NP_PILHAS *p, int k)
{
if(k < 0 || k >= NP || p->topo[k] == p->base[k]) return (-1); // lista vazia ou indice invalido

int resp = p->V[p->topo[k]].chave;
p->topo[k]--;

return (resp);

}

bool pilhaKestaCheia(NP_PILHAS *p, int k)
{
if(p->topo[k] == p->base[k + 1]) return (true);
else return (false);

}

bool deslocaPilhaKparaDir(NP_PILHAS *p, int k)
{
if(k < 1 || k >= NP || pilhaKestaCheia(p, k) == true) return (false); // sem espaco ou indice invalido

int i;
for(i = p->topo[k] + 1; i > p->base[k]; i--) p->V[i].chave = p->V[i - 1].chave;

p->topo[k]++;
p->base[k]++;

return (true);

}

bool deslocaPilhaKparaEsq(NP_PILHAS *p, int k)
{
if(k < 1 || k >= NP || pilhaKestaCheia(&p, k - 1) == true) return (false); // sem espaco ou indice invalido

int i;
for(i = p->base[k]; i >= p->topo[k] ; i++) p->V[i].chave = p->V[i + 1].chave;

p->topo[k]--;
p->base[k]--;

return (true);

}

bool pushPilhaK(NP_PILHAS *p, int k, int ch)
{
int i;

if(pilhaKestaCheia(p, k) == true && k < NP - 1)
{
for(i = NP - 1; i > k; i--) deslocaPilhaKparaDir(p, i);

} else if(pilhaKestaCheia(p, k) == true && k > 0)
{
for(i = 1; i < k + 1; i++) deslocaPilhaKparaEsq(p, i);

}

if(pilhaKestaCheia(p, k) == false)
{
p->topo[k]++;
p->V[p->topo[k]].chave = ch;

return (true);

} else return (false);

}

// funcao main

int main()
{

return 0;
}

0 comments on commit 2046d92

Please sign in to comment.