Você está na página 1de 26

UNIVERSIDADE ANHANGUERA

CENTRO DE EDUCAO A DISTNCIA FACULDADE DE


NEGOCIOS DE BH (FNBH)
CURSO DE ANLISE E DESENVOLVIMENTO DE
SISTEMAS

Luciano Souza Mendes RA: 7983723790


Marco Antnio Ferreira de Oliveira RA: 7983716585
Taciana Lopes De Deus RA: 1299516284

ESTRUTURA DE DADOS.

UNIVERSIDADE ANHANGUERA

Belo Horizonte 2014

UNIVERSIDADE ANHANGUERA
CENTRO DE EDUCAO A DISTNCIA FACULDADE DE
NEGOCIOS DE BH (FNBH)
CURSO DE ANLISE E DESENVOLVIMENTO DE
SISTEMAS

ESTRUTURA DE DADOS.

Belo Horizonte 2014

UNIVERSIDADE ANHANGUERA

Descrever e exemplificar o que alocao esttica de memria.


um processo que consiste em solicitar/utilizarmemriadurante o processo de
execuo de umprograma de computador. A alocao de memria no
computador pode ser dividida em dois grupos principais:
Alocao Esttica: os dados tem um tamanho fixo e esto organizados
sequencialmente na memria do computador. Um exemplo tpico de alocao
esttica so as variveis globais e arrays. Alocao Dinmica: os dados no
precisam ter um tamanho fixo, pois podemos definir para cada dado quanto de
memria que desejamos usar. Sendo assim vamos alocar espaos de memria
(blocos) que no precisam estar necessariamente organizados de maneira
sequencial, podendo estar distribudos de forma dispersa (no ordenada) na
memria do computador. Na alocao dinmica, vamos pedir para
alocar/desalocar blocos de memria, de acordo com a nossa necessidade,
reservando ou liberando blocos de memria durante a execuo de um programa.
Para poder achar os blocos que esto dispersos ou espalhados na memria
usamos as variveis do tipo Ponteiro (indicadores de endereos de memria). A
alocao esttica, pois acontece antes que o programa comece a ser executado:
char c; int i; int v[10];
s vezes, a quantidade de memria a alocar s se torna conhecida durante a
execuo do programa. Para lidar com essa situao preciso recorrer alocao
dinmica de memria. A alocao dinmica gerenciada pelas funes malloc e
free, que esto na biblioteca stdlib. Para usar esta biblioteca, preciso dizer :
#include <stdlib.h>
A funo malloc (abreviatura de memory allocation) aloca um bloco de bytes
consecutivos na memria do computador e devolve o endereo desse bloco. O
nmero de bytes especificado no argumento da funo. No seguinte fragmento
de cdigo, malloc aloca 1 byte:
char *ptr;
ptr = malloc( 1);
scanf( "%c", ptr);

UNIVERSIDADE ANHANGUERA

O endereo devolvido por malloc do tipo "genrico" void *. O programador


armazena esse endereo num ponteiro de tipo apropriado. No exemplo acima, o
endereo armazenado num ponteiro-para-char.
Para alocar um tipo-de-dado que ocupa vrios bytes, preciso recorrer ao
operador sizeof, que diz quantos bytes o tipo especificado tem:
typedef struct {
int dia, mes, ano;
} data;
data *d;
d = malloc( sizeof (data));
d->dia = 31; d->mes = 12; d->ano = 2008;
[As aparncias enganam: sizeof no uma funo.]
Overhead. Cada invocao de malloc aloca um bloco de bytes consecutivos
maior que o solicitado: os bytes adicionais so usados para guardar informaes
administrativas sobre o bloco de bytes (essas informaes permitem que o bloco
seja corretamente desalocado, mais tarde, pela funo free). O nmero de bytes
adicionais pode ser grande, mas no depende do nmero de bytes solicitado no
argumento de malloc. No recomendvel, portanto, invocar malloc repetidas
vezes com argumento muito pequeno. prefervel alocar um grande bloco de
bytes e retirar pequenas pores desse bloco na medida do necessrio.
int dia, mes, ano;
} data;
int main( void) {
printf( "sizeof (data) = %d\n", sizeof (data));
printf( "sizeof (data *) = %d\n", sizeof (data *));
return 0;

UNIVERSIDADE ANHANGUERA

}
A memria finita:
Se a memria do computador j estiver toda ocupada, malloc no consegue
alocar mais espao e devolve NULL. Convm verificar essa possibilidade antes
de prosseguir:
ptr = malloc( sizeof (data));
if (ptr == NULL) {
printf( "Socorro! malloc devolveu NULL!\n");
exit( EXIT_FAILURE);
}
A codificao frequente e repetida desse teste cansativa para o programador e
desvia a ateno do leitor. Por isso, vamos usar a seguinte verso alternativa de
malloc:
void *mallocc( size_t nbytes)
{
void *ptr;
ptr = malloc( nbytes);
if (ptr == NULL) {
printf( "Socorro! malloc devolveu NULL!\n");
exit( EXIT_FAILURE);
}
return ptr;
}
O parmetro de mallocc do tipo size_t. Em muitos computadores, size_t
equivalente a unsigned int.

UNIVERSIDADE ANHANGUERA

Fazer um programa em Linguagem C que implemente uma estrutura


avio(structaviao), permitindo o cadastro e a exibio:
.
#include
#include
#include
structaviao
{
char modelo[8];
char fabricante[30];
int passageiros;
float comprimento;
float altura;
float velocidade;
float altitude;
char motor [10];
struct aviao *prox;
};
struct aviao *aux, *inicio = NULL, *final = NULL;
struct aviao* cria(void)
{
return NULL;
}
struct aviao* insere_final()
{
int x;
printf("Entre com um numero inteiro: ");
scanf("%i",&x);
aux = (struct aviao*) malloc (sizeof(struct aviao));
aux->passageiros = x;
aux -> prox = (struct aviao *) NULL;
if(inicio == NULL)
inicio = final = aux;
else
{
final -> prox = aux;

UNIVERSIDADE ANHANGUERA

final = aux;
}
return inicio;
}
int lista_vazia(struct aviao *lista)
{
if(lista == NULL)
return 1;
else
return 0;
}
void visualiza_lista_final(struct aviao *lista)
{
if(!lista_vazia(lista))
{
aux = lista;
while(aux != (struct aviao *) NULL)
{
printf("Valor da Lista: %i\n", aux->passageiros);
aux = aux -> prox;
}}
else
printf("\nTentou imprimir uma lista vazia!");
getch();
}
struct aviao* busca(struct aviao* lista, int busca)
{
bool achou = 0;
if(!lista_vazia(lista))
{
for(aux=lista;aux!=NULL;aux=aux->prox)
{
if(aux->passageiros == busca)
printf("Valor encontrado.\n");
achou = 1;
}
}
if(!achou)
printf("Valor no encontrado.\n");

UNIVERSIDADE ANHANGUERA

}
else
{
printf("\nTentou buscar de uma lista vazia");
}
getch();
return NULL;
}
struct aviao* excluir(struct aviao *lista, int valor)
{
struct aviao *ant = NULL;
aux = lista;
if(!lista_vazia(lista))
{
while(aux!= NULL && aux->passageiros != valor)
{
ant = aux;
aux = aux->prox;
}
if(aux == NULL)
{
printf("\nNao foi possivel a exclusao. Elemento no encontrado!");
getch();
return lista;
}
if(ant == NULL)
lista = aux->prox;
else
ant->prox = aux->prox;
free(aux);
printf("Elemento removido com sucesso!\n");
getch();
return lista;
}
else
{
printf("\nTentou remover de uma lista vazia");
getch();
return lista;
}
}
Fazer um programa em Linguagem C que criem uma estrutura de dados
voo(struct voo)para a empresa VOEBEM, que servir para implementar funes
para controle da lista dos voos:
#include

UNIVERSIDADE ANHANGUERA

#include
#include
void cadastrarVoo();
void consultaVoo();
void removeVoo();
struct Voo
{
int numerovoo,
datavoo,
horariovoo;
char aeroportosaida[30],
aeroportochegada[30],
rota[20];
int tempovoo,
passageiros;
}
struct Voo voo;
int main()
{
int opcao;
REFAZ: printf("\n\n===================================");
printf("\n\n 1 - Cadastrar Voo");
printf("\n 2 - Consultar Voo");
printf("\n 3 - Excluir Voo");
printf("\n 0 - Sair");
printf("\n\n===================================\n");
scanf(" %i",&opcao);
switch(opcao)
{
case 0:
{
return -1;
break;
}
case 1:
{
cadastrarVoo();
goto REFAZ;
break;
}
case 2:
{
consultaVoo();
goto REFAZ;

UNIVERSIDADE ANHANGUERA

break;
}
case 3:
{
removeVoo();goto REFAZ;
break;
}
default:
{
printf("\n Opcao Invalida\n\n Digite Novamente\n\n");
goto REFAZ;
break;
}
}
getch();
return;
}
void cadastrarVoo()
{
printf("\nDigite o numero do voo\n");
scanf("%i",&voo.numerovoo);
printf("\nDigite a data do voo\n");
scanf("%i",&voo.datavoo);
printf("\nDigite o horario de saida do voo\n");
scanf("%i",&voo.horariovoo);
printf("\nDigite o aeroporto de saida do voo\n");
scanf("%s",&voo.aeroportosaida);
printf("\nDigite o aeroporto de chegada do voo\n");
scanf("%s",&voo.aeroportochegada);
printf("\nDigite a rota do voo\n");
scanf("%s",&voo.rota);
printf("\nDigite o tempo estimado do voo\n");
scanf("%i",&voo.tempovoo);
printf("\nDigite o numero de passageiros do voo\n");
scanf("%i",&voo.passageiros);
printf("\n\n Voo Cadastrado com sucesso.");

UNIVERSIDADE ANHANGUERA

return;
}
void consultaVoo()
{
printf("\n\n Numero do Voo.: %i", voo.numerovoo);
printf("\n\n Data de Saida do Voo.: %i", voo.datavoo);
printf("\n\n Horario de Saida do Voo.: %i", voo.horariovoo);
printf("\n\n Aeroporto de Saida.: %s", voo.aeroportosaida);
printf("\n\n Aeroporto de Chegada.: %s", voo.aeroportochegada);
printf("\n\n Rota do Voo.: %s", voo.rota);
printf("\n\n Tempo estimado do Voo.: %i", voo.tempovoo);
printf("\n\n Numero de passageiros a bordo.: %i", voo.passageiros);
return;
}
void removeVoo()
{
int numvoo;
char exclui;
NUMEROVOO:printf("\n Digite numero do Voo\n");
scanf("%i",&numvoo);
if(numvoo == voo.numerovoo)
{
printf("\n\n Deseja realmente excluir o voo? [y/n] ");
scanf("%s",&exclui);if((exclui != 'y') && (exclui != 'n'))
{
printf("\n Digitacao Incorreta");
goto NUMEROVOO;
}
else
{
if(exclui == 'y')

UNIVERSIDADE ANHANGUERA

{
voo.numerovoo = 0;
voo.datavoo = 0;
voo.horariovoo = 0;
//voo.aeroportosaida = '';
//voo.aeroportochegada = '';
//voo.rota = '';
voo.tempovoo = 0;
voo.passageiros = 0;
printf("\n\n Voo %i Excluido com sucesso.", numvoo);
return;
}
else
{
return;
}
}
}
else
{
printf("\n Numero do voo nao existe\n");
return;
}
return;

Passo 3 (Equipe)

Fazer um programa em LinguagemC que implemente a estrutura passagem


(struct passagem) para a empresa VOEBEM que servir para implementar
funes para controle da lista de passagens areas vendidas.
Implementar a funo cadastrarPassagem() que deve permitir o cadastro de uma

UNIVERSIDADE ANHANGUERA

10

nova passagem;
Implementar a funo consultaPassagem() que deve permitir obter informaes
sobre a passagem com base na digitao do nmero da passagem.
#include
#include
#include
void cadastrarPassagem();
void consultaPassagem();
truct Passagem
{
int numeropassagem,
numerovoo,
dataembarque,
horarioembarque;
char portaoembarque[30];
};
struct Passagem pass;
int main()
{
int opcao;
REFAZ: printf("\n\n===================================");
printf("\n\n 1 - Cadastrar Passagem");
printf("\n 2 - Consultar Passagem");
printf("\n 0 - Sair");
printf("\n\n===================================\n");
scanf(" %i",&opcao);
switch(opcao)
{
case 0:
{
return -1;
break;

UNIVERSIDADE ANHANGUERA

11

}
case 1:
{
cadastrarPassagem();
goto REFAZ;
break;
}
case 2:
{
consultaPassagem();
goto REFAZ;
break;
}
default:
{printf("\n Opcao Invalida\n\n Digite Novamente\n\n");
goto REFAZ;
break;
}
}
getch();
return;
}
void cadastrarPassagem()
{
printf("\nDigite o numero da passagem\n");
scanf("%i",&pass.numeropassagem);
printf("\nDigite o numero do voo\n");
scanf("%i",&pass.numerovoo);
printf("\nDigite a data do embarque\n");
scanf("%i",&pass.dataembarque);

UNIVERSIDADE ANHANGUERA

12

printf("\nDigite o horario de embarque\n");


scanf("%i",&pass.horarioembarque);
printf("\nDigite o portao de embarque)
Fazer um programa em Linguagem C que implemente a estrutura taxiamento
(structtaxiamento) para controlar a Liberao para Taxiamento das Aeronaves
para decolagem na pista de voos. O taxiamento e as decolagens devem obedecer
uma fila para no haver choques entre as aeronaves a decolar e que esto
pousando.
//Biblioteca biblioteca.h
#include
#include

//estrutura para aviao


typedef struct {
int numeroVoo;
char modeloAviao;
char empresaAerea;
char horarioSaida;
} taxiamento;

typedef struct tcelula{


taxiamento item;
struct tcelula *prox;
}ftcelula;

typedef struct {
ftcelula *frente;
ftcelula *tras;
}tfila;

UNIVERSIDADE ANHANGUERA

13

void inicializaFila(tfila *fila);


void cadastrarTaxiamento(taxiamento x, tfila *fila);
int vaziaFila(tfila *fila);
void imprimeFila(tfila *f);
void autorizaTaxiamento(tfila *fila, taxiamento x);

//Classe main.c
#include "biblioteca.h"
int menuGeral(){ //abre funo menu geral
int op;
printf("\t\t===Escolha uma opca===\n\n");
printf("\t\t1 - Controle taxiamento\n");printf("\t\t2 - Controle bagegem\n");
printf("\t\t0 - sair\n\n");
printf("\t\tEscolha uma opcao: ");
scanf("%d", &op);
printf("\n\n");
return op;
} // fecha funcao menu geral
int main (){ //abre funao meain
//variaveis gerais
int op, opV, opB;
//variaveis para recebeminto dos dados de voo
tfila f;
taxiamento t;
inicializaFila(&f); //inicializa a fila
op = menuGeral(); //recebe o parametro de menuGeral para iniciar o case.
switch (op){ //abre switch
case 1:
//recebendo dados de voo
//receber opcao de menu para cadastrar voo

UNIVERSIDADE ANHANGUERA

14

printf("\t\t===Taxiamento Areo===\n\n");
printf("\t\t1 - Cadastrar Decolagem \n");
printf("\t\t2 - Ver sequncia de decolagem\n");
printf("\t\t0 - sair\n\n");
printf("\t\tEscolha uma opcao: ");
scanf("%d", &opV);
printf("\n\n");
if (opV == 1){ // se a opcao for 1, ele ira recolher os dados do voo;
printf("informe o numero do voo");
scanf("%d", &t.numeroVoo);
printf("informe o modelo da aeronave");
scanf("%d", &t.modeloAviao);
printf("informe a empresa area");
scanf("%d", &t.empresaAerea);
printf("informe a hora de saida");
scanf("%d", &t.horarioSaida);
cadastrarTaxiamento(t, &f); //insere o voo cadastrado na fila de decolagem
} else
if (opV==2){
autorizaTaxiamento (&f, t); //retira o voo da lista e imprime na tela para o cliente
ver a //sequencia de decolagens

Fazer um programa em Linguagem C que implemente a estrutura bagagem


(struct
bagagem) .para o controle de armazenamento das bagagens no compartimento de
cargas
Implementara funo cadastraBagagem() que deve permitir o cadastro de
bagagens dos
passageiros. O cadastro deve obedecer disciplina de insero dos dados LIFO
(Last In
First Out).
Implementar a funo recuperaBagagem() que deve resgatar as bagagens que
foram

UNIVERSIDADE ANHANGUERA

15

empilhadas pela funo cadastraBagagem().

#include
#include
// estrutura bagagem
struct bagagem
{
int codigoBag;
int numeroPassagem;
int numeroVoo;
int dataEmbarque;
int horaEmbarque;
int portaoEmbarque;
struct bagagem* prox; // ponteiro para o prximo
};
int main (int argc, char *argv[])
{
struct bagagem* inicio = NULL,*fim, *novo,*aux,*imprime; // ponteiro para a
struct voo
int opcao = 0;

// enquanto for de 3
while(opcao != 3)
{
printf("\n");
printf("[1] Cadastrar Bagagem \n");
printf("[2] Recuperar Bagagem \n");
printf("[3] Sair \n");
scanf("%d", &opcao);

UNIVERSIDADE ANHANGUERA

16

if(opcao == 1)
{
// aloca memria
novo = (struct bagagem*)malloc(sizeof(struct bagagem));
// atualiza fim do ponteiro
novo->prox = (struct bagagem*)NULL;
printf("\n");
printf("Digite
codigo da bagagem: ");
scanf("%d", &novo->codigoBag);
printf("Digite o numero da passagem: ");
scanf("%d", &novo->numeroPassagem);
printf("Digite o numero do Voo: ");
scanf("%d", &novo->numeroVoo);
printf("Data do embarque: ");
scanf("%d", &novo->dataEmbarque);
printf("Horario de Embarque: ");
scanf("%d", &novo->horaEmbarque);
printf("Portao de embarque: ");
scanf("%d", &novo->portaoEmbarque);
if(inicio==(struct bagagem*)NULL)
{
inicio = novo;
fim = inicio;
}
else
{
//atribuindo o apontamento do primeiro registro para o ultimo da pilha
novo->prox = inicio;
//apontando o novo registro para o primeiro da pilha

UNIVERSIDADE ANHANGUERA

17

inicio = novo;
}
}
else if(opcao == 2)
{
// proximo_voo->prox = NULL;
// proximo_ponto aponta para o mesmo de ini_ponto, comea do incio
imprime = inicio;
printf("\n");

// mostra todos os dados


// enquanto proximo_ponto for diferente de NULL
while(imprime != NULL)
{
printf(" Recuperar bagagem :\n Codigo: %d, Numero da Passagem: %d, Numero
do Voo: %d, Data de Embarque: %d, Horario de Embarque: %d, Portao de
Embarque: %d \n", imprime->codigoBag, imprime->numeroPassagem,imprime>numeroVoo, imprime-> dataEmbarque, imprime->horaEmbarque, imprime>portaoEmbarque);
imprime = imprime->prox; // aponta para o prximo
}
}
}
/*
O prximo NULL porque s sabemos que uma lista encadeada chegou
ao fim quando o prximo elemento aponta para NULL
*/
return 0;
Fazer um programa em Linguagem C que implemente um levantamento de rotas
entre uma Cidade A e uma Cidade B por meio de um Grafo, utilizando Matriz de
Adjacncia. Considerar um total de dez cidades e fazer a ligao entre elas

UNIVERSIDADE ANHANGUERA

18

considerando as distncias e tempo voo. Para percorrer da Cidade A para a


Cidade B, considerar como melhor opo a distncia e o tempo de voo. A Figura
1 apresentada a seguir, representa um mapa de rotas de voos de cidades
brasileiras. Considerar, por exemplo, o deslocamento entre a cidade de Belo
Horizonte Fortaleza. Podem-se considerar as seguintes rotas de voos:
1. Belo Horizonte Fortaleza.
2. Belo Horizonte So Lus Fortaleza.
3. Belo Horizonte Recife Fortaleza.
4. Belo Horizonte Salvador Recife Fortaleza.
a distncia e o tempo de voo.
#include
#include
#include
#include

//prototipo das funoes


void zerarVariaveis();
void montarGrafo();
void verificarAdjacencia();
void imprimirMatriz();
void comecarDeNovo();
int retornaIndice(char nome[30]);
void insereNoVetor(char nome[30]);
void caminhamentoAmplitude();
void caminhamentoProfundidade();
int pegaVerticeAdjNaoVisitado(int indice);
void zeraAsVisitas();
void insereNaFila(int indice);
int filaVazia();
int removeDaFila();
void push(int indice);
int pop();
int pilhaVazia();

UNIVERSIDADE ANHANGUERA

19

//definio da estrutura de dados e das variaveis globais0


#define MAXNOS 10
#define PARES 5

int matriz[MAXNOS][MAXNOS];
struct no
{
int visitado;
char descricao[30];
};
struct no vetor[MAXNOS];
int quantosNos;

struct pilha
{
int vetor[MAXNOS]; //MAXNOS + 1 para evitar de causar overflow
int topo;
};
struct pilha p;

struct fila
{
int vetor[MAXNOS]; //MAXNOS + 1 para evitar de causar overflow
int inicio, fim, quantos;
};
struct fila f;

void push(int indice)


{

UNIVERSIDADE ANHANGUERA

20

if (p.topo == MAXNOS)
puts (" Overflow na Pilha");
else
{
p.topo++;
p.vetor[p.topo] = indice;
}
}//push
int pop()
{
int indice = -1;
if (p.topo == -1)
puts ("Underflow na Pilha");
else
{
indice = p.vetor[p.topo];
p.topo--;
}
return (indice);
}//pop

int pilhaVazia()
{
int vazio = 1;
if (p.topo > -1)
vazio = 0;
return vazio;
}

void insereNaFila(int indice)

UNIVERSIDADE ANHANGUERA

21

{
if (f.quantos == MAXNOS)
puts ("Overflow na Fila");
else
{
if (f.fim == (MAXNOS-1))
f.fim = 0;
else
f.fim++;
f.vetor[f.fim] = indice;
f.quantos++;
}
}

int filaVazia()
{
int vazio = 1;
if (f.quantos > 0)
vazio = 0;
return vazio;
}

int removeDaFila()
{
int indice = -1;
if (f.quantos == 0)
puts ("Pau Geral de Underflow na Fila");
else
{
indice = f.vetor[f.inicio];

UNIVERSIDADE ANHANGUERA

22

f.quantos--;
if (f.inicio == (MAXNOS-1))
f.inicio = 0;
else
f.inicio++;
}
return (indice);
}
void zerarVariaveis()
{
int i, j;
p.topo = -1;
f.inicio = f.quantos = 0;
f.fim = -1;
quantosNos = -1;
for (i = 0; i < MAXNOS; i++)
{
for (j = 0; j < MAXNOS; j++)
matriz[i][j] = 0;
vetor[i].visitado = 0;
strcpy(vetor[i].descricao, " ");
}
}
int pegaVerticeAdjNaoVisitado(int indice)
{
int coluna, retorna = -1;
for (coluna = 0; coluna

UNIVERSIDADE ANHANGUERA

23

Referncias bibliogrficas:
1 <https://docs.google.com/open?
id=0B_uLQd5hdqlWdU9tQi1yS1pTQXUzNEQ1d3Bsbk
ZBUQ>.
<https://docs.google.com/open?
id=0B_uLQd5hdqlWUVV6N0FxbzdRZm1KT0d2Y282b
U1Zdw>
<https://docs.google.com/open?
id=0B_uLQd5hdqlWQXdYT19jQUJUd2Vob1BYQ3dWZ
Ekydw>
<https://docs.google.com/open?
id=0B_uLQd5hdqlWTVFzdzZRYTZSSDJRRm9hLVg1Rj
RxZw>
<https://docs.google.com/open?
id=0B_uLQd5hdqlWcnBnQVk0YVpTUXFzUmMyc1N
WaVpvQQ>.

UNIVERSIDADE ANHANGUERA

24

Você também pode gostar