Pular para o conteúdo

Pilha estatica/encadeada [RESOLVIDO]

Responder tópico
  • Denunciar
  • Indicar

1. Pilha estatica/encadeada [RESOLVIDO]

Enviado em 28/03/2010 - 10:21h

ae galera,

estou com dificuldades para finalizar um codigo e gostaria de contar com vcs para finaliza-lo.

abaixo segue o codigo:

//-------------------- biblioteca.c -------------------

#include "biblioteca.h"

char my_toupper(char op) { //funçao que muda a fonte a >> A
if ((op >= 'a') && (op <= 'z')) {
op = op - 32;
}

return (op);
}

void inicializa_memoria (void){
int i;
for (i=N-1; i>0; i--){
mmr[i].prox=i-1;
}
livre = N-1;
topo=-1;
}

int my_alloc (void){ /* aloca espaço na pilha */
int posicao;
posicao = livre;
if (livre!=-1){
livre=mmr[livre].prox;
}
return (posicao);
}

int my_free (int posicao){ /* limpa posição */
mmr[posicao].prox = livre;
livre = posicao;
}

int pilha_insere (int v) { /* insere pilha */
int x;
x = my_alloc();
printf ("O valor do malloc: %d\n", my_alloc);
printf ("O valor do x: %d\n", x);
if (x == -1) {
return (0);
}

else {
mmr[x].info = v;
printf ("O valor do mmr[x] info: %d\n", mmr[x].info);
mmr[x].prox = topo;
printf ("O valor do mmr[x] prox: %d\n", mmr[x].prox);
topo = x;
printf ("O valor do topo: %d\n", topo);
return (1);
}
}

int pilha_remove (void) { /* remove pilha */
int r;
if (!pilha_vazia()){
r = topo;
topo = mmr[topo].prox;
my_free(r);
return (1);
}
return (0);
}

int pilha_vazia (void) { /* pilha vazia */

return (topo == -1);
}

int pilha_cheia (void) { /* pilha cheia */

return (topo == N-1);
}

int pilha_top (void) { /* topo da pilha */

if (!pilha_vazia ()){
return (topo);
}

else {
return (0);
}
}


// --------------------- biblioteca.h --------------------

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define N 5

int topo;
int vet[N];
int v;
char op;
int livre;

typedef struct memoria { /* alocação */
int info;
int prox;
}elemento;

elemento mmr[N];

char my_toupper (char op);

void inicializa_memoria (void);

int my_alloc (void);

int my_free (int posicao);

int pilha_insere (int v);

int pilha_remove (void);

int pilha_vazia (void);

int pilha_cheia(void);

int pilha_top (void);



// --------------------- main --------------------

#include "biblioteca.h"

int main(int argc, char *argv[]) {

inicializa_memoria();

do {
printf ("\n-- Menu --\n");
printf ("\nA - Aloca Pilha");
printf ("\nD - Desaloca Pilha");
printf ("\nI - Insere");
printf ("\nR - Remover");
printf ("\nT - Topo");
printf ("\nS - Sair");
printf ("\n\nInforme a operacao desejada: ");
fflush (stdin);
scanf ("%c", &op);
op = my_toupper (op);
system ("cls");

switch(op){

case 'I':
printf ("Informe o valor que deseja inserir: ");
fflush (stdin);
scanf ("%d",&v);
printf ("O valor a ser inserido : %d \n\n", v);
system ("pause");
system ("cls");

if (pilha_insere (my_alloc())){
printf ("O valor - %d - foi inserido\n\n", v);
}

else {
printf ("O valor - %d - NAO foi Inserido - A pilha esta cheia\n\n", v);
}

break;

case 'R':
printf (" -- Removendo dados da pilha --\n\n");

if (pilha_remove ()) {
printf ("O valor - %d - foi removido\n\n", vet[topo+1]);
}

else {
printf ("NAO foi removido - A Pilha esta vazia\n\n");
}

break;

system ("pause");
system ("cls");

case 'T':
printf ("-- Mostra valor do topo da pilha --\n\n");
if (!pilha_vazia()) {
printf ("Elemento do topo %d\n\n", vet[topo]);
}
else {
printf ("NAO existe elemento no topo - Pilha vazia\n\n");
}
break;

case 'A':
printf ("Endereco de memoria: %d \n\n", my_alloc());
break;

case 'D':


default:
if (op == 'S') {
printf ("Saindo...\n");
}
else {
printf ("Operacao invalida\n");
}

}//END switch(op)

system ("pause");
system ("cls");

}while (op != 'S');

system("pause");

return 0;
}


Responder tópico

3. Re: Pilha estatica/encadeada [RESOLVIDO]

Enviado em 30/03/2010 - 11:28h

se nao tivesse tanto "system" no teu codigo, eu ateh me daria o trabalho de compilar para ajudar !

Soh tenho uma pergunta, quando a variavel 'livre', vai receber um valor inteiro para ti poder comparar ?!

4. Bom...

Enviado em 30/03/2010 - 13:13h

Você conhece ponteiros??? Isso ajuda muito quando falamos de lista encadeada. Bom me responda se você sabe o que é ponteiros, se você não souber eu te ajudarei com o que você sabe

5. pilha encadeada / estatica

Enviado em 30/03/2010 - 16:06h

sim, conheço ponteiros.
mas o problema a ser resolvido é justamente sem utilizar ponteiros. preciso fazer uma pilha encadeada sem ponteiros.


6. So dicas.

Enviado em 01/04/2010 - 10:32h


Olá eu até tentei compreender o seu código, mas desta vez não foi possível.

Agora só uma dica:

Se possível quando tiver dúvidas SÓ POSTAR A PARTE DO CÓDIGO COM SUA DÚVIDA... motivo: O site não ajuda na publicação de CÓDIGO QUE FIQUE LEGIVEL.

Abraços.

gokernel
gokernel@hotmail.com

7. Agradecimentos

Enviado em 01/04/2010 - 10:53h

Galera, Obrigado pelo esforço de vcs. Já estou conseguindo me virar por aqui!

Abraços.

Responder tópico

Responder tópico

Entre na sua conta para responder.

Fazer login para responder