Anda di halaman 1dari 6

PontifciaUniversidadeCatlicadeMinasGerais

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

Anda mungkin juga menyukai