#include #include #include typedef struct elem //Tfila { int dados; struct elem *prox; }Tfila; typedef struct //fila { Tfila *fim; Tfila *inicio; }fila; typedef struct //Tpilha { int dados; struct pilha *ant; }Tpilha; typedef struct //pilha { struct Tpilha *topo; }pilha; void criar_fila(fila *f) { f->inicio = NULL; f->fim = NULL; } int fila_vazia(fila *f) { if(f->inicio == NULL) return 1; else return 0; } void criar_pilha(pilha *p) { p->topo = NULL; } int pilha_vazia(pilha *p) { if(p->topo == NULL) return 1; else return 0; } void enfilar(fila *f, int dados) { Tfila *aux = (Tfila*)malloc(sizeof(Tfila)); aux->dados = dados; aux->prox = NULL; if(fila_vazia(f)) f->inicio = aux; else f->fim->prox = aux; f->fim = aux; } void desenfilar(fila *f) { Tfila *aux = (Tfila*)malloc(sizeof(Tfila)); int dados; if(fila_vazia(f)) printf("Fila Vazia!!!"); else { aux = f->inicio; dados = aux->dados; f->inicio = aux->prox; if(f->inicio == NULL) f->fim = NULL; printf("%d retirado!!", dados); free(aux); } } void empilhar(pilha *p, int dados) { Tpilha *aux = (Tpilha*)malloc(sizeof(Tpilha)); aux->dados = dados; aux->ant = NULL; if(pilha_vazia(p)) p->topo = aux; else { aux->ant = p->topo; p->topo = aux; } } int desempilhar(pilha *p) { Tpilha *aux = (Tpilha*)malloc(sizeof(Tpilha)); int dados; if(pilha_vazia(p)) printf("Pilha Vazia!!!"); else { aux = p->topo; dados = aux->dados; p->topo = aux->ant; aux->ant = NULL; free(aux); return dados; } } void mostrar_pilha(pilha *p) { Tpilha *aux = (Tpilha*)malloc(sizeof(Tpilha)); if(pilha_vazia(p)) printf("Pilha vazia!!!"); else { printf("Pilha:\n\n"); aux = p->topo; while(aux != NULL) { printf("%4d\n", aux->dados); aux = aux->ant; } } } void mostrar_fila(fila *f) { Tfila *aux = (Tfila*)malloc(sizeof(Tfila)); if(fila_vazia(f)) printf("Fila vazia!!!"); else { printf("Fila:\n\n"); aux = f->inicio; while(aux != NULL) { printf("%4d", aux->dados); aux = aux->prox; } } } void menu() { fila *f = (fila*)malloc(sizeof(fila)); criar_fila(f); pilha *p = (pilha*)malloc(sizeof(pilha)); criar_pilha(p); int opc = 0; int enfila, empilha; while(opc != 5) { system("cls"); printf("\n"); mostrar_pilha(p); printf("\n\n\n\n"); mostrar_fila(f); printf("\n\n\n\n"); printf("=================================\n"); printf("1- EMPILHAR\n"); printf("2- DESEMPILHAR E ENFILAR\n"); printf("3- DESENFILAR\n"); printf("4- MOSTRAR PILHA E FILA\n"); printf("5- SAIR\n"); printf("=================================\n"); printf("Digite uma opção: "); scanf("%d", &opc); system("cls"); switch(opc) { case 1: { printf("Digite o valor a ser empilhado: "); scanf("%d", &empilha); empilhar(p, empilha); printf("\n\n\n"); system("pause"); break; } case 2: { if(pilha_vazia(p)) printf("Pilha Vazia!!!"); else { enfila = desempilhar(p); enfilar(f, enfila); printf("%d enfilado!"); } printf("\n\n\n"); system("pause"); break; } case 3: { desenfilar(f); printf("\n\n\n"); system("pause"); break; } case 4: { printf("\n"); mostrar_pilha(p); printf("\n\n\n\n"); mostrar_fila(f); printf("\n\n\n\n"); system("pause"); break; } } } } int main() { setlocale(LC_ALL, "portuguese"); menu(); printf("\n\n\n\nFIM.....\n\n\n"); return 0; }