Forum Pplware
Estruturas de dados linguagem C - Versão de Impressão

+- Forum Pplware (http://forum.pplware.com)
+-- Fórum: Mais Tech (/forumdisplay.php?fid=11)
+--- Fórum: Programação e Web (/forumdisplay.php?fid=16)
+--- Tópico: Estruturas de dados linguagem C (/showthread.php?tid=17705)



Estruturas de dados linguagem C - Pereira Oliveira - 03-12-2013 15:39

Tenho um exercício de Estruturas de dados em linguagem C para fazer, sei que não tão aqui para fazer as atividades para os alunos, mais é muito importante para mim que possam me ajudar com essas 2 atividades.


1. Crie uma função denominada de esvazie que receba uma pilha dinâmica como parâmetro e descarte todos os elementos. Ou seja, após a chamada da função esvazie se fizermos a chamada da função empty o resultado deverá ser true. A função esvazie não deverá permitir o vazamento de memória.

2. Escrever um programa que tenha uma função que verifique se um dado valor está presente em uma pilha estática. A função receberá por parâmetro a pilha e um inteiro que será o valor do item a ser procurado. Em caso positivo, a função deve fornecer a posição do item na pilha. Caso não encontre retornar o valor -1. A pilha deve permanecer a mesma após a execução do procedimento.


RE: Estruturas de dados linguagem C - Corvus - 03-12-2013 16:21

(como possivelmente já leste noutros tópicos deste género...)

Qual o código que já fizeste?
Onde tens exactamente a dificuldade?


RE: Estruturas de dados linguagem C - Pereira Oliveira - 03-12-2013 16:57

(03-12-2013 16:21)Corvus Escreveu:  (como possivelmente já leste noutros tópicos deste género...)

Qual o código que já fizeste?
Onde tens exactamente a dificuldade?

Corvus, não fiz código algum, entrei em pilha e foi corrido diversos a vários problemas que tive e não conseguir pegar o assunto, o professor passou essa atividade e um código como base, só que li e reli e não conseguir ter noção alguma de como fazer.


RE: Estruturas de dados linguagem C - Corvus - 03-12-2013 17:43

(03-12-2013 16:57)Pereira Oliveira Escreveu:  Corvus, não fiz código algum, entrei em pilha e foi corrido diversos a vários problemas que tive e não conseguir pegar o assunto

Não quero parecer preciosista (sabe deus que dou cada pontapé na gramática que mete medo ao susto), mas não consegui entender essa parte.

Poderemos talvez ajudar-te a entender o código base que o teu prof te passou e dar-te algumas dicas de como avançares, mas para isso era preciso ver o código que ele te forneceu e entender bem o que não entendes.


RE: Estruturas de dados linguagem C - Pereira Oliveira - 03-12-2013 18:21

(03-12-2013 17:43)Corvus Escreveu:  
(03-12-2013 16:57)Pereira Oliveira Escreveu:  Corvus, não fiz código algum, entrei em pilha e foi corrido diversos a vários problemas que tive e não conseguir pegar o assunto

Não quero parecer preciosista (sabe deus que dou cada pontapé na gramática que mete medo ao susto), mas não consegui entender essa parte.

Poderemos talvez ajudar-te a entender o código base que o teu prof te passou e dar-te algumas dicas de como avançares, mas para isso era preciso ver o código que ele te forneceu e entender bem o que não entendes.


Na questão 1 tenho que desempilhar até o fim da pilha mais sem deixar desempilhar um elemento q não existe...


O código que nos foi passado:

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

struct ELEMENTO_PILHA{
char valor;
ELEMENTO_PILHA *anterior;
};

struct PILHA{
ELEMENTO_PILHA *topo;
};

void init(PILHA *p){
p->topo = NULL;
}

int empty(PILHA *p){
if(p->topo == NULL){
return 1;
}else{
return 0;
}
}

void push(PILHA *p,char v){
ELEMENTO_PILHA *novo = (ELEMENTO_PILHA*) malloc(sizeof(ELEMENTO_PILHA));
novo->anterior = p->topo;
p->topo = novo;
novo->valor = v;
printf("\n Valor empilhado %c \n",v);
}

char pop(PILHA *p){
if(empty(p)){
printf("Pilha vazia!!!");
exit(1);
}else{
char valorRetorno;
ELEMENTO_PILHA *aux = p->topo;
//p->topo = p->topo->anterior;
p->topo = aux->anterior;
valorRetorno = aux->valor;
free(aux);
return valorRetorno;
}
}

int stacktop(PILHA *p){
if(empty(p)){
printf("Pilha vazia");
exit(1);
}else{
return p->topo->valor;
}
}

int string_length(char str[]){
int i;
for(i=0; i<50; i++){
if(str[i]=='\0'){
return(i);
}
}
}

void buscar(PILHA *principal,PILHA *pAux,char dado){
char dadoAux;
while(principal->topo != NULL){
dadoAux = pop(principal);

if(dadoAux != dado ){
push(pAux,dadoAux);
}else{
printf("\n Localizado:%c \n",dadoAux);
}
}
}

void listar(PILHA *p){
while(p->topo != NULL){
printf("\n Desempilhado %c",pop(p));
}
}

main(){
PILHA p1;
PILHA p2;

init(&p1);
init(&p2);
int cont,i;
char texto[50],dado;

printf("Informe um texto");
gets(texto);

cont=string_length(texto);

for(i=0;i<cont;i++){
push(&p1,texto[i]);
}
getch();
printf("\n Buscar.....");

printf("\n Informe um caracter");
scanf("%c",&dado);
buscar(&p1,&p2,dado);
getch();

printf("\n Listar.....");
listar(&p2);

}


RE: Estruturas de dados linguagem C - Corvus - 03-12-2013 20:45

Quando colocares código num post, por favor mete o código entre [ code ] e [ /code ] (sem espaços dentro dos []), para ele ficar mais legível.

E esse foi o código que o teu professor deu? É que lhe encontro vários problemas assim visto de relance.


RE: Estruturas de dados linguagem C - Pereira Oliveira - 03-12-2013 21:28

(03-12-2013 20:45)Corvus Escreveu:  Quando colocares código num post, por favor mete o código entre [ code ] e [ /code ] (sem espaços dentro dos []), para ele ficar mais legível.

E esse foi o código que o teu professor deu? É que lhe encontro vários problemas assim visto de relance.

Sim foi o codigo dado


RE: Estruturas de dados linguagem C - Corvus - 03-12-2013 22:57

Para a alinea 1 podes usar como base a função pop(), só que em vez de retirares um valor da pilha e devolve-lo, vais retirando até à pilha ficar vazia.

Quanto à alinea 2, não estou a entender. Tens de ser tu a criar uma nova estrutura de pilha ou usar a estrutura que está nesse código? É que a pilha do código usa char's e o enunciado da alinea 2 fala de int's. De qualquer modo, será uma variação da função buscar, em que usas um contador para verificar a posição do elemento dentro da pilha.

Curiosidade minha: estão a usar o Borland C++? É que já não me lembro de ver o conio.h desde o início do século Tongue

(E sim, já cá andava no tempo dos dinossaurios, mas não fui eu o culpado da sua extinção) Wink


RE: Estruturas de dados linguagem C - Pereira Oliveira - 04-12-2013 01:01

(03-12-2013 22:57)Corvus Escreveu:  Para a alinea 1 podes usar como base a função pop(), só que em vez de retirares um valor da pilha e devolve-lo, vais retirando até à pilha ficar vazia.

Quanto à alinea 2, não estou a entender. Tens de ser tu a criar uma nova estrutura de pilha ou usar a estrutura que está nesse código? É que a pilha do código usa char's e o enunciado da alinea 2 fala de int's. De qualquer modo, será uma variação da função buscar, em que usas um contador para verificar a posição do elemento dentro da pilha.

Curiosidade minha: estão a usar o Borland C++? É que já não me lembro de ver o conio.h desde o início do século Tongue

(E sim, já cá andava no tempo dos dinossaurios, mas não fui eu o culpado da sua extinção) Wink

Tem que ser eu a criar uma nova a estrutura de pilha