Uma lista circular é uma estrutura de dados onde o último elemento aponta para o primeiro, formando um ciclo. Pode ser implementada dinamicamente ou staticamente e permite operações como inserção, remoção, busca e alteração de elementos com custo constante ou linear. Um exemplo prático é a opção de repetir músicas em players.
2. CONCEITO
“Numa lista circular, o último elemento tem como
próximo o primeiro elemento da lista, formando um
ciclo. A rigor, neste caso, não faz sentido falarmos em
primeiro ou último”.
(Celes, Cerqueira e Rangel, 2016, 2 ed.).
Fig. 1 – Arranjo de memoria de uma lista circular
(“Introdução a Estrutura de Dados”- Elsevier, 2016, 2 ed.)
3. IMPLEMENTAÇÃO
Implementação dinâmica:
struct lista{
int info;
struct lista* proximo;
};
typedef struct lista Listacircular;
Listacircular* inicio, fim;
Implementação estática:
#define TAM...
typedef char elem;
typedef struct lista Lista;
typedef struct bloco {
elem item;
int prox; }
no;
struct lista {
int ini, primeiro_vazio;
no itens[TAM];
int tam;
} ;
4. EXEMPLO DE OPERAÇÃO: INSERINDO EM UMA
LISTA VAZIA:
int ins_lista_circ_vazia(Lista lista, char dado){
Elemento novo_elemento;
if (( novo_elemento = (Elemento ) malloc (sizeof (Elemento)))
== NULL)
return -1;
if ((novo_elemento > dado = (char ) malloc (50 sizeof (char)))
== NULL)
return -1;
strcpy (novo_elemento > dado, dado);
novo_elemento > seguinte = novo_elemento;
liste > início = novo_elemento;
liste > fim = novo_elemento;
liste > tamanho++;
return 0;
}
5. APLICAÇÃO PRATICA
Uma boa aplicação da lista circular é a opção repetir em
players de música que reproduz todas as músicas
repetidamente.
Fig. 2 – Spotify AB
6. OPERAÇÕES
Numa lista circular é possível efetuar 4 principais
operações:
- Inserção;
- Remoção;
- Busca;
- Alteração.
7. BUSCA
A função busca é usada para localizar um dado
desejado na lista;
A busca tem um custo de tempo no melhor caso
constante O(k) e um pior caso da ordem O(n).
8. INSERÇÃO
Função que adiciona um elemento na lista;
Possui custo constante O(k) caso a lista seja
desordenada e não tenha a necessidade de
verificar dados repetidos;
Possui custo linear O(n) caso a lista seja ordenada,
pois é necessário identificar a posição da inserção.
9. REMOÇÃO
A remoção consiste na localização de um elemento
e exclusão da lista;
O custo de tempo da remoção no melhor caso é de
ordem constante O(k) e no pior caso é de ordem
linear O(n).
10. ALTERAÇÃO
Utilizado para modificar a informação contida no
elemento escolhido;
Seu custo segue o mesmo principio da remoção.
11. FONTES
Celes, W.; Cerqueira, R.; Rangel, J.;
Introdução a Estrutura de Dados, 2 ed. Rio de Janeiro: Elsevier,
2016.
Cox, Kenia.
Slides: “Listas Lineares” Aracaju, Sergipe, 2017.
Tenenbaum, Aaron; Langsam, Yebdyah; Augustiin, Moshe J.
Estruturas de Dados Usando C. Prertice hall: 1995. 884p.
Listas Circulares (Ring Buffer). Disponível em: <
http://br.ccm.net/faq/10226-listas-circulares-ring-buffer >.