Pilha estatica/encadeada [RESOLVIDO]

1. Pilha estatica/encadeada [RESOLVIDO]

Julio Cesar
imasternex

(usa Ubuntu)

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;
}




  


2. Veja

???
gokernel

(usa Linux Mint)

Enviado em 30/03/2010 - 10:36h

Sobre lista encadeada.

http://pt.wikipedia.org/wiki/Lista_ligada

gokernel
gokernel@hotmail.com


3. Re: Pilha estatica/encadeada [RESOLVIDO]

Andi
upc0d3

(usa Gentoo)

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...

Thiago Baldim
TRBaldim

(usa Ubuntu)

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

Julio Cesar
imasternex

(usa Ubuntu)

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.

???
gokernel

(usa Linux Mint)

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

Julio Cesar
imasternex

(usa Ubuntu)

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

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

Abraços.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts