Вы находитесь на странице: 1из 13

Estrutura de Dados

Sistemas de Informao FGP Prof. Ms. Guto Vannini 1a Reviso em 19/03/2003 ATENO: ESTE DOCUMENTO NO EST EM SUA VERSO FINAL, PODENDO SER ALTERADO A QUALQUER MOMENTO PELO PROFESSOR E ATUALIZADO NO SITE OFICIAL OU OUTRO MEIO DE DISTRIBUIO QUALQUER.

Aula 01:
Tpicos Introduo sobre a disciplina Conceituao de vetores unidimensionais e multidimensionais

Pilha utilizao de vetores conceito FILO: First In Last Out operaoes bsicas: insero (empilhamento) e remoo (desempilhamento) conceito do topo: um nico local para insero e remoo grafico de exemplo de uma pilha Algoritmo exemplo:
int pilha[100]; int topo; int aux; ... printf("digite o valor: "); scanf("%d",&aux); ... pilha[topo]=aux; topo++ ... topo; aux=pilha[topo]; pilha[topo] = 0; ...

Exerccio: Criar um programa em linguagem C para empilhar e desempilhar nmeros inteiros de um vetor de 100 posioes. Este programa deve conter alm do programa principal main(), duas funoes, sendo uma para empilhar e outra para desempilhar elementos do vetor.

Aula 02:
Tpicos 1

conceituao de uso de pilhas em programas cientficos e comerciais; Torre de Hanoi: funcionamento do jogo.

Pilha (continuao) operao extra para pilha: inspeo (pesquisa). Algoritmo completo:
/* * implementacao de estrutura da pilha utilizando vetor * Prof. Ms. Guto Vannini * 03/02/2003 FGP * */ #include <stdio.h> int pilha[100]; int topo; int aux; void empilha(int valor) { if(topo < 100) pilha[topo++] = valor; else printf("pilha cheia\n"); } int desempilha() { if(topo > 0) return(pilha[topo]); else return(1); } int inspeciona(int valor) { int i; for(i=topo1 ; i>=0 ; i) if(pilha[i] == valor) return(i); return(1); } main() { topo = 0; aux = 0; while(aux != 4) { printf("1 empilha\n"); printf("2 desempilha\n"); printf("3 inspeciona\n"); printf("4 termina\n"); scanf("%d",&aux); if(aux == 1) { printf("digite o valor: "); scanf("%d",&aux); empilha(aux); aux = 0; } if(aux == 2) { aux = desempilha();

if(aux != 1) printf("desempilhou: %d\n",aux); else printf("pilha vazia\n"); aux = 0; } if(aux == 3) { printf("digite o valor: "); scanf("%d",&aux); aux = inspeciona(aux); if(aux != 1) printf("encontrado %d na posicao %d.\n",pilha[aux],aux); else printf("nao encontrado\n"); aux = 0; } } }

Trabalho: Criar um programa em C que permita ao usurio jogar o jogo "Torre de Hanoi". O programa dever mostrar a situao das pilhas na tela e permitir que o jogador escolha uma pilha para tirar a pea e outra para colocar, segundo as regras do jogo. Resoluo do Trabalho:
/* * implementacao de do jogo torre de hanoi com vetor * Prof. Ms. Guto Vannini * 17/02/2003 FGP * */ #include <stdio.h> int pilha[3][3]; int topo[3]; int aux, aux1, aux2; void empilha(int nump, int valor) { if(topo[nump] < 3) pilha[nump][topo[nump]++] = valor; } int acabou() { if(topo[2] == 3) return(1); return(0); } void mostra() { int i; for(i=2;i>=0;i) printf("[%d]\t[%d]\t[%d]\n", pilha[0][i], pilha[1][i], pilha[2][i]); } int e_permitido(int p1, int p2) { if(p1 == p2) return(0); if(topo[p1] == 0) return(0); if(topo[p2] == 0)

return(1); if(pilha[p1][topo[p1]1] > pilha[p2][topo[p2]1]) return(0); return(1); } int desempilha(int p1) { if(topo[p1] > 0) { int r = pilha[p1][topo[p1]]; pilha[p1][topo[p1]] = 0; return(r); } return(1); } main() { topo[0] = 0; topo[1] = 0; topo[2] = 0; aux = 0; aux1 = 0; aux2 = 0; empilha(0,3); empilha(0,2); empilha(0,1); while(!acabou()) { mostra(); printf("mover da pilha: "); scanf("%d",&aux1); printf("\npara pilha: "); scanf("%d",&aux2); if(aux1 == 0 && aux2 == 0) break; if(e_permitido(aux1,aux2)) { aux = desempilha(aux1); empilha(aux2,aux); } } mostra(); printf("FIM DE JOGO\n"); }

Fila utilizao de vetores conceito FIFO: First In First Out operaoes bsicas: insero (empilhamento) e remoo (desempilhamento) conceito de cabea e cauda: um local para insero e outro para remoo grafico de exemplo de uma fila

Exerccio: Crie uma funo em C que faz a insero de um elemento numa fila implementada num vetor de 100 posioes inteiras.

Aula 03:
4

Algoritmo completo:
/* * implementacao de estrutura da fila utilizando vetor * Prof. Ms. Guto Vannini * 12/02/2003 FGP * */ #include <stdio.h> int fila[100]; int cauda; int aux; void inserir(int valor) { if(cauda < 100) fila[cauda++] = valor; else printf("fila cheia\n"); } int remover() { int i; if(cauda > 0) { aux = fila[0]; for(i=1 ; i < cauda ; i++) fila[i1] = fila[i]; cauda; fila[cauda] = 0; return(aux); } else return(1); } int pesquisar(int valor) { int i; for(i=0 ; i < cauda ; i++) if(fila[i] == valor) return(i); return(1); } main() { aux = 0; cauda = 0; while(aux != 4) { printf("1 insere\n"); printf("2 remove\n"); printf("3 procura\n"); printf("4 termina\n"); scanf("%d",&aux); if(aux == 1) { printf("digite o valor: "); scanf("%d",&aux); inserir(aux); aux = 0; } if(aux == 2) { aux = remover();

if(aux != 1) printf("removeu: %d\n",aux); else printf("fila vazia\n"); aux = 0; } if(aux == 3) { printf("digite o valor: "); scanf("%d",&aux); aux = pesquisar(aux); if(aux != 1) printf("encontrado %d na posicao %d.\n",fila[aux],aux); else printf("nao encontrado\n"); aux = 0; } } }

Lista utilizao de vetores no h conceito FIFO ou FILO operaoes bsicas: insero, remoo e busca no h um local para insero e/ou para remoo lista ordenada grafico de exemplo de uma Lista

Aula 04:
Algoritmo completo:
/* * implementacao de estrutura de lista utilizando vetor * Prof. Ms. Guto Vannini * 24/02/2003 FGP * */ #include <stdio.h> int lista[101]; int final; int aux; void inserir(int valor) { if(final < 100) lista[final++] = valor; else printf("lista cheia\n"); } int procurar(int valor) { int i; for(i=0 ; i < final ; i++) if(lista[i] == valor) return(i); return(1); }

void remover(int valor) { int i; int p; p = procurar(valor); if(p == 1) return; for(i=p ; i < final ; i++) lista[i] = lista[i+1]; final; return; } void mostra() { int i; for(i=0; i<final ; i++) printf("%d, ",lista[i]); printf(".\n"); } main() { aux = 0; final = 0; while(aux != 4) { printf("1 insere\n"); printf("2 remove\n"); printf("3 procura\n"); printf("4 termina\n"); scanf("%d",&aux); if(aux == 1) { printf("digite o valor: "); scanf("%d",&aux); inserir(aux); mostra(); aux = 0; } if(aux == 2) { printf("digite o valor: "); scanf("%d",&aux); remover(aux); mostra(); aux = 0; } if(aux == 3) { printf("digite o valor: "); scanf("%d",&aux); aux = procurar(aux); if(aux != 1) printf("encontrado %d na posicao %d.\n",lista[aux],aux); else printf("nao encontrado\n"); mostra(); aux = 0; } } }

Exerccio: Modificar o algoritmo de lista apresentado em sala de aula para que seja possvel ao usurio escolher entre remover apenas um elemento constante da lista ou remover todas as ocorrncias deste elemento na lista (remoo mltipla). Permitir ainda, sem a 7

interveno do usurio, que os nmeros sejam inseridos em ordem crescente na lista, ou seja, ser necessrio primeiro encontrar o local certo para a insero.

Aula 05:
Algoritmo completo do exerccio:
/* * implementacao de estrutura de lista utilizando vetor * Prof. Ms. Guto Vannini * 24/02/2003 FGP * */ #include <stdio.h> int lista[101]; int final; int aux; void inserirordem(int valor) { int i; int p; for(p=0;p<final;p++) if(lista[p] >= valor) break; if(p < final) { for(i=final;i>p;i) lista[i]=lista[i1]; lista[p] = valor; final++; } else lista[final++] = valor; } int procurar(int valor) { int i; for(i=0 ; i < final ; i++) if(lista[i] == valor) return(i); return(1); } void remover(int valor) { int i; int p; p = procurar(valor); if(p == 1) return; for(i=p ; i < final ; i++) lista[i] = lista[i+1]; final; return; } void removertudo(int valor) { int i; int p; p = procurar(valor); while(p != 1)

{ for(i=p ; i < final ; i++) lista[i] = lista[i+1]; final; p = procurar(valor); } return; } void mostra() { int i; for(i=0; i<final ; i++) printf("%d, ",lista[i]); printf(".\n"); } main() { aux = 0; final = 0; while(aux != 5) { printf("1 insere\n"); printf("2 remove\n"); printf("3 remove todas ocorrencias\n"); printf("4 procura\n"); printf("5 termina\n"); scanf("%d",&aux); if(aux == 1) { printf("digite o valor: "); scanf("%d",&aux); inserirordem(aux); mostra(); aux = 0; } if(aux == 2) { printf("digite o valor: "); scanf("%d",&aux); remover(aux); mostra(); aux = 0; } if(aux == 3) { printf("digite o valor: "); scanf("%d",&aux); removertudo(aux); mostra(); aux = 0; } if(aux == 4) { printf("digite o valor: "); scanf("%d",&aux); aux = procurar(aux); if(aux != 1) printf("encontrado %d na posicao %d.\n",lista[aux],aux); else printf("nao encontrado\n"); mostra(); aux = 0; } } }

Aula 06:
Utilizando Struct Qual a difetena entre: v[i].x[j] v[i][j].x

Aula 07:
Tpicos Captulo 1: reviso completa Captulo 2: pginas 86 at 109 Captulo 4: pginas 207 at 220

Recursividade processo iterativo; definie um objeto em termos mais simples de si mesmo; autocontido; gera uma nova rea de memria para cada nova chamada Fatorial
/* * implementacao de calculo de fatorial com recursividade * Prof. Ms. Guto Vannini * 06/03/2003 FGP * */ #include <stdio.h> int fat(int valor) { int r; if(valor == 1) return(1); r = valor * fat(valor1); return(r); } main() { int aux; printf("digite um numero: "); scanf("%d",&aux); printf("%d\n",fat(aux)); }

Multiplicao
/* * implementacao de calculo de multiplicacao com recursividade * Prof. Ms. Guto Vannini * 06/03/2003 FGP * */ #include <stdio.h> int mult(int v1, int v2) {

10

int r; if(v2 == 1) return(v1); r = v1 + mult(v1,v21); return(r); } main() { int aux1, aux2; printf("digite o multiplicando: "); scanf("%d",&aux1); printf("digite o multiplicador: "); scanf("%d",&aux2); printf("%d\n",mult(aux1,aux2)); }

Fibonacci A seqncia de Fibonacci uma seqncia de inteiros onde os dois primeiros so 0 e 1, e os demais a soma dos dois anteriores. Ex.: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233...
/* * implementacao da sequencia de fibonacci com recursividade * Prof. Ms. Guto Vannini * 06/03/2003 FGP * */ #include <stdio.h> int fib(int valor) { int r; if(valor == 0) return(0); if(valor == 1) return(1); r = fib(valor1) + fib(valor2); return(r); } main() { int aux; printf("digite um numero: "); scanf("%d",&aux); printf("%d\n",fib(aux)); }

Aula 08:
Tpicos: Captulo 3: pginas 132 at 154 e 162 at 170 Pesquisa Binria
int binaria(int p1, int p2, int valor) { int p3; if(p1 > p2) return(1);

11

p3 = (p1 + p2) / 2; if(vet[p3] == valor) return(p3); if(vet[p3] > valor) p3 = binaria(p1,p31,valor); else p3 = binaria(p3+1,p2,valor); return(p3); }

Ordenao pelo Mtodo Bolha


void bolha() { int flag = 1; int aux; int i; while(flag == 1) { flag = 0; for(i=0;i<9;i++) if(vet[i] > vet[i+1]) { aux = vet[i]; vet[i] = vet[i+1]; vet[i+1] = aux; flag = 1; } } }

Algoritmo completo:
/* * implementacao de pesquisa binaria e metodo bolha * Prof. Ms. Guto Vannini * 13/03/2003 FGP * */ #include <stdio.h> int vet[10]; void bolha() { int flag = 1; int aux; int i; while(flag == 1) { flag = 0; for(i=0;i<9;i++) if(vet[i] > vet[i+1]) { aux = vet[i]; vet[i] = vet[i+1]; vet[i+1] = aux; flag = 1; } } } void mostra() { int i;

12

for(i=0;i<10;i++) printf("vet[%d]=%d\n",i,vet[i]); } int binaria(int p1, int p2, int valor) { int p3; if(p1 > p2) return(1); p3 = (p1 + p2) / 2; if(vet[p3] == valor) return(p3); if(vet[p3] > valor) p3 = binaria(p1,p31,valor); else p3 = binaria(p3+1,p2,valor); return(p3); } main() { int i; int aux; for(i=0;i<10;i++) vet[i] = 0; for(i=0;i<10;i++) { printf("digite vet[%d]: ",i); scanf("%d",&aux); vet[i] = aux; } bolha(); printf("vetor ordenado:\n"); mostra(); printf("digite o valor para procurar: "); scanf("%d",&aux); aux = binaria(0,9,aux); if(aux != 1) prinft("encotrado na posicao %d\n",aux); else printf("nao encontrado\n"); }

13

Вам также может понравиться