Estrutura de dados
Dada duas filas (P e N), faça um programa para ler diversos números e, para cada um:
Se positivo, inserir na fila P;
Se negativo, inserir na fila N;
Se zero, retirar um elemento de cada fila.
Solução:
#include
#include
#include
#include
#define Tam 100 struct fila
{
int vdados[Tam]; int inicio, fim;
};
int RemoverFila (struct fila *pf, char c); void InsereFila (struct fila *pf, int x); void ApresentaFila (struct fila *pf, char c); int main()
{
struct fila p, n; int num; char num1[10];
p.inicio = p.fim = Tam - 1;
n.inicio = n.fim = Tam - 1; printf("\nInforme um numero inteiro (positivo, negativo ou nulo) ou digite s para sair: "); gets(num1); while (!((strcmp(num1,"S")==0) || (strcmp(num1,"s")==0)))
{
num = atoi(num1); if (num > 0)
InsereFila (&p, num); else if (num < 0)
InsereFila (&n, num); else {
RemoverFila(&p, 'p');
RemoverFila(&n, 'n');
}
system("cls"); printf("\nInforme um numero inteiro (positivo, negativo ou nulo) ou digite s para sair: "); gets(num1); }
ApresentaFila(&p, 'p');
ApresentaFila(&n, 'n'); printf("\n\n"); system("pause"); return 0;
}
void ApresentaFila (struct fila *pf, char c)
{
int i; if (!(pf->inicio == pf->fim))
{
if (pf->inicio == Tam - 1) i = 0; else i = pf->inicio + 1; printf("\n\n**** Elementos da Fila %c ****", c); for (; i fim; i++)
{
printf("\n%d", pf->vdados[i]);
}
} else printf("\n\n**** Nao ha elementos para serem apresentados na fila %c ****", c);
}
void InsereFila (struct fila *pf, int x)
{
if (pf -> fim == Tam - 1) pf -> fim = 0; else (pf -> fim)++; if (pf -> fim == Tam - 1)
{
printf("\nEstouro na fila!!!\n\n"); getch(); (pf -> fim)--; return; } pf -> vdados[pf -> fim] = x;
}
int RemoverFila (struct fila *pf, char c)
{
if (pf -> inicio == pf -> fim)
{
printf("\nA fila %c esta vazia! Nao ha elementos para remover!\n\n", c); getch(); return;
}
if (pf -> inicio == Tam - 1) pf -> inicio = 0;
else