C/Traballar con listas encadeadas: Diferenzas entre revisións
Contido eliminado Contido engadido
→Engadir bloques á lista: Ampliado cun programa base para engadir datos a unha lista encadeada |
→Engadir bloques á lista: Engadido código para borrar elementos e concepto “bloque” a concepto “elemento”. |
||
Liña 30:
De xeito que se poida acceder a todos os bloques da lista, pero non se poida modificar o valor do punteiro da lista, é dicir, o punteiro ao primeiro bloque.
===Engadir
Para crear
<source lang=c>
estrutura *
{
estrutura * punteiro;
Liña 46:
</source>
O programa que chamase á función debería controlar o valor que devolvese a función, e en caso de ser o punteiro nulo, actuar en consecuencia. Agora imaxinemos que a estrutura dos
<source lang=c>
signed short int InserirUnDato(estrutura ** punteiro, signed int dato)
{
// Declaración de variables
estrutura *
estrutura * lista = NULL;
estrutura * anterior = NULL;
if(
{
printf("Non se puido reservar espazo para un novo
return -1;
}
Liña 66:
while(lista && lista->dato < dato) // Cómpre ter en conta que a lista sempre ten que estar ordenada.
{
anterior = lista; // Apúntase primeiro o
lista = lista->seguinte; // Avánzase ao seguinte
}
if(anterior == NULL) // Se a lista está baleira...
{
*punteiro =
}
else
{
anterior->seguinte =
}
Liña 88:
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.
===Borrar elementos da lista===
Para borrar elementos da lista, utilizarase unha función como a seguinte (partindo do suposto anterior dunha estrutura con dato <code>signed int</code>):
<source lang=c>
signed short int BorrarUnDato(estrutura ** punteiro, signed int dato)
{
// Declaración de variables
estrutura * lista = NULL;
estrutura * anterior = NULL;
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 elemento actual.
lista = lista->seguinte; // Avánzase ao seguinte elemento da lista.
}
if(lista->dato == dato) // Se se atopou o dato a borrar...
{
if(anterior == NULL) // Se hai que borrar o primeiro elemento...
{
*punteiro = lista->seguinte;
free(lista);
}
else // En caso de ser calquera outro elemento...
{
anterior->seguinte = lista->seguinte;
free(lista);
}
}
else // Se non se atopou o dato...
{
printf("Non se atopou o dato na lista.\n");
return -1;
}
return 0; // Saída correcta da función.
}
</source>
==Véxase tamén==
|