Baixe o app para aproveitar ainda mais
Prévia do material em texto
ESTRUTURA DE DADOS – Data: 05/06/2015 ATIVIDADE ESTRUTURADA GRUPO V Aluno: Aluno: O presente trabalho deve ser POSTADO NO WEBAula até o dia 05/junho e APRESENTADO até o dia 17/06, obedecendo aos seguintes critérios: O trabalho deve postado em um arquivo contendo as seguintes partes: Folha de rosto com este roteiro e nome completo dos alunos do grupo acima desta descrição e código fonte em Dev C++. DESENVOLVIMENTO: Pilha 1. Faça um programa em C++ para ler um número inteiro maior que zero, converter este número de decimal para hexadecimal, usando pilha e apresentar na tela, o resultado da conversão. Apresentação do código fonte: #include <iostream> #include <time.h> #include <stdio.h> #include <stdlib.h> #define tam 50 using namespace std; struct pilha { int topo; int item[tam]; }; bool inicia(pilha &p) { p.topo = -1; } bool vazia(pilha p) { return p.topo == -1; } bool cheia(pilha p) { return p.topo == tam-1; } void empilha(pilha &p, int num) { if(!cheia(p)) { p.item[++p.topo] = num; } } int desempilha(pilha &p) { if(!vazia(p)) { return p.item[p.topo--]; } else { return 0; } } void mostra_pilha(pilha &p) { if(!vazia(p)) { cout<<"PILHA:"<<"\n"; for(int i = 0; i <= p.topo;i++) { cout<<p.item[i]<<"\n"; } cout<<endl; } } int main() { pilha p; int num; int resto, hex; inicia(p); cout << "DIGITE O NUMERO DECIMAL INTEIRO QUE DESEJA CONVERTER PARA HEXADECIMAL:\n"; cin >> num; cout<<endl; while(num != 0) { resto = num%16; empilha(p, resto); num /= 16; } mostra_pilha(p); cout<<"VALOR EM HEXADECIMAL= "; while(!vazia(p)) { hex = desempilha(p); switch (hex) { case 10: cout<<"A"; break; case 11: cout<<"B"; break; case 12: cout<<"C"; break; case 13: cout<<"D"; break; case 14: cout<<"E"; break; case 15: cout<<"F"; break; default: cout<<hex; } } cout<<endl; return 0; } Apresentação do resultado: Exercicio 2 .- Exercicio 19 da página 119 da apostila parte I #include <cstdlib> #include <time.h> #include <iostream> using namespace std; struct No { int Valor; struct No *prox; }; struct Lista { No *inicio; }; void IniciaLista(Lista *lista){ lista->inicio = NULL; } bool Vazia(Lista *lista){ return (lista->inicio == NULL); } void Insere_Inicio(int x, Lista *lista){ No *aux; aux=new No;//aloca memoria para aux aux->Valor = x; aux->prox = lista->inicio; lista->inicio=aux; } void Remove_Inicio(Lista *lista){ if (Vazia(lista)) { cout<<"Fila vazia\n"; } else{ No *q; int v; q = lista->inicio->prox; v = lista->inicio->Valor; delete lista->inicio; //libera memoria lista->inicio=q; cout<<"removeu "<<v<<'\n'; } } void Insere_Fim(int x, Lista *lista){ if(lista->inicio==NULL) Insere_Inicio(x,lista); else{ No *aux1,*aux2; aux1=new No;//aloca memoria para aux //aux1 = (No*) malloc(sizeof(No));aloca memoria para o ponteiro aux aux1->Valor = x; aux1->prox=NULL; aux2=lista->inicio; while(aux2->prox!=NULL) aux2=aux2->prox; aux2->prox=aux1; } } void Remove_Fim(Lista *lista){ if (Vazia(lista)) cout<<"Lista vazia\n"; else{ No *q,*aux; int v; q=lista->inicio; while(q->prox!=NULL){ aux=q; q=q->prox; } v = q->Valor; delete q;//libera memoria de q free(q); //libera a memoria do ponteiro inicio aux->prox=NULL; cout<<"removeu "<<v<<'\n'; } } void Insere_Meio(int x, Lista *lista, int pos){ if(pos==1) Insere_Inicio(x, lista); else{ No *aux1,*aux2; aux1=new No;//aloca memoaria para aux //aux1 = (No*) malloc(sizeof(No));aloca memoria para o ponteiro aux aux1->Valor = x; aux2=lista->inicio; int i; for(i=1;i<pos-1;i++) aux2=aux2->prox; //cout<<"posicao="<<i<<" "<<aux2->Valor<<endl; aux1->prox=aux2->prox; aux2->prox=aux1; } } void Remove_Meio(Lista *lista, int pos){ if(pos==1) Remove_Inicio(lista); else{ No *q,*aux; int v; q=lista->inicio; for(int i=1;i<pos;i++){ aux=q; q=q->prox; } v = q->Valor; aux->prox=q->prox; delete q;//libera memoria de q //free(q); libera a memoria do ponteiro removido cout<<"removeu "<<v<<'\n'; } } void Remove_Ponteiro(Lista *lista, No *pos){ No *q,*aux; int v; q=lista->inicio; if(pos==lista->inicio){ lista->inicio=q->prox; v=q->Valor; cout<<"removeu "<<v<<endl; delete q; } else{ while(q!=pos){ aux=q; q=q->prox; } v = q->Valor; aux->prox=q->prox; delete q;//libera memoria de q cout<<"removeu "<<v<<'\n'; } } void mostra(Lista *lista){ if(!Vazia(lista)){ No *aux; aux=lista->inicio; while(aux!=NULL){ cout<<aux->Valor<<' '; aux=aux->prox; } cout<<endl; } else cout<<"lista vazia\n"; } void mostrap(Lista *lista){ if(!Vazia(lista)){ No *aux; aux=lista->inicio; while(aux!=NULL){ cout<<aux<<" "; aux=aux->prox; } cout<<endl; } else cout<<"lista vazia\n"; } void Insere_Ordem(int x, Lista *lista){ if(Vazia(lista)) Insere_Inicio(x, lista); else{ No *aux1,*aux2; aux1=new No;//aloca memoria para aux aux1->Valor = x; aux2=lista->inicio; int i=1; while ((aux2!=NULL)&&(aux2->Valor<x)){ aux2=aux2->prox; i++; } if(aux2==NULL) Insere_Fim(x,lista); else Insere_Meio(x,lista,i); } } void destruir_lista(Lista *lista){ No *aux; while(lista->inicio!=NULL){ aux=lista->inicio; lista->inicio=lista->inicio->prox; free(aux); } free(lista->inicio); }#include "bibliotecaListaPonteiro.h" int main(){ srand(time(NULL)); Lista *lista; lista= new Lista; int x; IniciaLista(lista); for(int i=0; i<20;i++){ x= rand () %100 + 1; Insere_Ordem(x, lista); } mostra(lista); No *p; int pos; cout<<"Digite a posicao do ponteiro a remover: "; cin>>pos; p=lista->inicio; if (pos>1) for(int i=1;i<pos;i++) p=p->prox;// para chegar no ponteiro da posicao pos Remove_Ponteiro(lista, p); mostra(lista); system("pause"); } Apresentação do resultado:
Compartilhar