lista de inteiros

4
Estruturas de dados em C++ Lista de inteiros Por Robson Eduardo Uma lista é uma estrutura de dados que armazena o seu conteúdo de forma sequencial. Isto é, dada uma posição é possível que alí haja algum elemento. No presente trabalho mostramos a implementação de uma lista de inteiros para exemplificar a implementação desta importante estrutura de dados. A interface da lista Uma lista deve, assim como qualquer estrutura de dados, ser capaz de adicionar, remover e permitir a visualização de seus elementos pelo usuário. Assim criamos a interface pública da classe. O construtor cria uma lista vazia, as funções insere são capazes de adicionar um valor à lista em uma determinada posição, se omitida a posição, o elemento é adicionado ao final. A função retira faz a remoção do que se encontra em uma determinada posição e, por fim, a função imprime mostra todos os valores constantes na estrutura. Escolha da implementação Em C++, uma lista pode ser implementada de diversas maneiras. Provavelmente, a mais simples é lançando mão de um array de tamanho fixo para armazenar os seus elementos. Por achar esta forma mais fácil de ser implementada, ela foi escolhida. class Lista{ public: Lista(); void insere (int); void insere (int, int); int retira (int); int verifica (int); void imprime(); ... ... private: int elementos[100]; int ndElem; };

Upload: robson-eduardo

Post on 09-Jan-2017

25 views

Category:

Technology


0 download

TRANSCRIPT

Estruturas de dados em C++Lista de inteiros

Por Robson Eduardo

Uma lista é uma estrutura de dados que armazena o seu conteúdo de forma sequencial. Isto é, dadauma posição é possível que alí haja algum elemento.

No presente trabalho mostramos a implementação de uma lista de inteiros para exemplificar a implementação desta importante estrutura de dados.

A interface da lista

Uma lista deve, assim como qualquer estrutura de dados, ser capaz de adicionar, remover e permitir a visualização de seus elementos pelo usuário. Assim criamos a interface pública da classe. O construtor cria uma lista vazia, as funções insere são capazes de adicionar um valor à lista em uma determinada posição, se omitida a posição, o elemento é adicionado ao final. A função retira faz a remoção do que se encontra em uma determinada posição e, por fim, a função imprime mostra todos os valores constantes na estrutura.

Escolha da implementação

Em C++, uma lista pode ser implementada de diversas maneiras. Provavelmente, a mais simples é lançando mão de um array de tamanho fixo para armazenar os seus elementos. Por achar esta forma mais fácil de ser implementada, ela foi escolhida.

class Lista{public: Lista(); void insere (int); void insere (int, int); int retira (int); int verifica (int); void imprime();...

... private: int elementos[100]; int ndElem;};

Programa de teste

Para testar o funcionamento da classe, criamos um programa que utiliza as funções da estrutura de forma sistemática para verificarmos se seu funcionamento está dentro dos conformes.

Implementação dos métodos da classe

Construtor

A lista inicia sempre vazia. Não fizemos um construtor de cópias e nem destrutor, já que não utilizamos alocação dinâmica de memória ou apontadores. Como a lista deve ser povoada durante o uso, não nos interessa o seu conteúdo durante a construção. Ficamos com o seguinte código:

Função de inserção

Cada vez que um elemento for inserido na última posição da nossa lista, devemos verificar se a posição é válida, ora pode ser pedido que se adicione um elemento à uma posição que não está coberta pela lista no momento da inserção. Faremos duas funções distintas para inserção: a com

//testeLista.cpp#include "Lista.h"#include <iostream>using namespace std;

int main(){ Lista l;

l.insere(5); l.insere(3); l.insere(9); l.insere(7); l.insere(5);

l.imprime();

l.insere(2,2); l.retira(4); l.insere(4,4);

l.imprime();}

Lista::Lista(){ ndElem=0; }

posição definida e a com posição indefinida. É possível reunir estas duas funções em apenas uma utilizando um valor default para posição, no entanto, seria difícil distinguir uma chamada sem esteparâmetro de outra em que o parâmetro é informado e coincide com o default. Dessa forma, foi escolhido por duas implementações distintas.

Função de remoção

Se é necessário colocar novos elementos na lista, é, também, remover o que está nela. Para isso, usamos uma função que recebe uma posição e, se válida, remove o elemento daquela posição.

Função de exibição

Quando precisamos percorrer a lista verificando seus elementos, podemos usar a seguinte função.

void Lista::insere (int x){ if(ndElem>=100){ throw new exception(); } else{ elementos[ndElem]=x; ndElem++; } }

void Lista::insere (int x, int pos){ if(ndElem>=100 || pos<=0) throw new exception (); int i; for(i = ndElem; i>=pos; --i) elementos[i]=elementos[i-1]; elementos[i]=x; ndElem++; }

int Lista::verifica (int pos){ if(ndElem<pos || pos<=0) throw new exception (); return elementos[pos-1]; }

void Lista::imprime(){ for(int i=0; i<ndElem; ++i) cout << elementos[i] << ", "; cout << endl; }