C/Traballar con listas encadeadas: Diferenzas entre revisións
Contido eliminado Contido engadido
Vou gardando, sigo tomando apuntes pero non sei se haberá máis. |
→Engadir bloques á lista: Ampliado cun programa base para engadir datos a unha lista encadeada |
||
Liña 33:
Para crear bloques para a lista, farase xeralmente un a un a través dunha función como a seguinte:
<source lang=c>
estrutura *
{
estrutura * punteiro;
Liña 46:
</source>
O programa que chamase
<source lang=c>
signed short int InserirUnDato(estrutura ** punteiro, signed int dato)
{
// Declaración de variables
estrutura * bloque = NULL;
estrutura * lista = NULL;
estrutura * anterior = NULL;
bloque = CrearUnBloque(); // Pídese espazo para un bloque novo. A función corresponderíase coa anterior.
if(bloque == NULL)
{
printf("Non se puido reservar espazo para un novo bloque.\n");
return -1;
}
lista = *punteiro; // Recíbese a lista en “lista”, o punteiro ao que apunta “punteiro”.
while(lista && lista->dato < dato) // Cómpre ter en conta que a lista sempre ten que estar ordenada.
{
anterior = lista; // Apúntase primeiro o bloque actual.
lista = lista->seguinte; // Avánzase ao seguinte bloque da lista.
}
if(anterior == NULL) // Se a lista está baleira...
{
bloque->dato = dato; // Métese o dato no bloque reservado para o mesmo.
bloque->seguinte = lista; // Só haberá un bloque, o punteiro ao seguinte bloque será “lista”, nulo.
*punteiro = bloque; // O punteiro á lista apunta ao bloque, dado que é o único da lista.
}
else
{
bloque->dato = dato; // Métese o dato no bloque reservado para o mesmo.
bloque->seguinte = lista; // Punteiro ao seguinte bloque, ou a nada se é o último bloque.
anterior->seguinte = bloque;
}
return 0; // Saída correcta da función.
}
</source>
Cómpre ter en conta que este é o programa base á hora de engadir novos datos a unha lista encadeada e, xa que logo, pode ser que o programador queira modificalo para personalizalo.
==Véxase tamén==
|