Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
EngenhariaEltrica
LaboratriodeProgramaodeComputadoresII
Professor:LucasSchmidt
ListadeExerccios3Valor:4,0pontos
Entrega:SGA(18/05/2014at23:59)
EstruturadedadosTiposAbstratosdedados
Questo 1: Escreva um programa que defina o tipo abstrato de dados de trs pessoas. O programa deve
permitir operaes de incremento sobre a idade das pessoas e funo que permita imprimir o tipo abstrato de
dadosdessaspessoas.(Criaroprogramamodularizadoemformatodebibliotecas).
Questo 2: Escreva um programa que defina o tipo abstrato de dados de cinco universidades. O programa
deve permitir operaes de incremento e decremento sobre a quantidade de funcionrios e alunos, e funo
que permita imprimir o tipo abstrato de dados dessas universidades. (Criar o programa modularizado em
formatodebibliotecas).
Questo 3: Escreva um programa que defina o tipo abstrato de dados de dez animais. O programa deve
permitir operaes que calculam o cubo de um valor. O resultado desta operao resulta na capacidade
reprodutora dos animais. Alm disso, deve possuir funo que permita imprimir o tipo abstrato de dados
dessesanimais.(Criaroprogramamodularizadoemformatodebibliotecas).
EstruturadedadosLista,FilasePilhas
Questo 4: O programa abaixo a implementao completa de uma Lista. Reproduza este programa no
compilador e veja o resultado. Entregue o cdigo fonte deste programa. (Criar o programa modularizado em
formatodebibliotecas).
Questo 5: Baseado no programa da questo 4, que representa a implementao de Listas, crie um programa
que represente a implementao de Filas. Lembrando que neste caso, devemos considerar o conceito de First
In, First Out (Primeiro elemento que entra, o primeiro que sai). (Criar o programa modularizado em formato de
bibliotecas).
Questo 6: Baseado nos programas das questes 4 e 5, que representam as implementaes de Listas e
Filas, crie um programa que represente a implementao de Pilhas. Lembrando que neste caso, devemos
considerar o conceito de Last In, First Out (Ultimo elemento a entrar, o primeiro a sair) PUSH / POP. (Criar
oprogramamodularizadoemformatodebibliotecas).
ProgramaQuesto4:
main.cpp
#include<stdio.h>
#include<stdlib.h>
#include"Node.cpp"
intmenu(void)
{
intopt
printf("Escolhaaopcao\n")
printf("0.Sair\n")
printf("1.ZerarLISTA\n")
printf("2.ExibirLISTA\n")
printf("3.AdicionarnodenoiniciodaLISTA\n")
printf("4.AdicionarnodenofinaldaLISTA\n")
printf("5.EscolherondeinserirnodenaLISTA\n")
printf("6.RetirarnodedoiniciodaLISTA\n")
printf("7.RetirarnodedofimdaLISTA\n")
printf("8.EscolherdeondetirarnodedaLISTA\n")
printf("Opcao:")scanf("%d",&opt)
returnopt
}
intmain(void)
{
node*LISTA=(node*)malloc(sizeof(node))
if(!LISTA){
printf("Semmemoriadisponivel!\n")
exit(1)
}else{
inicia(LISTA)
intopt
do{
opt=menu()
opcao(LISTA,opt)
}while(opt)
free(LISTA)
return0
}
}
Node.cpp
#include"Node.h"
voidinicia(node*LISTA)
{
LISTA>prox=NULL
tam=0
}
voidopcao(node*LISTA,intop)
{
node*tmp
switch(op){
case0:
libera(LISTA)
break
case1:
libera(LISTA)
inicia(LISTA)
break
case2:
exibe(LISTA)
break
case3:
insereInicio(LISTA)
break
case4:
insereFim(LISTA)
break
case5:
insere(LISTA)
break
case6:
tmp=retiraInicio(LISTA)
printf("Retirado:%3d\n\n",tmp>num)
break
case7:
tmp=retiraFim(LISTA)
printf("Retirado:%3d\n\n",tmp>num)
break
case8:
tmp=retira(LISTA)
printf("Retirado:%3d\n\n",tmp>num)
break
default:
printf("Comandoinvalido\n\n")
}
}
intvazia(node*LISTA)
{
if(LISTA>prox==NULL)
return1
else
return0
}
node*aloca()
{
node*novo=(node*)malloc(sizeof(node))
if(!novo){
printf("Semmemoriadisponivel!\n")
exit(1)
}else{
printf("Novoelemento:")scanf("%d",&novo>num)
returnnovo
}
}
voidexibe(node*LISTA)
{
system("clear")
if(vazia(LISTA)){
printf("LISTAvazia!\n\n")
return
}
node*tmp
tmp=LISTA>prox
printf("LISTA:")
while(tmp!=NULL){
printf("%5d",tmp>num)
tmp=tmp>prox
}
printf("\n")
intcount
for(count=0count<tamcount++)
printf("^")
printf("\nOrdem:")
for(count=0count<tamcount++)
printf("%5d",count+1)
printf("\n\n")
}
voidlibera(node*LISTA)
{
if(!vazia(LISTA)){
node*proxNode,
*atual
atual=LISTA>prox
while(atual!=NULL){
proxNode=atual>prox
free(atual)
atual=proxNode
}
}
}
voidinsere(node*LISTA)
{
intpos,
count
printf("Emqueposicao,[de1ate%d]vocedesejainserir:",tam)
scanf("%d",&pos)
if(pos>0&&pos<=tam){
if(pos==1)
insereInicio(LISTA)
else{
node*atual=LISTA>prox,
*anterior=LISTA
node*novo=aloca()
for(count=1count<poscount++){
anterior=atual
atual=atual>prox
}
anterior>prox=novo
novo>prox=atual
tam++
}
}else
printf("Elementoinvalido\n\n")
}
voidinsereInicio(node*LISTA)
{
node*novo=aloca()
node*oldHead=LISTA>prox
LISTA>prox=novo
novo>prox=oldHead
tam++
}
voidinsereFim(node*LISTA)
{
node*novo=aloca()
novo>prox=NULL
if(vazia(LISTA))
LISTA>prox=novo
else{
node*tmp=LISTA>prox
while(tmp>prox!=NULL)
tmp=tmp>prox
tmp>prox=novo
}
tam++
}
node*retira(node*LISTA)
{
intopt,
count
printf("Queposicao,[de1ate%d]vocedesejaretirar:",tam)
scanf("%d",&opt)
if(opt>0&&opt<=tam){
if(opt==1)
returnretiraInicio(LISTA)
else{
node*atual=LISTA>prox,
*anterior=LISTA
for(count=1count<optcount++){
anterior=atual
atual=atual>prox
}
anterior>prox=atual>prox
tam
returnatual
}
}else{
printf("Elementoinvalido\n\n")
returnNULL
}
}
node*retiraInicio(node*LISTA)
{
if(LISTA>prox==NULL){
printf("LISTAjaestavazia\n")
returnNULL
}else{
node*tmp=LISTA>prox
LISTA>prox=tmp>prox
tam
returntmp
}
node*retiraFim(node*LISTA)
{
if(LISTA>prox==NULL){
printf("LISTAjavazia\n\n")
returnNULL
}else{
node*ultimo=LISTA>prox,
*penultimo=LISTA
while(ultimo>prox!=NULL){
penultimo=ultimo
ultimo=ultimo>prox
}
penultimo>prox=NULL
tam
returnultimo
}
}
Node.h
#ifndefNODE_H_INCLUDED
#defineNODE_H_INCLUDED
structNode{
intnum
structNode*prox
}
typedefstructNodenode
inttam
voidinicia(node*LISTA)
voidopcao(node*LISTA,intop)
intvazia(node*LISTA)
node*aloca()
voidexibe(node*LISTA)
voidlibera(node*LISTA)
voidinsere(node*LISTA)
voidinsereInicio(node*LISTA)
voidinsereFim(node*LISTA)
node*retira(node*LISTA)
node*retiraInicio(node*LISTA)
node*retiraFim(node*LISTA)
#endif//NODE_H_INCLUDED