Logo Passei Direto
Material
Study with thousands of resources!

Text Material Preview

ESTRUTURA DE DADOS 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Prezado (a) aluno (a), 
É comum em nosso dia a dia, elaborarmos listas relacionando alguns 
itens, seja no intuito de auxiliar nas atividades diárias ou quando vamos realizar 
compras em um supermercado. Na área de estruturas de dados, as listas 
auxiliam na automatização de processos do mundo real, conforme a 
necessidade ou intuito de cada situação, sem deixar de atender as 
características que determinam os requisitos de sua manipulação. 
Esta aula é voltada ao ensino do Tipo Abstrato de Dados, popularmente 
conhecido como TAD, neste caso, voltado ao tipo lista, além disso, você vai 
aprender a descrever e a construir listas estáticas. 
 
Bons estudos! 
 
 
 
 
 
 
 
 
 
 
 
 
AULA 04 - TIPO DE 
LISTAS 
 
 
 
4 TIPO ABSTRATO DE DADOS DO TIPO LISTA 
Um Tipo Abstrato de Dado (TAD) é uma construção que permite definir um novo 
tipo de dado baseado nos tipos primitivos oferecidos pelas linguagens de 
programação, como int, float, char, entre outros. Com um TAD, é possível criar 
estruturas que agregam elementos de diferentes tipos e tratá-los de forma conjunta 
(CELES; CERQUEIRA; RANGEL, 2016). 
Por exemplo, em linguagem C, podemos criar uma estrutura de TAD utilizando 
a instrução struct, como a estrutura Aluno apresentada a seguir: 
 
A estrutura acima é composta por três elementos distintos: nome, representado 
como uma cadeia de caracteres; nota, como um número real; e turma, como um 
número inteiro. Com essa estrutura, é possível manipular individualmente ou em 
conjunto os elementos que a compõem, como apresentado abaixo. 
 
Conforme Edelweiss e Galante (2009), uma lista é uma coleção de dados que 
são organizados em ordem linear. Cada elemento da lista é chamado de nó e pode 
conter informações de um único tipo de dado primitivo ou até mesmo de um tipo 
composto de dado, como um TAD. Os elementos contidos em uma lista são 
organizados de forma sequencial, ocupando posições consecutivas, e não há 
elementos nulos na estrutura. Quando um elemento é inserido ou removido da lista, 
os demais elementos são deslocados para acomodar as alterações e manter a ordem 
correta (MATTOS; LORENZI; CARVALHO, 2007). Na Figura 1, ilustra-se como ocorre 
a inclusão e a exclusão de um elemento na lista. 
 
 
 
 
Figura 1 - Inclusão e exclusão de item na lista 
 
Fonte: Vetorazzo, 2018. 
Na Figura 1, ao adicionar o elemento "i" entre as posições 2 e 3, os elementos 
nas posições 3 e 4 são deslocados para a direita, tornando-se as posições 4 e 5, 
respectivamente. Já na exclusão do elemento da posição 3, os elementos nas 
posições 4 e 5 são deslocados para a esquerda, tornando-se as posições 3 e 4, 
respectivamente. 
Conforme Vetorazzo (2018), uma lista estática do tipo TAD é caracterizada por 
ter uma quantidade fixa de itens, geralmente implementada através de um arranjo de 
elementos de uma estrutura abstrata. Ao ser criada, é definido um tamanho máximo 
para a lista, tornando-a estática. 
Nesse contexto, Forbellone (2005) pontua a importância de considerar as 
vantagens, desvantagens e casos indicados para o uso de listas estáticas: 
• Vantagens: estas listas permitem acesso direto aos elementos do 𝑎𝑟𝑟𝑎𝑦 
através de índices e garantem um tempo de acesso constante, 
independentemente da quantidade de itens na lista. 
• Desvantagens: a principal desvantagem destas listas é o custo de 
processamento para realizar as inserções e as exclusões, pois é necessário 
reposicionar os elementos da lista. Além disso, o tamanho máximo da lista é 
predefinido no momento de sua criação, o que pode limitar sua capacidade de 
armazenamento. 
• Indicação: este tipo de lista é direcionado às listas pequenas, quando 
precisamos limitar seu tamanho máximo, e sempre que for possível que o 
processo de inclusão e exclusão de itens seja feito preferencialmente na última 
posição. 
 
 
Uma lista estática do tipo TAD pode ser composta por dois elementos. O 
primeiro elemento é chamado de dado e representa um arranjo da estrutura desejada, 
como por exemplo, dado[MAX] , que contém informações como nome, nota e turma 
de cada aluno. O segundo elemento denominado n, é um contador que armazena o 
total de itens presentes na lista durante a execução do programa. 
 
A Figura 2 a seguir, apresenta um exemplo de elementos TAD em uma lista 
estática. 
Figura 2 - Exemplo de elementos TAD em uma lista estática 
 
Fonte: Vetorazzo, 2018. 
Após definir e declarar a estrutura da lista como um arranjo e elementos do tipo 
TAD, é imprescindível desenvolver a sua interface de acesso, que consiste nas 
funções responsáveis por permitir a manipulação da lista. Essas funções possibilitam 
realizar operações como adicionar e remover itens, verificar se a lista está vazia ou 
cheia e imprimir os elementos, entre outras ações necessárias. 
4.1 Interface de uma lista estática 
Conforme Mattos, Lorenzi e Carvalho (2007), a lista estática apresenta uma 
importante característica que consiste na separação entre sua estrutura de dados e a 
implementação dos métodos que compõem sua interface de acesso. Isso permite que 
um programador utilize os métodos da lista sem necessariamente conhecer os 
detalhes de sua implementação. 
Não há uma definição fixa dos métodos de acesso de uma lista estática, pois 
 
 
eles podem ser definidos de acordo com as funcionalidades e necessidades 
específicas da aplicação que irá utilizá-la (CELES; CERQUEIRA; RANGEL, 2016). 
Existem algumas operações comuns que são amplamente conhecidas e utilizadas, 
tais como: 
• Inicializar uma lista vazia. 
• Verificar se a lista está sem elementos. 
• Verificar se a lista atingiu sua capacidade máxima. 
• Remover um item específico da lista. 
• Acessar um item em uma posição específica da lista. 
• Inserir um novo item em uma posição determinada da lista. 
• Inserir um novo item no final da lista. 
• Modificar um item existente na lista. 
• Obter o número total de itens presentes na lista. 
• Concatenar duas listas em uma única lista. 
• Imprimir todos os elementos contidos na lista. 
• Dividir a lista em duas ou mais partes separadas. 
• Classificar os itens da lista em ordem específica. 
• Inverter a ordem dos itens presentes na lista. 
Essas são apenas algumas das operações comumente implementadas em 
uma lista estática, mas é importante destacar que a escolha e implementação dos 
métodos podem variar de acordo com as necessidades e requisitos do projeto em 
questão. 
Uma lista estática é mais abrangente em comparação com filas e pilhas que 
você conheceu na aula 02, pois não possui uma ordem definida para a inserção ou 
remoção de elementos. Isso implica que os itens podem ser inseridos ou removidos 
de qualquer posição na lista, desde que seja uma posição sequencial e não contenha 
elementos nulos (EDELWEISS; GALANTE, 2009). 
Principais funções de acesso às listas estáticas 
Criação de uma lista vazia: uma lista pode ser criada ou inicializada quando 
o seu contador de elementos é definido como zero, se apresentando vazia e pronta 
 
 
para receber itens. O pseudocódigo a seguir ilustra essa função: 
 
Identificação de uma lista vazia: uma lista é considerada vazia, quando seu 
contador de elementos for zero. A seguir, o pseudocódigo apresenta o algoritmo desta 
função. 
 
Identificação de uma lista cheia: essa é uma das tarefas cruciais, pois não é 
permitido adicionar mais elementos a uma lista além do que o máximo estabelecido. 
Para avaliar essa condição, é necessário comprar o contador de itens da lista com o 
valor constante que define o número máximo de elementos, conforme é detalhado no 
algoritmo a seguir: 
 
Identificação do número de itens da lista: a quantidade de elementos em 
uma lista é representada pelo seu contador de elementos, que é modificado sempre 
que ocorre uma inserçãoou exclusão. O pseudocódigo a seguir descreve essa 
função. 
 
Inserção de item na lista: ao incluir um novo item à uma lista, é necessário 
seguir as seguintes regras: 
• Verificar se a lista está cheia. 
• Abrir um espaço para inserir o novo item e reorganizar os elementos para evitar 
 
 
posições vazias, a menos que o novo item seja inserido no final da lista. 
• Incrementar o contador de itens da lista. 
A função de inserção de um novo elemento em uma lista recebe três 
parâmetros: a lista em que o elemento será inserido, a posição em que ele será 
inserido e o valor a ser armazenado. 
 
Exclusão de item de uma posição da lista: da mesma forma que a inserção 
de itens, a exclusão de um item segue alguns critérios: 
• Verificar se a lista está vazia. 
• Fechar o espaço deixado pelo elemento excluído e reorganizar os demais itens, 
a menos que o item seja excluído do final da lista. 
• Decrementar o contador de itens da lista. 
A função de exclusão de um elemento de uma lista recebe dois parâmetros: a 
lista da qual o item será removido e a posição do item. 
 
 
 
 
Impressão dos elementos de uma lista: para imprimir os itens de uma lista, 
o algoritmo percorre todos os elementos do arranjo, começando do início até o 
contador de itens, que indica o número total de elementos da lista. 
 
4.2 Construção de listas estáticas 
Você terá acesso à implementação em linguagem C dos principais métodos de 
acesso da lista estática com base em um TAD, os quais foram previamente 
apresentados em pseudocódigo anteriormente. Essa implementação envolve a 
criação de três arquivos: lista.h, lista.c e hello.c. 
No arquivo lista.h, você encontrará o cabeçalho que contém os protótipos das 
funções e a definição da estrutura TAD da lista. A estrutura TAD representa os dados 
de um aluno e possui três atributos: nome, nota e turma. Essa estrutura será 
armazenada em um arranjo de cinco elementos, correspondendo aos itens da lista 
utilizada. Na demonstração a seguir, vemos que este arquivo define o número máximo 
de elementos da lista, o arranjo é responsável por armazenar os dados desses alunos 
em casa posição e os protótipos das funções de acesso a ela. 
 
 
 
 
 
No arquivo lista.c, está a implementação das funções que manipulam a lista. É 
um arquivo que requer a inclusão do arquivo lista.h o qual inclui os protótipos das 
funções, assim como sua estrutura de definição. 
 
 
 
 
No arquivo hello.c, você encontrará o método 𝑚𝑎𝑖𝑛, que declara uma lista TAD 
e utiliza as funções implementadas para realizar operações nessa lista. É um tipo de 
 
 
arquivo que apresente um módulo principal, pois nele é realizada a declaração do 
arranjo da estrutura TAD Aluno (apresentado a seguir), e as chamadas das funções 
de acesso à lista. É necessário realizar a inclusão do arquivo lista.c tanto para o 
acesso aos métodos da lista, como a sua estrutura. Mas, no teste de inclusão de 
elementos na lista, deve-se criar uma função que chamamos de instancia, que prepara 
os dados de entrada, utilizando como parâmetros as informações do aluno: nome, 
nota e turma. 
Na demonstração a seguir, é possível acompanhar a criação de uma lista de 
cinco posições com armazenamento da estrutura Aluno e a realização de algumas 
operações através dos métodos, entre eles, criar, inserção e remoção de elementos, 
verificar se a lista está cheia ou vazia, entre outros. 
 
 
 
 
Assim, os três arquivos trabalham juntos para criar e manipular uma lista 
estática baseada em um TAD de alunos. O resultado da execução desse programa é 
mostrado na Figura 3. Inicialmente, uma lista é criada e é verificado se ela está vazia 
e cheia (linhas 16 a 23). Em seguida, três alunos são adicionados à lista: Pedro, Ana 
e Maria, nessa ordem, e a relação de alunos é impressa (linhas 25 a 37). 
Posteriormente, o aluno Pedro é removido da primeira posição, e a lista é 
impressa novamente para ilustrar a exclusão (linhas 39 a 42). Em seguida, Paula é 
adicionada à primeira posição, Pedro à segunda posição e João à quinta posição. A 
lista é impressa novamente para exibir as alterações (linhas 44 a 58). 
Por fim, é verificado se a lista está cheia, e a quantidade de elementos 
presentes na lista é exibida (linhas 60 a 64). 
 
 
 
 
 
 
 
 
Figura 3 - Resultado da execução do programa de exemplo. 
 
Fonte: Vetorazzo, 2018. 
 
 
 
 
 
 
 
 
REFERÊNCIAS BIBLIOGRÁFICAS 
CELES, W.; CERQUEIRA, R.; RANGEL, J. L. Introdução a estrutura de dados: com 
técnicas de programação em C. 2. ed. Rio de Janeiro: Elsevier, 2016. 
EDELWEISS, N.; GALANTE, R. Estrutura de dados. Porto Alegre: Bookman, 2009. 
FORBELLONE, A. L. Lógica de programação: a construção de algoritmos e 
estruturas de dados. 3. ed. São Paulo: Pearson, 2005. 
LORENZI, F. MATTOS, P. N.; CARVALHO, T. P. Estruturas de dados. São Paulo: 
CENGAGE Learning, 2007. 
VETORAZZO, A. S. Listas. In.: VETORAZZO, A. S. et al. Estrutura de dados. Porto 
Alegre: SAGAH, 2018.