Jump to content
Fórum Script Brasil
  • 0

Torre de Hanoi


wrodrigounb

Question

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 to comment
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...