·
Sistemas de Informação ·
Linguagens de Programação
Send your question to AI and receive an answer instantly
Recommended for you
Preview text
ALGORITMOS E ESTRUTURAS DE DADOS II Professor Alison Zille Lopes IFNMG Campus Salinas AULA 3 ESTRUTURAS DE DADOS BÁSICAS INTRODUÇÃO Uma estrutura de dados é um modo particular de armazenamento e organização de dados em um computador de modo que possam ser usados eficientemente facilitando sua busca e modificação Diferentes tipos de estrutura de dados são adequadas a diferentes tipos de aplicação e algumas são altamente especializadas destinandose a algumas tarefas específicas As estruturas de dados básicas Pilhas Filas e Listas estão entre as formas mais simples de interligar elementos de um conjunto 2 PILHAS Uma pilha é uma coleção de elementos na qual itens podem ser inseridos ou removidos a partir da extremidade conhecida por topo da pilha A estrutura de dados do tipo pilha tem como característica que a última informação a entrar é a primeira a sair last in first out LIFO 3 A A D A D A D A D B F Empilha A Empilha D Empilha B Empilha F Desempilha Fundo da pilha PILHAS As pilhas podem ser implementadas usando arrays vetores ou cada elemento da pilha pode ser alocado dinamicamente através do uso de estruturas de dados e ponteiros As operações mais comuns com pilhas são Recuperar elemento no topo da pilha stackpop Empilhar um elemento push Desempilhar um elemento pop Recuperar o tamanho da pilha size Verificar se a pilha está vazia empty 4 EXEMPLO 1 ENUNCIADO Pensando na implementação de pilhas usando arrays crie um Tipo Abstrato de Dados TAD chamado PilhaVetor A base do seu TAD é uma estrutura de dados composta por um vetor de inteiros e o topo As seguintes operações precisam ser implementadas em seus TAD Recuperar elemento no topo da pilha stackpop Empilhar um elemento push Desempilhar um elemento pop Recuperar o tamanho da pilha size Verificar se a pilha está vazia empty Esvazia pilha Inicia pilha 5 EXEMPLO 1 RESOLUÇÃO 19 Arquivo PilhaVetorh Autor Alison Zille Lopes ifndef PILHAVETORH define PILHAVETORH define MAXPILHA 50 typedef short boolean typedef struct pivet int pilhaMAXPILHA int topo PilhaVetor 6 EXEMPLO 1 RESOLUÇÃO 29 int itemTopoPilhaVetor pilha boolean empilhaPilhaVetor endPilha int item int desempilhaPilhaVetor endPilha int tamanhoPilhaPilhaVetor pilha boolean pilhaVaziaPilhaVetor pilha void iniciaPilhaPilhaVetor endPilha endif PILHAVETORH 7 EXEMPLO 1 RESOLUÇÃO 39 Arquivo PilhaVetorc Autor Alison Zille Lopes include PilhaVetorh int itemTopoPilhaVetor pilha return pilhapilhapilhatopo boolean empilhaPilhaVetor endPilha int item ifendPilhatopoMAXPILHA1 endPilhatopo endPilhapilhaendPilhatopo item 8 EXEMPLO 1 RESOLUÇÃO 49 return 1 return 0 int desempilhaPilhaVetor endPilha int item endPilhapilhaendPilhatopo endPilhatopo return item int tamanhoPilhaPilhaVetor pilha return pilhatopo1 9 EXEMPLO 1 RESOLUÇÃO 59 boolean pilhaVaziaPilhaVetor pilha ifpilhatopo0 return 0 return 1 void iniciaPilhaPilhaVetor endPilha endPilhatopo 1 10 EXEMPLO 1 RESOLUÇÃO 69 Arquivo aed2aula3exp1c Autor Alison Zille Lopes include stdioh include PilhaVetorh Essa função desrespeita os conceitos de TAD Mas sua inclusão se justifica pelo objetivo didático de mostrar a estrutura da Pilha void mostraPilhaPilhaVetor pilha int j forjpilhatopo j 0 j printf6d pilhapilhaj 11 EXEMPLO 1 RESOLUÇÃO 79 int main int elemento PilhaVetor pilha char op iniciaPilhapilha do ifop getchar printfPilha de Inteiros printfEmpilha Desempilha Sair Opção opgetchar 12 EXEMPLO 1 RESOLUÇÃO 89 ifopeopE printfDigite o elemento scanfd elemento ifempilhapilha elemento printfd empilhado elemento else printfFalha ao empilhar else ifopdopD ifpilhaVaziapilha printfPilha vazia else printfd desempilhado desempilhapilha 13 EXEMPLO 1 RESOLUÇÃO 99 ifopsopS ifpilhaVaziapilha printfPilha Vazia else printfPilha mostraPilhapilha whileopsopS 14 PILHAS LISTAS ENCADEADAS 15 topo 3 próximo nulo topo 3 próximo nulo 7 próximo topo nulo A implementação de pilhas através de ponteiros é baseada na manipulação do ponteiro que indica o topo da pilha topo 3 próximo nulo 7 próximo Empilha próximo do novo nó aponta para o topo antigo e o topo passa a apontar para o novo nó Desempilha o topo passa a apontar para o elemento apontado pelo nó anteriormente no topo da pilha EXEMPLO 2 ENUNCIADO O Tipo Abstrato de Dados TAD Pilha que acompanha estas notas de aula utiliza esta abordagem para implementar pilhas Assim construa uma aplicação que use este TAD para construir uma pilha de valores reais A sua aplicação deverá permitir que o usuário Empilhe elementos Desempilhe elementos Visualize o tamanho da pilha e sua estrutura 16 EXEMPLO 2 RESOLUÇÃO 114 Arquivo Pilhah Autor Alison Zille Lopes ifndef PILHAH define PILHAH ifndef LISTAH ifndef FILAH typedef struct no void item struct no proximo No 17 EXEMPLO 2 RESOLUÇÃO 214 typedef No EndNo typedef short boolean endif endif typedef struct pipnt EndNo topo unsigned int tamanho Pilha Pilha criaPilha Pilha iniciaPilhaPilha endPilha boolean insereNaPilhaPilha endPilha void item void removeDaPilhaPilha enPilha 18 EXEMPLO 2 RESOLUÇÃO 314 void apagaPilhaPilha endPilha boolean pilhaVaziaPilha pilha unsigned int tamanhoPilhaPilha pilha void itemTopoPilhaPilha pilha endif PILHAH 19 EXEMPLO 2 RESOLUÇÃO 414 Arquivo Pilhac Autor Alison Zille Lopes include Pilhah include stdlibh Pilha criaPilha Pilha novaPilha mallocsizeofPilha return iniciaPilhanovaPilha Pilha iniciaPilhaPilha endPilha endPilhatopo NULL 20 EXEMPLO 2 RESOLUÇÃO 514 endPilhatamanho 0 return endPilha boolean insereNaPilhaPilha endPilha void item EndNo elemento mallocsizeofNo ifitemNULL return 0 elementoitem item elementoproximo endPilhatopo endPilhatopo elemento endPilhatamanho return 1 21 EXEMPLO 2 RESOLUÇÃO 614 void removeDaPilhaPilha endPilha ifpilhaVaziaendPilha return NULL else EndNo elemento endPilhatopo void item elementoitem endPilhatopo elementoproximo freeelemento endPilhatamanho return item 22 EXEMPLO 2 RESOLUÇÃO 714 void apagaPilhaPilha endPilha void aux whileaux removeDaPilhaendPilhaNULL freeaux boolean pilhaVaziaPilha pilha ifpilhatopoNULL return 1 return 0 23 EXEMPLO 2 RESOLUÇÃO 814 unsigned int tamanhoPilhaPilha pilha return pilhatamanho void itemTopoPilhaPilha pilha return pilhatopoitem 24 EXEMPLO 2 RESOLUÇÃO 914 Arquivo aed2aula3exp2c Autor Alison Zille Lopes include stdioh include stdlibh include Pilhah Essa função desrespeita os conceitos de TAD Mas sua inclusão se justifica pelo objetivo didático de mostrar a estrutura da Pilha void imprimePilhaFloatPilha pilha float aux EndNo aux2 pilhatopo 25 EXEMPLO 2 RESOLUÇÃO 1014 ifaux2NULL putchar whileaux2NULL aux aux2item printf1f aux aux2 aux2proximo printfbb else printfPilha vazia 26 EXEMPLO 2 RESOLUÇÃO 1114 int main int op Pilha minhaPilha iniciaPilhaminhaPilha float aux do printfPilha printf1Inserir 2Remover 3Exibir 4Sair Opção scanfd op switchop case 1 aux mallocsizeoffloat 27 EXEMPLO 2 RESOLUÇÃO 1214 ifauxNULL printfErro ao tentar inserir else printfDigite um número scanff aux ifinsereNaPilhaminhaPilha aux printfNúmero inserido com sucesso else printfErro ao tentar inserir freeaux break 28 EXEMPLO 2 RESOLUÇÃO 1314 case 2 aux removeDaPilhaminhaPilha ifauxNULL printf1f removido com sucesso aux freeaux else printfErro ao tentar remover break case 3 printf Pilha Tamanho u Estrutura tamanhoPilhaminhaPilha imprimePilhaFloatminhaPilha 29 EXEMPLO 2 RESOLUÇÃO 1414 whileop4 apagaPilhaminhaPilha 30 FILAS Uma fila é um conjunto ordenado de elementos no qual itens são inseridos através de uma extremidade final da fila e removidos por outra início da fila Ela é uma prima próxima da pilha pois os itens são inseridos e removidos de acordo com o princípio de que o primeiro que entra é o primeiro que sai first in first out FIFO 31 A A D A D B B Enfileira A Enfileira D Enfileira B Desenfileira D B Início Desenfileira FILAS As filas podem ser implementadas usando arrays ou cada elemento da fila pode ser alocado dinamicamente através do uso de estruturas de dados e ponteiros As operações mais comuns com filas são Recuperar elemento no início da fila front Insere um elemento insert ou enqueue Remove um elemento remove ou dequeue Recuperar o tamanho da fila size Verificar se a fila está vazia empty 32 EXEMPLO 3 ENUNCIADO Pensando na implementação de filas usando arrays crie um Tipo Abstrato de Dados TAD chamado FilaVetor A base do seu TAD é uma estrutura de dados composta por um vetor de inteiros início e fim As seguintes operações precisam ser implementadas em seus TAD Recuperar elemento no início da fila front Insere um elemento insert ou enqueue Remove um elemento remove ou dequeue Recuperar o tamanho da fila size Verificar se a fila está vazia empty Esvazia fila Inicia fila 33 EXEMPLO 3 RESOLUÇÃO 110 Arquivo FilaVetorh Autor Alison Zille Lopes ifndef FILAVETORH define FILAVETORH define MAXFILA 50 typedef short boolean typedef struct fivet int filaMAXFILA int inicio int fim FilaVetor 34 EXEMPLO 3 RESOLUÇÃO 210 int itemInicioFilaVetor fila boolean enfileiraFilaVetor endFila int item int desenfileiraFilaVetor endFila int tamanhoFilaFilaVetor fila boolean filaVaziaFilaVetor fila void iniciaFilaFilaVetor endFila endif FILAVETORH 35 EXEMPLO 3 RESOLUÇÃO 310 Arquivo FilaVetorc Autor Alison Zille Lopes include FilaVetorh int itemInicioFilaVetor fila return filafilafilainicio boolean enfileiraFilaVetor endFila int item iftamanhoFilaendFilaMAXFILA return 0 int novoFim endFilafim1 36 EXEMPLO 3 RESOLUÇÃO 410 ifnovoFimMAXFILA novoFim0 endFilafim novoFim endFilafilanovoFimitem return 1 int desenfileiraFilaVetor endFila int elemento endFilafilaendFilainicio ifendFilainicioendFilafim iniciaFilaendFila else int novoInicio endFilainicio1 37 EXEMPLO 3 RESOLUÇÃO 510 ifnovoInicioMAXFILA endFilainicio 0 else endFilainicio novoInicio return elemento int tamanhoFilaFilaVetor fila iffilaVaziafila return 0 iffilafimfilainicio return filafimfilainicio1 return MAXFILA filainiciofilafim 1 38 EXEMPLO 3 RESOLUÇÃO 610 boolean filaVaziaFilaVetor fila iffilafim 0 return 1 return 0 void iniciaFilaFilaVetor endFila endFilainicio 0 endFilafim 1 39 EXEMPLO 3 RESOLUÇÃO 710 Arquivo aed2aula3exp3c Autor Alison Zille Lopes include stdioh include FilaVetorh Essa função desrespeita os conceitos de TAD Mas sua inclusão se justifica pelo objetivo didático de mostrar a estrutura da Fila void mostraFilaFilaVetor fila int j iffilainiciofilafim forjfilainicio j filafim j printf6d filafilaj 40 EXEMPLO 3 RESOLUÇÃO 810 else forjfilainicio j MAXFILA j printf6d filafilaj forj0 j filafim j printf6d filafilaj int main int elemento FilaVetor fila char op iniciaFilafila do 41 EXEMPLO 3 RESOLUÇÃO 910 ifop getchar printfFila de Inteiros printfEnfileira Desenfileira Sair Opção opgetchar ifopeopE printfDigite o elemento scanfd elemento ifenfileirafila elemento printfd enfileirado elemento else printfFalha ao enfileirar else ifopdopD 42 EXEMPLO 3 RESOLUÇÃO 1010 iffilaVaziafila printfFila vazia else printfd desenfileirado desenfileirafila ifopsopS iffilaVaziafila printfFila Vazia else printfFila mostraFilafila whileopsopS 43 FILAS LISTAS ENCADEADAS 44 3 próximo nulo fim A implementação de filas através de ponteiros é baseada na manipulação dos ponteiros de inicio e fim da fila início 7 próximo nulo fim início 3 próximo 7 próximo nulo fim início 3 próximo Enfileira o nó no fim fim antigo aponta para o novo nó Em seguida o fim aponta para o novo nó Desenfileira o início aponta para o próximo do nó até então no início EXEMPLO 4 ENUNCIADO O Tipo Abstrato de Dados TAD Fila que acompanha estas notas de aula utiliza esta abordagem para implementar filas Assim construa uma aplicação que use este TAD para construir uma fila de valores reais A sua aplicação deverá permitir que o usuário Enfileire elementos Desenfileire elementos Visualize o tamanho da fila e sua estrutura 45 EXEMPLO 4 RESOLUÇÃO 113 Arquivo Filah Autor Alison Zille Lopes ifndef FILAH define FILAH ifndef LISTAH ifndef PILHAH typedef struct no void item struct no proximo No 46 EXEMPLO 4 RESOLUÇÃO 213 typedef No EndNo typedef short boolean endif endif typedef struct fila EndNo inicio EndNo final unsigned int tamanho Fila Fila criaFila Fila iniciaFilaFila endFila boolean insereNaFilaFila endFila void item 47 EXEMPLO 4 RESOLUÇÃO 313 void removeDaFilaFila endFila void apagaFilaFila endFila void itemInicioFilaFila fila unsigned int tamanhoFilaFila fila boolean filaVaziaFila fila endif FILAH 48 EXEMPLO 4 RESOLUÇÃO 413 Arquivo Filac Autor Alison Zille Lopes include Filah include stdlibh Fila criaFila Fila novaFila mallocsizeofFila return iniciaFilanovaFila Fila iniciaFilaFila endFila endFilatamanho 0 49 EXEMPLO 4 RESOLUÇÃO 513 endFilainicio NULL endFilafinal NULL return endFila boolean insereNaFilaFila endFila void item EndNo elemento mallocsizeofNo ifelementoNULL return 0 elementoitem item elementoproximo NULL ifendFilainicioNULL endFilainicio elemento else endFilafinalproximo elemento 50 EXEMPLO 4 RESOLUÇÃO 613 endFilafinal elemento endFilatamanho return 1 void removeDaFilaFila endFila ifendFilainicio NULL return NULL else EndNo elemento endFilainicio endFilainicio elementoproximo ifendFilainicio NULL endFilafinal NULL 51 EXEMPLO 4 RESOLUÇÃO 713 void item elementoitem freeelemento endFilatamanho return item void apagaFilaFila endFila void aux whileaux removeDaFilaendFilaNULL freeaux 52 EXEMPLO 4 RESOLUÇÃO 813 void itemInicioFilaFila fila return filainicioitem unsigned int tamanhoFilaFila fila return filatamanho boolean filaVaziaFila fila iffilainicio NULL return 1 return 0 53 EXEMPLO 4 RESOLUÇÃO 913 Arquivo aed2aula3exp4c Autor Alison Zille Lopes include stdioh include stdlibh include Filah Essa função desrespeita os conceitos de TAD Mas sua inclusão se justifica pelo objetivo didático de mostrar a estrutura da Fila void imprimeFilaFloatFila fila float aux EndNo aux2 filainicio ifaux2NULL 54 EXEMPLO 4 RESOLUÇÃO 1013 putchar whileaux2NULL aux aux2item printf1f aux aux2 aux2proximo printfbb else printfFila vazia int main int op 55 EXEMPLO 4 RESOLUÇÃO 1113 Fila minhaFila iniciaFilaminhaFila float aux do printfFila printf1Inserir 2Remover 3Exibir 4Sair Opção scanfd op switchop case 1 aux mallocsizeoffloat ifauxNULL printfErro ao tentar inserir else 56 EXEMPLO 4 RESOLUÇÃO 1213 printfDigite um número scanff aux ifinsereNaFilaminhaFila aux printfNúmero inserido com sucesso else printfErro ao tentar inserir freeaux break case 2 aux removeDaFilaminhaFila ifauxNULL printf1f removido com sucesso aux 57 EXEMPLO 4 RESOLUÇÃO 1313 freeaux else printfErro ao tentar remover break case 3 printf Fila Tamanho u Estrutura tamanhoFilaminhaFila imprimeFilaFloatminhaFila whileop4 apagaFilaminhaFila 58 LISTAS Uma lista é um conjunto ordenado de elementos no qual itens podem ser acessados inseridos ou removidos em qualquer ponto da lista As listas podem ser implementadas usando arrays ou cada elemento da fila pode ser alocado dinamicamente através do uso de estruturas de dados e ponteiros As operações mais comuns com listas são Insere um elemento na posição atual insert Adiciona elemento ao fim da lista add Remove o elemento na posição atual delete Desloca para o próximo elemento na lista next Desloca para o elemento anterior na lista last 59 EXEMPLO 5 ENUNCIADO Pensando na implementação de listas usando arrays crie um Tipo Abstrato de Dados TAD chamado ListaVetor A base do seu TAD é uma estrutura de dados composta por um vetor de inteiros posição atual início e fim As seguintes operações precisam ser implementadas em seu TAD Insere um elemento na posição atual insert Adiciona elemento ao fim da lista add Remove o elemento na posição atual delete Desloca para o próximo elemento da lista next Desloca para o elemento anterior na lista last Retorna o elemento na posição atual Vai para o início da lista Esvazia lista Inicia lista 60 EXEMPLO 5 RESOLUÇÃO 116 Arquivo ListaVetorh Autor Alison ifndef LISTAVETORH define LISTAVETORH define MAXLISTA 50 typedef short boolean typedef struct livet int listaMAXLISTA int inicio int fim int atual ListaVetor 61 EXEMPLO 5 RESOLUÇÃO 216 void iniciaListaListaVetor endLista void inicioListaListaVetor endLista boolean proximoListaListaVetor endLista boolean anteriorListaListaVetor endLista boolean insereListaListaVetor endLista int item boolean insereFimListaListaVetor endLista int item int removeListaListaVetor endLista int itemAtualListaVetor lista int tamanhoListaListaVetor lista boolean listaVaziaListaVetor lista endif LISTAVETORH 62 EXEMPLO 5 RESOLUÇÃO 316 Arquivo ListaVetorc Autor Alison include ListaVetorh void iniciaListaListaVetor endLista endListainicio 0 endListafim 1 endListaatual 0 void inicioListaListaVetor endLista endListaatual endListainicio 63 EXEMPLO 5 RESOLUÇÃO 416 boolean proximoListaListaVetor endLista iflistaVaziaendListaendListaatualendListafim return 0 ifendListaatualMAXLISTA1 endListaatual 0 else endListaatual return 1 boolean anteriorListaListaVetor endLista iflistaVaziaendListaendListaatualendListainicio return 0 64 EXEMPLO 5 RESOLUÇÃO 516 ifendListaatual0 endListaatual MAXLISTA1 else endListaatual return 1 boolean insereListaListaVetor endLista int item iftamanhoListaendListaMAXLISTA return 0 int aux i ifendListaatual endListainicio aux endListalistaendListainicio 65 EXEMPLO 5 RESOLUÇÃO 616 foriendListainicio1 iendListaatual i endListalistai1 endListalistai ifendListainicio0 endListainicio MAXLISTA1 else endListainicio endListalistaendListainicioaux endListaatual else endListafim foriendListafim iendListaatual i endListalistai endListalistai1 endListalistaendListaatualitem 66 EXEMPLO 5 RESOLUÇÃO 716 return 1 boolean insereFimListaListaVetor endLista int item iftamanhoListaendListaMAXLISTA return 0 int novoFim endListafim1 ifnovoFimMAXLISTA novoFim0 endListafim novoFim endListalistanovoFimitem return 1 67 EXEMPLO 5 RESOLUÇÃO 816 int removeListaListaVetor endLista iflistaVaziaendLista return 0 int i aux endListalistaendListaatual ifendListainicioendListafim iniciaListaendLista else ifendListaatual endListainicio foriendListaatual i endListainicio i endListalistai endListalistai1 endListainicio 68 EXEMPLO 5 RESOLUÇÃO 916 else foriendListaatual i endListafim i endListalistai endListalistai1 endListafim return aux int itemAtualListaVetor lista return listalistalistaatual 69 EXEMPLO 5 RESOLUÇÃO 1016 int tamanhoListaListaVetor lista iflistaVazialista return 0 iflistafimlistainicio return listafimlistainicio1 return MAXLISTA listainiciolistafim 1 boolean listaVaziaListaVetor lista iflistafim 0 return 1 return 0 70 EXEMPLO 5 RESOLUÇÃO 1116 Arquivo aed2aula3exp3c Autor Alison include stdioh include ListaVetorh void mostraListaListaVetor lista inicioListalista do printf6d itemAtuallista whileproximoListalista 71 EXEMPLO 5 RESOLUÇÃO 1216 int main int elemento ListaVetor lista char op boolean flag iniciaListalista do ifop getchar printfLista de Inteiros printfPróximo Anterior Insere Remove Sair Opção opgetchar 72 EXEMPLO 5 RESOLUÇÃO 1316 ifoppopP flag 0 ifproximoListalista printfElemento atual d itemAtuallista else iflistaVazialista printfLista vazia else printfFim da lista flag 1 else ifopaopA flag 0 73 EXEMPLO 5 RESOLUÇÃO 1416 ifanteriorListalista printfElemento atual d itemAtuallista else iflistaVazialista printfLista vazia else printfInício da lista else ifopiopI printfDigite o elemento scanfd elemento ifflag flag insereFimListalista elemento proximoListalista 74 EXEMPLO 5 RESOLUÇÃO 1516 else flag insereListalista elemento ifflag printfd inserido elemento else printfFalha ao inserir flag 0 else ifopropR iflistaVazialista printfLista vazia else printfd removido removeListalista 75 EXEMPLO 5 RESOLUÇÃO 1616 ifopsopS iflistaVazialista printfLista Vazia else printfLista mostraListalista whileopsopS 76 LISTAS ENCADEADAS SIMPLES 77 3 próximo nulo atual A implementação de listas encadeadas simples pode ser realizada através da manipulação do ponteiro apontado por atual início 3 próximo nulo 7 próximo Insere o próximo do novo nó é o nó apontado pelo ponteiro em atual O ponteiro em atual passa a apontar para o novo nó Remove o ponteiro em atual passa a apontar para o próximo do nó apontado anteriormente por ele 3 próximo nulo 7 próximo atual início atual início Próximo atual foi deslocado para o próximo ponteiro para nó EXEMPLO 6 ENUNCIADO O Tipo Abstrato de Dados TAD Lista que acompanha estas notas de aula utiliza esta abordagem para implementar listas encadeadas simples Assim construa uma aplicação que use este TAD para construir uma lista de valores inteiros A sua aplicação deverá permitir que o usuário Insira um inteiro em ordem crescente Remova a primeira ocorrência de um inteiro escolhido Visualize o tamanho da lista e sua estrutura 78 EXEMPLO 6 RESOLUÇÃO 115 Arquivo Listah Autor Alison Zille Lopes ifndef LISTAH define LISTAH ifndef PILHAH ifndef FILAH typedef struct no void item struct no proximo No typedef No EndNo typedef short boolean endif endif 79 EXEMPLO 6 RESOLUÇÃO 215 typedef struct lista unsigned int tamanho EndNo inicio EndNo atual Lista Lista criaLista Lista iniciaListaLista endLista boolean insereNaListaLista endLista void item void removeDaListaLista endLista void resetaAtualLista endLista boolean proximoListaLista endLista void atualListaLista lista boolean listaVaziaLista lista unsigned int tamanhoListaLista lista void apagaListaLista endLista endif LISTAH 80 EXEMPLO 6 RESOLUÇÃO 315 Arquivo Listac Autor Alison Zille Lopes include Listah include stdlibh Lista criaLista Lista novaLista mallocsizeofLista iniciaListanovaLista Lista iniciaListaLista endLista endListainicio NULL endListaatual endListainicio endListatamanho 0 81 EXEMPLO 6 RESOLUÇÃO 415 boolean insereNaListaLista endLista void item EndNo elemento mallocsizeofNo ifelementoNULL return 0 elementoitem item elementoproximo endListaatual endListaatual elemento endListatamanho return 1 void removeDaListaLista endLista ifendListainicio NULL return NULL 82 EXEMPLO 6 RESOLUÇÃO 515 else EndNo elemento endListaatual ifelemento NULL return NULL void item elementoitem endListaatual elementoproximo freeelemento endListatamanho return item void resetaAtualLista endLista endListaatual endListainicio 83 EXEMPLO 6 RESOLUÇÃO 615 boolean proximoListaLista endLista ifendListaatualNULL endListaatual endListaatualproximo return 1 return 0 void atualListaLista lista iflistaatualNULL return listaatualitem return NULL 84 EXEMPLO 6 RESOLUÇÃO 715 boolean listaVaziaLista lista iflistainicio NULL return 1 return 0 unsigned int tamanhoListaLista lista return listatamanho void apagaListaLista endLista void aux resetaAtualendLista 85 EXEMPLO 6 RESOLUÇÃO 815 whileaux removeDaListaendListaNULL freeaux 86 EXEMPLO 6 RESOLUÇÃO 915 Arquivo aed2aula3exp6c Autor Alison Zille Lopes include Listah include stdioh include stdlibh void imprimeListaIntLista lista int aux iflistaVazialista printfLista vazia else resetaAtuallista putchar 87 EXEMPLO 6 RESOLUÇÃO 1015 while1 aux atualListalista ifauxNULL break printfd aux proximoListalista printfbb boolean insereCrescenteLista endLista int numero int pnumero mallocsizeofint ifpnumeroNULL return 0 88 EXEMPLO 6 RESOLUÇÃO 1115 pnumero numero resetaAtualendLista iflistaVaziaendLista do ifatualListaendListaNULL ifnumero int atualListaendLista break whileproximoListaendLista ifinsereNaListaendLista pnumero return 1 freepnumero 89 EXEMPLO 6 RESOLUÇÃO 1215 return 0 boolean removeItemListaLista endLista int numero resetaAtualendLista iflistaVaziaendLista return 0 else int pnumero do pnumero atualListaendLista ifpnumeroNULL return 0 90 EXEMPLO 6 RESOLUÇÃO 1315 else ifnumero pnumero break whileproximoListaendLista freeremoveDaListaendLista return 1 int main int numero op Lista minhaLista iniciaListaminhaLista do printfLista 91 EXEMPLO 6 RESOLUÇÃO 1415 printf1Inserir 2Remover 3Exibir 4Sair Opção scanfd op switchop case 1 printfDigite um número scanfd numero ifinsereCrescenteminhaLista numero printfNúmero inserido com sucesso else printfErro ao tentar inserir break case 2 printfDigite um número scanfd numero 92 EXEMPLO 6 RESOLUÇÃO 1515 ifremoveItemListaminhaListanumero printfd removido com sucesso numero else printfd não encontrado numero break case 3 printf Lista Tamanho u Estrutura tamanhoListaminhaLista imprimeListaIntminhaLista whileop4 apagaListaminhaLista return EXITSUCCESS 93
Send your question to AI and receive an answer instantly
Recommended for you
Preview text
ALGORITMOS E ESTRUTURAS DE DADOS II Professor Alison Zille Lopes IFNMG Campus Salinas AULA 3 ESTRUTURAS DE DADOS BÁSICAS INTRODUÇÃO Uma estrutura de dados é um modo particular de armazenamento e organização de dados em um computador de modo que possam ser usados eficientemente facilitando sua busca e modificação Diferentes tipos de estrutura de dados são adequadas a diferentes tipos de aplicação e algumas são altamente especializadas destinandose a algumas tarefas específicas As estruturas de dados básicas Pilhas Filas e Listas estão entre as formas mais simples de interligar elementos de um conjunto 2 PILHAS Uma pilha é uma coleção de elementos na qual itens podem ser inseridos ou removidos a partir da extremidade conhecida por topo da pilha A estrutura de dados do tipo pilha tem como característica que a última informação a entrar é a primeira a sair last in first out LIFO 3 A A D A D A D A D B F Empilha A Empilha D Empilha B Empilha F Desempilha Fundo da pilha PILHAS As pilhas podem ser implementadas usando arrays vetores ou cada elemento da pilha pode ser alocado dinamicamente através do uso de estruturas de dados e ponteiros As operações mais comuns com pilhas são Recuperar elemento no topo da pilha stackpop Empilhar um elemento push Desempilhar um elemento pop Recuperar o tamanho da pilha size Verificar se a pilha está vazia empty 4 EXEMPLO 1 ENUNCIADO Pensando na implementação de pilhas usando arrays crie um Tipo Abstrato de Dados TAD chamado PilhaVetor A base do seu TAD é uma estrutura de dados composta por um vetor de inteiros e o topo As seguintes operações precisam ser implementadas em seus TAD Recuperar elemento no topo da pilha stackpop Empilhar um elemento push Desempilhar um elemento pop Recuperar o tamanho da pilha size Verificar se a pilha está vazia empty Esvazia pilha Inicia pilha 5 EXEMPLO 1 RESOLUÇÃO 19 Arquivo PilhaVetorh Autor Alison Zille Lopes ifndef PILHAVETORH define PILHAVETORH define MAXPILHA 50 typedef short boolean typedef struct pivet int pilhaMAXPILHA int topo PilhaVetor 6 EXEMPLO 1 RESOLUÇÃO 29 int itemTopoPilhaVetor pilha boolean empilhaPilhaVetor endPilha int item int desempilhaPilhaVetor endPilha int tamanhoPilhaPilhaVetor pilha boolean pilhaVaziaPilhaVetor pilha void iniciaPilhaPilhaVetor endPilha endif PILHAVETORH 7 EXEMPLO 1 RESOLUÇÃO 39 Arquivo PilhaVetorc Autor Alison Zille Lopes include PilhaVetorh int itemTopoPilhaVetor pilha return pilhapilhapilhatopo boolean empilhaPilhaVetor endPilha int item ifendPilhatopoMAXPILHA1 endPilhatopo endPilhapilhaendPilhatopo item 8 EXEMPLO 1 RESOLUÇÃO 49 return 1 return 0 int desempilhaPilhaVetor endPilha int item endPilhapilhaendPilhatopo endPilhatopo return item int tamanhoPilhaPilhaVetor pilha return pilhatopo1 9 EXEMPLO 1 RESOLUÇÃO 59 boolean pilhaVaziaPilhaVetor pilha ifpilhatopo0 return 0 return 1 void iniciaPilhaPilhaVetor endPilha endPilhatopo 1 10 EXEMPLO 1 RESOLUÇÃO 69 Arquivo aed2aula3exp1c Autor Alison Zille Lopes include stdioh include PilhaVetorh Essa função desrespeita os conceitos de TAD Mas sua inclusão se justifica pelo objetivo didático de mostrar a estrutura da Pilha void mostraPilhaPilhaVetor pilha int j forjpilhatopo j 0 j printf6d pilhapilhaj 11 EXEMPLO 1 RESOLUÇÃO 79 int main int elemento PilhaVetor pilha char op iniciaPilhapilha do ifop getchar printfPilha de Inteiros printfEmpilha Desempilha Sair Opção opgetchar 12 EXEMPLO 1 RESOLUÇÃO 89 ifopeopE printfDigite o elemento scanfd elemento ifempilhapilha elemento printfd empilhado elemento else printfFalha ao empilhar else ifopdopD ifpilhaVaziapilha printfPilha vazia else printfd desempilhado desempilhapilha 13 EXEMPLO 1 RESOLUÇÃO 99 ifopsopS ifpilhaVaziapilha printfPilha Vazia else printfPilha mostraPilhapilha whileopsopS 14 PILHAS LISTAS ENCADEADAS 15 topo 3 próximo nulo topo 3 próximo nulo 7 próximo topo nulo A implementação de pilhas através de ponteiros é baseada na manipulação do ponteiro que indica o topo da pilha topo 3 próximo nulo 7 próximo Empilha próximo do novo nó aponta para o topo antigo e o topo passa a apontar para o novo nó Desempilha o topo passa a apontar para o elemento apontado pelo nó anteriormente no topo da pilha EXEMPLO 2 ENUNCIADO O Tipo Abstrato de Dados TAD Pilha que acompanha estas notas de aula utiliza esta abordagem para implementar pilhas Assim construa uma aplicação que use este TAD para construir uma pilha de valores reais A sua aplicação deverá permitir que o usuário Empilhe elementos Desempilhe elementos Visualize o tamanho da pilha e sua estrutura 16 EXEMPLO 2 RESOLUÇÃO 114 Arquivo Pilhah Autor Alison Zille Lopes ifndef PILHAH define PILHAH ifndef LISTAH ifndef FILAH typedef struct no void item struct no proximo No 17 EXEMPLO 2 RESOLUÇÃO 214 typedef No EndNo typedef short boolean endif endif typedef struct pipnt EndNo topo unsigned int tamanho Pilha Pilha criaPilha Pilha iniciaPilhaPilha endPilha boolean insereNaPilhaPilha endPilha void item void removeDaPilhaPilha enPilha 18 EXEMPLO 2 RESOLUÇÃO 314 void apagaPilhaPilha endPilha boolean pilhaVaziaPilha pilha unsigned int tamanhoPilhaPilha pilha void itemTopoPilhaPilha pilha endif PILHAH 19 EXEMPLO 2 RESOLUÇÃO 414 Arquivo Pilhac Autor Alison Zille Lopes include Pilhah include stdlibh Pilha criaPilha Pilha novaPilha mallocsizeofPilha return iniciaPilhanovaPilha Pilha iniciaPilhaPilha endPilha endPilhatopo NULL 20 EXEMPLO 2 RESOLUÇÃO 514 endPilhatamanho 0 return endPilha boolean insereNaPilhaPilha endPilha void item EndNo elemento mallocsizeofNo ifitemNULL return 0 elementoitem item elementoproximo endPilhatopo endPilhatopo elemento endPilhatamanho return 1 21 EXEMPLO 2 RESOLUÇÃO 614 void removeDaPilhaPilha endPilha ifpilhaVaziaendPilha return NULL else EndNo elemento endPilhatopo void item elementoitem endPilhatopo elementoproximo freeelemento endPilhatamanho return item 22 EXEMPLO 2 RESOLUÇÃO 714 void apagaPilhaPilha endPilha void aux whileaux removeDaPilhaendPilhaNULL freeaux boolean pilhaVaziaPilha pilha ifpilhatopoNULL return 1 return 0 23 EXEMPLO 2 RESOLUÇÃO 814 unsigned int tamanhoPilhaPilha pilha return pilhatamanho void itemTopoPilhaPilha pilha return pilhatopoitem 24 EXEMPLO 2 RESOLUÇÃO 914 Arquivo aed2aula3exp2c Autor Alison Zille Lopes include stdioh include stdlibh include Pilhah Essa função desrespeita os conceitos de TAD Mas sua inclusão se justifica pelo objetivo didático de mostrar a estrutura da Pilha void imprimePilhaFloatPilha pilha float aux EndNo aux2 pilhatopo 25 EXEMPLO 2 RESOLUÇÃO 1014 ifaux2NULL putchar whileaux2NULL aux aux2item printf1f aux aux2 aux2proximo printfbb else printfPilha vazia 26 EXEMPLO 2 RESOLUÇÃO 1114 int main int op Pilha minhaPilha iniciaPilhaminhaPilha float aux do printfPilha printf1Inserir 2Remover 3Exibir 4Sair Opção scanfd op switchop case 1 aux mallocsizeoffloat 27 EXEMPLO 2 RESOLUÇÃO 1214 ifauxNULL printfErro ao tentar inserir else printfDigite um número scanff aux ifinsereNaPilhaminhaPilha aux printfNúmero inserido com sucesso else printfErro ao tentar inserir freeaux break 28 EXEMPLO 2 RESOLUÇÃO 1314 case 2 aux removeDaPilhaminhaPilha ifauxNULL printf1f removido com sucesso aux freeaux else printfErro ao tentar remover break case 3 printf Pilha Tamanho u Estrutura tamanhoPilhaminhaPilha imprimePilhaFloatminhaPilha 29 EXEMPLO 2 RESOLUÇÃO 1414 whileop4 apagaPilhaminhaPilha 30 FILAS Uma fila é um conjunto ordenado de elementos no qual itens são inseridos através de uma extremidade final da fila e removidos por outra início da fila Ela é uma prima próxima da pilha pois os itens são inseridos e removidos de acordo com o princípio de que o primeiro que entra é o primeiro que sai first in first out FIFO 31 A A D A D B B Enfileira A Enfileira D Enfileira B Desenfileira D B Início Desenfileira FILAS As filas podem ser implementadas usando arrays ou cada elemento da fila pode ser alocado dinamicamente através do uso de estruturas de dados e ponteiros As operações mais comuns com filas são Recuperar elemento no início da fila front Insere um elemento insert ou enqueue Remove um elemento remove ou dequeue Recuperar o tamanho da fila size Verificar se a fila está vazia empty 32 EXEMPLO 3 ENUNCIADO Pensando na implementação de filas usando arrays crie um Tipo Abstrato de Dados TAD chamado FilaVetor A base do seu TAD é uma estrutura de dados composta por um vetor de inteiros início e fim As seguintes operações precisam ser implementadas em seus TAD Recuperar elemento no início da fila front Insere um elemento insert ou enqueue Remove um elemento remove ou dequeue Recuperar o tamanho da fila size Verificar se a fila está vazia empty Esvazia fila Inicia fila 33 EXEMPLO 3 RESOLUÇÃO 110 Arquivo FilaVetorh Autor Alison Zille Lopes ifndef FILAVETORH define FILAVETORH define MAXFILA 50 typedef short boolean typedef struct fivet int filaMAXFILA int inicio int fim FilaVetor 34 EXEMPLO 3 RESOLUÇÃO 210 int itemInicioFilaVetor fila boolean enfileiraFilaVetor endFila int item int desenfileiraFilaVetor endFila int tamanhoFilaFilaVetor fila boolean filaVaziaFilaVetor fila void iniciaFilaFilaVetor endFila endif FILAVETORH 35 EXEMPLO 3 RESOLUÇÃO 310 Arquivo FilaVetorc Autor Alison Zille Lopes include FilaVetorh int itemInicioFilaVetor fila return filafilafilainicio boolean enfileiraFilaVetor endFila int item iftamanhoFilaendFilaMAXFILA return 0 int novoFim endFilafim1 36 EXEMPLO 3 RESOLUÇÃO 410 ifnovoFimMAXFILA novoFim0 endFilafim novoFim endFilafilanovoFimitem return 1 int desenfileiraFilaVetor endFila int elemento endFilafilaendFilainicio ifendFilainicioendFilafim iniciaFilaendFila else int novoInicio endFilainicio1 37 EXEMPLO 3 RESOLUÇÃO 510 ifnovoInicioMAXFILA endFilainicio 0 else endFilainicio novoInicio return elemento int tamanhoFilaFilaVetor fila iffilaVaziafila return 0 iffilafimfilainicio return filafimfilainicio1 return MAXFILA filainiciofilafim 1 38 EXEMPLO 3 RESOLUÇÃO 610 boolean filaVaziaFilaVetor fila iffilafim 0 return 1 return 0 void iniciaFilaFilaVetor endFila endFilainicio 0 endFilafim 1 39 EXEMPLO 3 RESOLUÇÃO 710 Arquivo aed2aula3exp3c Autor Alison Zille Lopes include stdioh include FilaVetorh Essa função desrespeita os conceitos de TAD Mas sua inclusão se justifica pelo objetivo didático de mostrar a estrutura da Fila void mostraFilaFilaVetor fila int j iffilainiciofilafim forjfilainicio j filafim j printf6d filafilaj 40 EXEMPLO 3 RESOLUÇÃO 810 else forjfilainicio j MAXFILA j printf6d filafilaj forj0 j filafim j printf6d filafilaj int main int elemento FilaVetor fila char op iniciaFilafila do 41 EXEMPLO 3 RESOLUÇÃO 910 ifop getchar printfFila de Inteiros printfEnfileira Desenfileira Sair Opção opgetchar ifopeopE printfDigite o elemento scanfd elemento ifenfileirafila elemento printfd enfileirado elemento else printfFalha ao enfileirar else ifopdopD 42 EXEMPLO 3 RESOLUÇÃO 1010 iffilaVaziafila printfFila vazia else printfd desenfileirado desenfileirafila ifopsopS iffilaVaziafila printfFila Vazia else printfFila mostraFilafila whileopsopS 43 FILAS LISTAS ENCADEADAS 44 3 próximo nulo fim A implementação de filas através de ponteiros é baseada na manipulação dos ponteiros de inicio e fim da fila início 7 próximo nulo fim início 3 próximo 7 próximo nulo fim início 3 próximo Enfileira o nó no fim fim antigo aponta para o novo nó Em seguida o fim aponta para o novo nó Desenfileira o início aponta para o próximo do nó até então no início EXEMPLO 4 ENUNCIADO O Tipo Abstrato de Dados TAD Fila que acompanha estas notas de aula utiliza esta abordagem para implementar filas Assim construa uma aplicação que use este TAD para construir uma fila de valores reais A sua aplicação deverá permitir que o usuário Enfileire elementos Desenfileire elementos Visualize o tamanho da fila e sua estrutura 45 EXEMPLO 4 RESOLUÇÃO 113 Arquivo Filah Autor Alison Zille Lopes ifndef FILAH define FILAH ifndef LISTAH ifndef PILHAH typedef struct no void item struct no proximo No 46 EXEMPLO 4 RESOLUÇÃO 213 typedef No EndNo typedef short boolean endif endif typedef struct fila EndNo inicio EndNo final unsigned int tamanho Fila Fila criaFila Fila iniciaFilaFila endFila boolean insereNaFilaFila endFila void item 47 EXEMPLO 4 RESOLUÇÃO 313 void removeDaFilaFila endFila void apagaFilaFila endFila void itemInicioFilaFila fila unsigned int tamanhoFilaFila fila boolean filaVaziaFila fila endif FILAH 48 EXEMPLO 4 RESOLUÇÃO 413 Arquivo Filac Autor Alison Zille Lopes include Filah include stdlibh Fila criaFila Fila novaFila mallocsizeofFila return iniciaFilanovaFila Fila iniciaFilaFila endFila endFilatamanho 0 49 EXEMPLO 4 RESOLUÇÃO 513 endFilainicio NULL endFilafinal NULL return endFila boolean insereNaFilaFila endFila void item EndNo elemento mallocsizeofNo ifelementoNULL return 0 elementoitem item elementoproximo NULL ifendFilainicioNULL endFilainicio elemento else endFilafinalproximo elemento 50 EXEMPLO 4 RESOLUÇÃO 613 endFilafinal elemento endFilatamanho return 1 void removeDaFilaFila endFila ifendFilainicio NULL return NULL else EndNo elemento endFilainicio endFilainicio elementoproximo ifendFilainicio NULL endFilafinal NULL 51 EXEMPLO 4 RESOLUÇÃO 713 void item elementoitem freeelemento endFilatamanho return item void apagaFilaFila endFila void aux whileaux removeDaFilaendFilaNULL freeaux 52 EXEMPLO 4 RESOLUÇÃO 813 void itemInicioFilaFila fila return filainicioitem unsigned int tamanhoFilaFila fila return filatamanho boolean filaVaziaFila fila iffilainicio NULL return 1 return 0 53 EXEMPLO 4 RESOLUÇÃO 913 Arquivo aed2aula3exp4c Autor Alison Zille Lopes include stdioh include stdlibh include Filah Essa função desrespeita os conceitos de TAD Mas sua inclusão se justifica pelo objetivo didático de mostrar a estrutura da Fila void imprimeFilaFloatFila fila float aux EndNo aux2 filainicio ifaux2NULL 54 EXEMPLO 4 RESOLUÇÃO 1013 putchar whileaux2NULL aux aux2item printf1f aux aux2 aux2proximo printfbb else printfFila vazia int main int op 55 EXEMPLO 4 RESOLUÇÃO 1113 Fila minhaFila iniciaFilaminhaFila float aux do printfFila printf1Inserir 2Remover 3Exibir 4Sair Opção scanfd op switchop case 1 aux mallocsizeoffloat ifauxNULL printfErro ao tentar inserir else 56 EXEMPLO 4 RESOLUÇÃO 1213 printfDigite um número scanff aux ifinsereNaFilaminhaFila aux printfNúmero inserido com sucesso else printfErro ao tentar inserir freeaux break case 2 aux removeDaFilaminhaFila ifauxNULL printf1f removido com sucesso aux 57 EXEMPLO 4 RESOLUÇÃO 1313 freeaux else printfErro ao tentar remover break case 3 printf Fila Tamanho u Estrutura tamanhoFilaminhaFila imprimeFilaFloatminhaFila whileop4 apagaFilaminhaFila 58 LISTAS Uma lista é um conjunto ordenado de elementos no qual itens podem ser acessados inseridos ou removidos em qualquer ponto da lista As listas podem ser implementadas usando arrays ou cada elemento da fila pode ser alocado dinamicamente através do uso de estruturas de dados e ponteiros As operações mais comuns com listas são Insere um elemento na posição atual insert Adiciona elemento ao fim da lista add Remove o elemento na posição atual delete Desloca para o próximo elemento na lista next Desloca para o elemento anterior na lista last 59 EXEMPLO 5 ENUNCIADO Pensando na implementação de listas usando arrays crie um Tipo Abstrato de Dados TAD chamado ListaVetor A base do seu TAD é uma estrutura de dados composta por um vetor de inteiros posição atual início e fim As seguintes operações precisam ser implementadas em seu TAD Insere um elemento na posição atual insert Adiciona elemento ao fim da lista add Remove o elemento na posição atual delete Desloca para o próximo elemento da lista next Desloca para o elemento anterior na lista last Retorna o elemento na posição atual Vai para o início da lista Esvazia lista Inicia lista 60 EXEMPLO 5 RESOLUÇÃO 116 Arquivo ListaVetorh Autor Alison ifndef LISTAVETORH define LISTAVETORH define MAXLISTA 50 typedef short boolean typedef struct livet int listaMAXLISTA int inicio int fim int atual ListaVetor 61 EXEMPLO 5 RESOLUÇÃO 216 void iniciaListaListaVetor endLista void inicioListaListaVetor endLista boolean proximoListaListaVetor endLista boolean anteriorListaListaVetor endLista boolean insereListaListaVetor endLista int item boolean insereFimListaListaVetor endLista int item int removeListaListaVetor endLista int itemAtualListaVetor lista int tamanhoListaListaVetor lista boolean listaVaziaListaVetor lista endif LISTAVETORH 62 EXEMPLO 5 RESOLUÇÃO 316 Arquivo ListaVetorc Autor Alison include ListaVetorh void iniciaListaListaVetor endLista endListainicio 0 endListafim 1 endListaatual 0 void inicioListaListaVetor endLista endListaatual endListainicio 63 EXEMPLO 5 RESOLUÇÃO 416 boolean proximoListaListaVetor endLista iflistaVaziaendListaendListaatualendListafim return 0 ifendListaatualMAXLISTA1 endListaatual 0 else endListaatual return 1 boolean anteriorListaListaVetor endLista iflistaVaziaendListaendListaatualendListainicio return 0 64 EXEMPLO 5 RESOLUÇÃO 516 ifendListaatual0 endListaatual MAXLISTA1 else endListaatual return 1 boolean insereListaListaVetor endLista int item iftamanhoListaendListaMAXLISTA return 0 int aux i ifendListaatual endListainicio aux endListalistaendListainicio 65 EXEMPLO 5 RESOLUÇÃO 616 foriendListainicio1 iendListaatual i endListalistai1 endListalistai ifendListainicio0 endListainicio MAXLISTA1 else endListainicio endListalistaendListainicioaux endListaatual else endListafim foriendListafim iendListaatual i endListalistai endListalistai1 endListalistaendListaatualitem 66 EXEMPLO 5 RESOLUÇÃO 716 return 1 boolean insereFimListaListaVetor endLista int item iftamanhoListaendListaMAXLISTA return 0 int novoFim endListafim1 ifnovoFimMAXLISTA novoFim0 endListafim novoFim endListalistanovoFimitem return 1 67 EXEMPLO 5 RESOLUÇÃO 816 int removeListaListaVetor endLista iflistaVaziaendLista return 0 int i aux endListalistaendListaatual ifendListainicioendListafim iniciaListaendLista else ifendListaatual endListainicio foriendListaatual i endListainicio i endListalistai endListalistai1 endListainicio 68 EXEMPLO 5 RESOLUÇÃO 916 else foriendListaatual i endListafim i endListalistai endListalistai1 endListafim return aux int itemAtualListaVetor lista return listalistalistaatual 69 EXEMPLO 5 RESOLUÇÃO 1016 int tamanhoListaListaVetor lista iflistaVazialista return 0 iflistafimlistainicio return listafimlistainicio1 return MAXLISTA listainiciolistafim 1 boolean listaVaziaListaVetor lista iflistafim 0 return 1 return 0 70 EXEMPLO 5 RESOLUÇÃO 1116 Arquivo aed2aula3exp3c Autor Alison include stdioh include ListaVetorh void mostraListaListaVetor lista inicioListalista do printf6d itemAtuallista whileproximoListalista 71 EXEMPLO 5 RESOLUÇÃO 1216 int main int elemento ListaVetor lista char op boolean flag iniciaListalista do ifop getchar printfLista de Inteiros printfPróximo Anterior Insere Remove Sair Opção opgetchar 72 EXEMPLO 5 RESOLUÇÃO 1316 ifoppopP flag 0 ifproximoListalista printfElemento atual d itemAtuallista else iflistaVazialista printfLista vazia else printfFim da lista flag 1 else ifopaopA flag 0 73 EXEMPLO 5 RESOLUÇÃO 1416 ifanteriorListalista printfElemento atual d itemAtuallista else iflistaVazialista printfLista vazia else printfInício da lista else ifopiopI printfDigite o elemento scanfd elemento ifflag flag insereFimListalista elemento proximoListalista 74 EXEMPLO 5 RESOLUÇÃO 1516 else flag insereListalista elemento ifflag printfd inserido elemento else printfFalha ao inserir flag 0 else ifopropR iflistaVazialista printfLista vazia else printfd removido removeListalista 75 EXEMPLO 5 RESOLUÇÃO 1616 ifopsopS iflistaVazialista printfLista Vazia else printfLista mostraListalista whileopsopS 76 LISTAS ENCADEADAS SIMPLES 77 3 próximo nulo atual A implementação de listas encadeadas simples pode ser realizada através da manipulação do ponteiro apontado por atual início 3 próximo nulo 7 próximo Insere o próximo do novo nó é o nó apontado pelo ponteiro em atual O ponteiro em atual passa a apontar para o novo nó Remove o ponteiro em atual passa a apontar para o próximo do nó apontado anteriormente por ele 3 próximo nulo 7 próximo atual início atual início Próximo atual foi deslocado para o próximo ponteiro para nó EXEMPLO 6 ENUNCIADO O Tipo Abstrato de Dados TAD Lista que acompanha estas notas de aula utiliza esta abordagem para implementar listas encadeadas simples Assim construa uma aplicação que use este TAD para construir uma lista de valores inteiros A sua aplicação deverá permitir que o usuário Insira um inteiro em ordem crescente Remova a primeira ocorrência de um inteiro escolhido Visualize o tamanho da lista e sua estrutura 78 EXEMPLO 6 RESOLUÇÃO 115 Arquivo Listah Autor Alison Zille Lopes ifndef LISTAH define LISTAH ifndef PILHAH ifndef FILAH typedef struct no void item struct no proximo No typedef No EndNo typedef short boolean endif endif 79 EXEMPLO 6 RESOLUÇÃO 215 typedef struct lista unsigned int tamanho EndNo inicio EndNo atual Lista Lista criaLista Lista iniciaListaLista endLista boolean insereNaListaLista endLista void item void removeDaListaLista endLista void resetaAtualLista endLista boolean proximoListaLista endLista void atualListaLista lista boolean listaVaziaLista lista unsigned int tamanhoListaLista lista void apagaListaLista endLista endif LISTAH 80 EXEMPLO 6 RESOLUÇÃO 315 Arquivo Listac Autor Alison Zille Lopes include Listah include stdlibh Lista criaLista Lista novaLista mallocsizeofLista iniciaListanovaLista Lista iniciaListaLista endLista endListainicio NULL endListaatual endListainicio endListatamanho 0 81 EXEMPLO 6 RESOLUÇÃO 415 boolean insereNaListaLista endLista void item EndNo elemento mallocsizeofNo ifelementoNULL return 0 elementoitem item elementoproximo endListaatual endListaatual elemento endListatamanho return 1 void removeDaListaLista endLista ifendListainicio NULL return NULL 82 EXEMPLO 6 RESOLUÇÃO 515 else EndNo elemento endListaatual ifelemento NULL return NULL void item elementoitem endListaatual elementoproximo freeelemento endListatamanho return item void resetaAtualLista endLista endListaatual endListainicio 83 EXEMPLO 6 RESOLUÇÃO 615 boolean proximoListaLista endLista ifendListaatualNULL endListaatual endListaatualproximo return 1 return 0 void atualListaLista lista iflistaatualNULL return listaatualitem return NULL 84 EXEMPLO 6 RESOLUÇÃO 715 boolean listaVaziaLista lista iflistainicio NULL return 1 return 0 unsigned int tamanhoListaLista lista return listatamanho void apagaListaLista endLista void aux resetaAtualendLista 85 EXEMPLO 6 RESOLUÇÃO 815 whileaux removeDaListaendListaNULL freeaux 86 EXEMPLO 6 RESOLUÇÃO 915 Arquivo aed2aula3exp6c Autor Alison Zille Lopes include Listah include stdioh include stdlibh void imprimeListaIntLista lista int aux iflistaVazialista printfLista vazia else resetaAtuallista putchar 87 EXEMPLO 6 RESOLUÇÃO 1015 while1 aux atualListalista ifauxNULL break printfd aux proximoListalista printfbb boolean insereCrescenteLista endLista int numero int pnumero mallocsizeofint ifpnumeroNULL return 0 88 EXEMPLO 6 RESOLUÇÃO 1115 pnumero numero resetaAtualendLista iflistaVaziaendLista do ifatualListaendListaNULL ifnumero int atualListaendLista break whileproximoListaendLista ifinsereNaListaendLista pnumero return 1 freepnumero 89 EXEMPLO 6 RESOLUÇÃO 1215 return 0 boolean removeItemListaLista endLista int numero resetaAtualendLista iflistaVaziaendLista return 0 else int pnumero do pnumero atualListaendLista ifpnumeroNULL return 0 90 EXEMPLO 6 RESOLUÇÃO 1315 else ifnumero pnumero break whileproximoListaendLista freeremoveDaListaendLista return 1 int main int numero op Lista minhaLista iniciaListaminhaLista do printfLista 91 EXEMPLO 6 RESOLUÇÃO 1415 printf1Inserir 2Remover 3Exibir 4Sair Opção scanfd op switchop case 1 printfDigite um número scanfd numero ifinsereCrescenteminhaLista numero printfNúmero inserido com sucesso else printfErro ao tentar inserir break case 2 printfDigite um número scanfd numero 92 EXEMPLO 6 RESOLUÇÃO 1515 ifremoveItemListaminhaListanumero printfd removido com sucesso numero else printfd não encontrado numero break case 3 printf Lista Tamanho u Estrutura tamanhoListaminhaLista imprimeListaIntminhaLista whileop4 apagaListaminhaLista return EXITSUCCESS 93