Program C queue and stack

Asked

Viewed 983 times

0

I created a program in C, to remove (or copy) the values of a queue, using the output rules of a stack and add them into a new structure. But it’s not working the way I’d like it to. You are adding values with the queue rules, but I cannot remove them using the stack rule, nor even move the values from the queue to the stack.

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

//Constantes
#define tamanho 5

//Fila
struct estrutura{
    int dados [tamanho];
    int ini;
    int fim;
};

//variaveis globais
struct estrutura fila;
struct estrutura pilha;
int op;

//prototipacao
void fila_entrar();
void fila_sair();
void fila_mostrar();
void menu_mostrar ();
void pilha_mostrar();
void pilha_mover();

//funcao principal
int main(){
    setlocale(LC_ALL, "Portuguese");
    op=1;
    fila.ini=0;
    fila.fim=0;
    pilha.ini=0;
    pilha.fim=0;
    while(op!=0){
        system("cls");
        fila_mostrar();
        pilha_mostrar();
        menu_mostrar();
        scanf("%d", &op);
        switch(op){
        case 1:
            fila_entrar();
            break;
        case 2:
            fila_sair();
            break;
        case 3:
            pilha_mover();
            break;
        }
    }
    return(0);
}

//add elemento no final da fila
void fila_entrar(){
    if(fila.fim==tamanho){
        printf("\nA fila está cheia\n");
        system("Pause");
    }else{
        printf("\nDigite o valor a ser inserido: ");
        scanf("%d", &fila.dados[fila.fim]);
        fila.fim++;
    }
}

//retirar o primeiro elemento da fila
void fila_sair(){
    if(fila.ini==fila.fim){
        printf("\nA fila esta vazia, adicione algum valor\n");
        system("Pause");
    }else{
        int i;
        for(i=0;i<tamanho;i++){
            fila.dados[i]=fila.dados[i+1];
        }
        fila.dados[fila.fim]=0;
        fila.fim--;
    }
}

//mostra o conteudo da fila
void fila_mostrar(){
    int i;
    printf("[ ");
    for(i=0;i<tamanho;i++){
        printf(" %d", fila.dados[i]);
    }
    printf(" ]\n\n");
}

//mostra o menu de opções
void menu_mostrar(){
    printf("\nEscolha uma opção:\n");
    printf("1- Incluir na fila\n");
    printf("2- Excluir da fila\n");
    printf("3- Mover para a pilha\n");
    printf("0-Sair\n\n");
}

//mostrar conteudo da pilha
void pilha_mostrar(){
    int i;
    printf("[ ");
    for(i=0;i<tamanho;i++){
        printf(" %d", pilha.dados[i]);
    }
    printf(" ]\n\n");
}

//mover para a pilha
void pilha_mover(){
    pilha.fim = fila.fim;
    do{
        if(fila.ini == fila.fim){
            printf("\nNada foi adicionado a fila para inverter\n\n");
            system("pause");
            break;
        }
        else{
            pilha.dados[pilha.ini]=fila.dados[pilha.fim];
            pilha.fim--;
            pilha.ini++;
        }
    }
    while (pilha.fim==0);
}
  • Function fila_sair() should return the value taken from the queue to use the same value in adding the stack: int fila_sair(void) { /* ... */ return VALOR_REMOVIDO; }

  • I’m trying to insert this command but I’m not getting it... could you explain it better ? This is the first program I’m doing, so I’m in a lot of trouble

  • My advice is to start with "Hello, World!" like everyone else, using a queue-and-stack program to start learning C seems like an exaggeration.

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.