Ir para conteúdo
Fórum Script Brasil
  • 0

Torre de Hanoi


wrodrigounb

Pergunta

Essa é a base do programa, mas não compila por dizer que há erros em declarações.

#include<stdio.h>

struct tipopilha {
    char dado, dadonovo;
    struct tipopilha *prox, *phanoi;
};

struct tipopilhageral {
    void *dado;
    char *origem, *destino, *auxiliar;
    int *n;
    struct tipopilhageral *prox, *pilha, *phanoi;
};

struct reghanoi {
    char o;
    char d;
    char a;
    int k;
    struct reghanoi *paux1;
};

void InicializaPilha(struct tipopilha **phanoi);
void *EmpilhaHanoi(struct tipopilhageral *pilha, char origem, char destino, char auxiliar, int n);
void *DesempilhaHanoi (struct tipopilhageral *pilha, char *origem, char *destino, char *auxiliar, int *n);
void InserePilha(struct tipopilha **pilha, char dadonovo);
char RetiraPilha(struct tipopilha **pilha);
void Hanoi(char origem, char destino, char auxiliar, int n);


int main() {
    InicializaPilha(&phanoi);
    phanoi = EmpilhaHanoi (struct tipopilhageral phanoi, origem, destino, auxiliar, n);
    while (!PilhaVazia (phanoi)) {
          phanoi = DesempilhaHanoi(phanoi, origem, &destino, &auxiliar, &n);
          if (n == 1) {
             printf ("movimento de %3c para %3c \n", origem, destino);
          } else {
            phanoi = EmpilhaHanoi (phanoi, auxiliar, destino, origem, n-1);
            phanoi = EmpilhaHanoi (phanoi, origem, destino, auxiliar, 1);
            phanoi = EmpilhaHanoi (phanoi, origem, auxiliar, destino, n-1);
          }
    }
    EmpilhaHanoi(&pilha, &origem, &destino, &auxiliar, &n);
    DesempilhaHanoi(pilha, origem, destino, auxiliar, n);

return 0;
}

void InicializaPilha (struct tipopilha **pilha) {
    *pilha = NULL;
return;
}

void Hanoi(char origem, char destino, char auxiliar, int n) {
    struct tipopilhageral *phanoi;
    struct reghanoi {
    char o;
    char d;
    char a;
    int k;
    };
}

void *EmpilhaHanoi (struct tipopilhageral *pilha, char origem, char destino, char auxiliar, int n) {
    struct reghanoi *paux1;
    void *paux2;
    paux1 = malloc (sizeof (struct reghanoi));
    paux1->o = origem;
    paux1->d = destino;
    paux1->a = auxiliar;
    paux1->k = n;
    paux2 = paux1;
    InserePilha(&pilha, paux2);

return pilha;
}

void *DesempilhaHanoi (struct tipopilhageral *pilha, char *origem, char *destino, char *auxiliar, int *n) {
    struct reghanoi *paux1;
    void *paux2;
    paux2 = RetiraPilha(&pilha);
    paux1 = paux2;
    *origem = paux1->o;
    *destino = paux1->d;
    *auxiliar = paux1->a;
    *n = paux1->k;
    free (paux2);
return pilha;
}

void InserePilha(struct tipopilha **pilha, char dadonovo) {
    struct tipopilha *p1;
    p1 = malloc (sizeof (struct tipopilha));
    p1->dado = dadonovo;
    p1->prox = *pilha;
    *pilha = p1;
return;
}

char RetiraPilha(struct tipopilha **pilha) {
    struct tipopilha *p1;
    char car;
    p1 = *pilha;
    *pilha = p1->prox;
    car = p1->dado;
    free (p1);
return car;
}

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...