Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Leob

Fila e Pilha

Recommended Posts

Estou iniciando a programação em C na faculdade e estou aprendendo filas e pilhas e meu professor não é dos melhores então estou com muitas duvidas, baseado em um modelo que achei na net eu criei esses 2 programas que devem ler 5 numeros e depois exibi los, agora vem as duvidas :

 

 

Neste programa eu só consigo imprimir na tela o primeiro valor da pilha o que eu fiz de errado ?

Este é o conceito certo de pilha ? Eu não deveria usar push e pop ?

 

 

Pilha

#include <stdio.h>

main()
{

  typedef struct no
  {int         num;
   struct no   *proximo;
   }tipoNo;

 tipoNo   *topo,  *novo,  *atual;


int a;
int i;

 /* inclui primeiro registro na pilha */
  for (i=1;i<6;i++){
   printf("digite um numero: ");
    scanf("%d",&a);
  novo = malloc(sizeof(tipoNo));
  novo->num = a;
  novo->proximo = NULL;
  topo = novo;
  }


                   /* exibe os registros da pilha */
 atual = topo;
 while (atual != NULL){
    printf("\n numero = %d ",atual->num);
    atual=atual->proximo;
  }
getch();
}

 

Fila

 

Esse código aparetemente funcionou mas se vocês pudessem dar uma olhada pra ver se está certo.

A mesma duvida do outro exemplo é o conceito certo de fila e eu não precisaria usar insert e remove ?

 

 

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

main()
{ typedef struct no
  {int         num;/* campo para os dados */
   struct no   *proximo;/* ponteiro para a proxima celula  */
   }tipoNo;             /* nome do novo tipo de estrutura */

tipoNo   *inicio,  *novo,  *atual;
int i;
int a;

  inicio = atual = NULL;
  for (i=1;i<6;i++)
   { novo = malloc(sizeof(tipoNo));
    printf("digite um numero: ");
    scanf("%d",&a);
     novo->num = a;
     novo->proximo=NULL;

     if (inicio == NULL)
        inicio = novo;
	else
        atual->proximo = novo;
        atual = novo;

    }
                  /* exibe a lista */
 atual = inicio;
 while (atual != NULL)
  { printf("\n numero = %d ",atual->num);
    atual=atual->proximo;
  }
getch();
}

Desculpem colocar uma duvida tão iniciante aqui, mas é que eu tenho um professor muito ruim e eu já pesquisei bastante material se vocês pudessem dar uma olhada e dar sugestões de como mudar o código ou de material de apoio ficaria muito agradecido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

pesquisou bastante material mesmo?

Estranho... pq existe MUITA coisa a cerca do assunto!

Tentou buscar em ingles?

"Stacks in C" e "Linked List in C"??

 

Mas tudo bem...

Vamos começar pelo começo.

O mais importante é você saber o conceito.

Você deve criar as listas e pilhas de uma forma genérica.

Não declare tudo na função main().

o código pode seguir essa estrutura:

//declarações:
struct Pilha_t
{
    int valor;
    struct Pilha_t *prox;
};

void Push(struct Pilha_t *pilha, int novoValor);
int Pop(struct Pilha_t *pilha);

int main()
{
//...
}

//agora escreva as funções...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu pesquisei mas está bem dificil de entender isso foi oq eu consegui fazer, como eu disse estou aprendendo a 2 semanas meu professor é muito fraco então fico perdido, tudo que entendi é que fila usa remove e insert e pilha usa push e pop então não sabia direito como procurar.

 

então eu não faço do jeito que está no codigo ?

 

ou eu faço do jeito que você falou e depois coloco as funções que eu criei ? ou as funções que eu criei não tem nada haver ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como eu disse, o conceito é o mais importante.

Pilha -->

É um caontainer de dados do tipo FILO (First In Last Out), isto é, o primeiro item que entra na pilha, é o último a sair.

Funciona como uma pilha de livros.

--------------

| Matematica |

--------------

| Portugues |

--------------

| História |

--------------

| Programação|

--------------

 

Para pegar o livro de programação, terá que retirar os outros livros, um de cada vez.

 

Fila -->

É um container do tipo FIFO (First In First Out) e funciona exatamente como uma fila de banco.

Aqueles que chegam lá primeiro, são atendidos primeiro, e sempre que chega alguém novo vai para o fim da fila.

 

Eu encontrei MUITA coisa no google...

Os primeiros três sites para query "Stacks in C"

http://www.friedspace.com/cprogramming/stacks.php

http://www.tutorialized.com/tutorial/Lesson-18-Pointers-and-Stacks-in-C/11926

http://www.cs.bu.edu/teaching/c/stack/linked-list/

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.