Υλοποίηση σε C
- Οι δείκτες υλοποιούνται με τη χρήση δεικτών της C.
- Τα στοιχεία ομαδοποιούνται με τους δείκτες ως μια εγγραφή:
/* List of integers */
struct s_list {
int val; /* Integer value */
struct s_list *next;
};
- Το τέλος της λίστας συμβολίζεται με την ειδική τιμή δείκτη της
C
NULL.
- Μνήμη για κάθε στοιχείο αποκτούμε με τη χρήση της διαδικασίας
malloc.
- Αν ο δείκτης head δείχνει την αρχή μιας λίστας μπορούμε να
προσθέσουμε ένα στοιχείο στη λίστα με τον παρακάτω κώδικα:
struct s_list *head, *p;
p = (struct s_list *)malloc(sizeof(struct s_list));
p->next = head;
/* Set other members of p */
head = p;
- Για να διασχίσουμε μια λίστα ο παρακάτω κώδικας είναι τυπικός:
for (p = head; p; p = p->next)
/* Process element p */
- Για να διαγράψουμε τα στοιχεία μιας λίστας πρέπει να προσέξουμε
να μη χρησιμοποιήσουμε δεδομένα από στοιχεία που έχουμε ελευθερώσει.
Λάθος:
free(p);
p = p->next;
Σωστό:
tmp = p->next;
free(p);
p = tmp;
Παράδειγμα (διαβάζει ακέραιους σε λίστα και τους τυπώνει με
την ανάποδη σειρά):
#include <stdlib.h>
#include <stdio.h>
/* List of integers */
struct s_list {
int val; /* Integer value */
struct s_list *next;
};
main()
{
struct s_list *head, *p;
int n;
head = NULL;
/* Read list elements */
while (scanf("%d", &n) == 1) {
p = (struct s_list *)malloc(sizeof(struct s_list));
p->val = n;
p->next = head;
head = p;
}
printf("\nStarting output:\n");
/* Print list elements */
for (p = head; p; p = p->next)
printf("%d\n", p->val);
}