Definição da estrutura
As estruturas C são um mecanismo da linguagem C que permite definir novos
tipos de dados. As variáveis definidas como tendo como tipo uma estrutura C
agregam um conjunto de membros ou campos de diferentes tipos. As estruturas C
são uma das duas categorias de tipos ditos tipos agregados do C, em
conjunto com os arrays. As estruturas C são muitas vezes essenciais para
criar estruturas de dados, mas não devem ser confundidas com estas. As
estruturas C são um mecanismo básico da linguagem C, enquanto as estruturas
de dados são formas de organização dos dados que transcendem a linguagem de
programação em particular em que estão implementadas.
As cadeias simplesmente ligadas são também conhecidas por listas
simplesmente ligadas, mas preferimos reservar a palavra «lista» para tipos
abstractos de dados (TAD), que podem ou não recorrer a cadeias simples ou
duplamente ligadas como forma de implementação. As cadeias simplesmente
ligadas consistem numa sequência de elos (ou nós), cada um deles
guardando dados como carga útil e contendo um ponteiro para o elo seguinte
na cadeia. Estas cadeias dizem-se simplesmente ligadas por cada um dos seus
elos ter informação apenas acerca do elo seguinte na cadeia. Quando os elos
contêm também um ponteiro para o elo anterior, dizem-se cadeias duplamente
ligadas.
No exemplo abaixo recorre-se directamente à manipulação da estrutura C
struct singly_linked_int_list_node, que nos permite implementar cadeias
simplesmente ligadas, mas é raro que as estruturas de dados sejam usadas
directamente no código cliente. As estruturas de dados são usadas sobretudo
como implementação de tipos abstractos de dados. O mesmo deveria acontecer
neste caso, mas optámos por deixar a estrutura de dados «nua» para se
perceber melhor como os elos se organizam e como se acede e manipula uma
cadeia simplesmente ligada.
O nome da estrutura C definida, struct singly_linked_int_list_node reflecte
os seguintes factos:
- Trata-se de uma estrutura C:
struct (esta palavra-chave faz parte do nome
da estrutura, mas não da sua etiqueta, que consiste apenas no
identificador singly_linked_int_list_node).
- Trata-se de um elo de uma cadeia:
list_node.
- Trata-se de um elo de uma cadeia:
list.
- Trata-se de um elo de uma cadeia simplesmente ligada:
singly_linked.
- Trata-se de um elo cuja carga útil é um
ìnt: int.
As variáveis pertencentes ao tipo struct singly_linked_int_list_node são
usualmente elos de cadeias simplesmente ligadas. Cada uma dessas variáveis
contém dois membros:
value – Um campo do tipo int correspondendo à carga útil do elo
em causa.
next_node – Um ponteiro para o elo seguinte da cadeia
simplesmente ligada a que o elo pertence.
Note que o campo next_node é definido recorrendo à própria estrutura C em
definição. Esta definição recursiva da estrutura C é perfeitamente legítima,
pois o campo está a ser definido como sendo um ponteiro para uma instância,
objecto ou variável do mesmo tipo.
struct singly_linked_int_list_node {
int value;
struct singly_linked_int_list_node *next_node;
};