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çãomain(). Escreva apenas as novas linhas e as linhas alteradas do arquivotipopilhaNAC4.hna 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;
}