Estruturas de Dados em C: Pilhas e Filas Dinâmicas

Classificado em Design e Engenharia

Escrito em em português com um tamanho de 5,46 KB


Exercício 1: Exibição de Elementos em Pilha Dinâmica

Código da função principal (main.c):

1  #include <stdio.h>
2  #include <string.h>
3  #include <stdlib.h>
4  #include "tipopilhaNAC4.h"
5  int main() {
6      tipopilha topo;
7      struct NAC4 v;
8      int i;
9      INIT(&topo);
10     for (i = 0; i < 3; i++) {
11         printf("Digite id e prod:\n");
12         scanf("%d", &v.id);
13         fflush(stdin);
14         gets(v.prod);
15         PUSH(&topo, v);
16     }
17     SHOW(topo); // Função a ser implementada dentro de tipopilhaNAC4.h
18 }

Item (b): Implementação da Função SHOW

(b) Elabore uma função (SHOW) que apresente todos os dados (todos os campos) de todos os nós da pilha sem retirá-los da pilha.

struct NAC4 {
    int id;
    char prod[20];
};

/* Declaração do nó */
struct no {
    struct NAC4 dado; // Tipo do elemento da pilha
    struct no *prox;
};

/* Definição do tipo de dado pilha */
typedef struct no* tipopilhaNAC4;

void INIT(tipopilhaNAC4 *topo);

int IsEmpty(tipopilhaNAC4 topo);

void PUSH(tipopilhaNAC4 *topo, struct NAC4 elem) {
    tipopilhaNAC4 novo;
    novo = (tipopilhaNAC4) malloc(sizeof(struct no));
}

int POP(tipopilhaNAC4 *topo, struct NAC4 *elem) {
    tipopilhaNAC4 aux;
}

int TOP(tipopilhaNAC4 topo, struct NAC4 *elem) {
    tipopilhaNAC4 aux;
}

void SHOW(tipopilhaNAC4 topo) {
    tipopilhaNAC4 aux;
    aux = topo;
    while (aux != NULL) {
        printf("id: %d\t prod = %s \n", aux->dado.id, aux->dado.prod);
        aux = aux->prox;
    }
}

Questão 2: Fila com Prioridade e Função REMOVEPRIOR

Altere o arquivo tipofilaFLOAT.h para que este possua a função REMOVEPRIOR utilizada na função main apresentada a seguir. Esta nova função RETIRA um elemento da fila, sendo que, se o dado do início da fila for menor que o dado do segundo elemento da fila, o nó removido é o segundo elemento (simulando uma possível fila com prioridade).

1  #include <stdio.h>
2  #include <stdlib.h>
3  #include "tipofilaFLOAT.h"
4  
5  int main() {
6      tipofila inicio, fim;
7      float v;
8      float x[5] = {2.1, 1.8, 8.2, 7.5, 1.2};
9      int i;
10     INIT(&inicio, &fim);
11     for (i = 0; i < 5; i++)
12         ENQUEUE(&inicio, &fim, x[i]);
13     
14     while (!IsEmpty(inicio, fim)) {
15         REMOVEPRIOR(&inicio, &fim, &v);
16         printf("%0.2f\t", v);
17     }
18 }

Implementação da Função REMOVEPRIOR

int REMOVEPRIOR(tipofila *inicio, tipofila *fim, float *v) {
    tipofila aux;
    aux = *inicio;
    if (!IsEmpty(*inicio, *fim)) {
        if (aux->prox == NULL) {
            *v = (*inicio)->dado;
            *inicio = (*inicio)->prox;
            *fim = *inicio;
        } else {
            aux = (*inicio)->prox;
            if ((*inicio)->dado < aux->dado) {
                *v = aux->dado;
                (*inicio)->prox = aux->prox;
            } else {
                aux = *inicio;
                *v = aux->dado;
                *inicio = aux->prox;
            }
        }
        free(aux);
        return(1);
    } else {
        printf("Fila vazia \n");
        return(0);
    }
}

Questão 3: Contagem em Pilha de Alunos

Analisando a função main a seguir e utilizando como modelo o arquivo tipopilhaINT.h:

  • (a) Faça as modificações necessárias para implementar uma pilha de elementos do tipo struct NAC4 (tipo do campo dado de cada nó) e que atenda às chamadas das funções realizadas na função main(). Escreva apenas as novas linhas e as linhas alteradas do arquivo tipopilhaNAC4.h na folha de resposta.
  • (b) Elabore uma função que retorne o número de alunos com nota abaixo de 6,0 de todos os alunos inseridos na pilha, sem retirá-los da pilha.
1  #include <stdio.h>
2  #include <string.h>
3  #include <stdlib.h>
4  #include "tipopilhaNAC4.h"
5  int main() {
6      tipopilhaNAC4 topo;
7      struct NAC4 v;
8      int i, n;
9      INIT(&topo);
10     for (i = 1; i < 40; i++) {
11         printf("Digite nota e nome \n");
12         scanf("%f", &v.nota);
13         fflush(stdin);
14         gets(v.nome);
15         PUSH(&topo, v);
16     }
17     n = CONTA(topo); // Função a ser implementada dentro de tipopilhaNAC4.h
18 }

Definições e Função CONTA

struct NAC4 {
    float nota;
    char nome[20];
};

/* Declaração do nó */
struct no {
    struct NAC4 dado; // Tipo do elemento da pilha
    struct no *prox;
};

/* Definição do tipo de dado pilha */
typedef struct no* tipopilhaNAC4;

void INIT(tipopilhaNAC4 *topo);

int IsEmpty(tipopilhaNAC4 topo);

void PUSH(tipopilhaNAC4 *topo, struct NAC4 elem) {
    tipopilhaNAC4 novo;
    novo = (tipopilhaNAC4) malloc(sizeof(struct no));
}

int POP(tipopilhaNAC4 *topo, struct NAC4 *elem) {
    tipopilhaNAC4 aux;
}

int TOP(tipopilhaNAC4 topo, struct NAC4 *elem) {
    tipopilhaNAC4 aux;
}

int CONTA(tipopilhaNAC4 topo) {
    tipopilhaNAC4 aux = topo;
    int cont = 0;
    while (aux != NULL) {
        if (aux->dado.nota < 6) cont++;
        aux = aux->prox;
    }
    return cont;
}

Entradas relacionadas: