Dia 20 - Reimplementando lista circular duplamente encadeada

Matheus Gomes - Oct 19 - - Dev Community

Fiz alguns ajustes na versão incial da minha lista, agora ela atende os requisitos dispostos no material do professor Maziero. Ajustei para passar os testes, e também resolvi utilizar readaptar para C. A compilação juntamente com o arquivo de teste disponibilizado me pareceu menos problemática desse modo.

Revisitando o código dessa lista, precisei revisitar listas mais simples que vem antes da circular duplamente encadeada, assim consegui montar um raciocínio sólido na hora de codificar.

Lista duplamente encadeada

É uma estrutura na qual cada nó contém três partes: Valor, ponteiro para o próximo nó, e ponteiro para o nó anterior.

Permite navegação bidirecional, e para remover ou adicionar um nó, é necessário somente ajustar os ponteitos do nó anterior e do nó seguinte.

[head] <-> [nó1] <-> [nó2] <-> [tail]
Enter fullscreen mode Exit fullscreen mode

Lista circular

Pode ser simplesmente encadeada (sentido unilateral) ou duplamente encadeada (esse é o que estou usando para o projeto).
O último nó da lista está conectado ao primeiro, o que faz com que a lista não tenha um ponto de término natural.
A lista pode ser percorrida indefinidamente, pois ao chegar no final, ela retorna ao início.

Lista circular duplamente encadeada e sua relação com sistemas operacionais

Utilizar uma lista circular duplamente encadeada, faz com que o sistema operacional tenha caracterísica de escalonamento circular.

Dito isso, após o último processo ser executado, o sistema retorna ao primeiro e continua a execução.

Imaginando que um sistema operacional possui três processos:

[P1] <-> [P2] <-> [P3] <-> [P1] ...
Enter fullscreen mode Exit fullscreen mode

Após o P3 terminar seu tempo de execução, a lista voltará diretamente para P1, garantindo uma execução contínua.

O código atual do sistema operacional pode ser encontrado aqui.

resultados dos testes

. . . . . . . . . . . . . . . . . . . . . .