I am studying data structure through the site: Uncomplicated C Language - Data Structure and in class 12 (3:52 min) the teacher develops the function that creates the list:
// Implementação das funções
lista* criarLista(){
lista* lde = (lista*) malloc(sizeof(lista));
if(lde != NULL)
*lde = NULL; // inicializa o ponteiro lde com NULL (conteúdo).
return lde;
}
The fact is that I did not understand the assignment made in *lde = NULL
, since the teacher comments that *lde
is the pointer to the head of the list and that head points to the next node that is NULL. So I expected something like *lde->prox = NULL
.
The teacher works with the modularization of TADs, and then divides the code between the public part - header (lde.h):
// Definição do tipo de dado a ser armazenado na lista
struct Aluno{
float n1,
n2,
n3,
n4;
int matricula;
char nome[50];
};
// Definição do ponteiro do tipo lista
typedef struct Elemento* lista;
/*Protótipos*/
// Funções básicas
lista* criarLista();
and the private part - implementation (lde.c):
#include<stdio.h>
#include<stdlib.h>
#include<conio2.h>
#include "LDE.h"
// Definição do tipo de dado "lista"
struct Elemento{
struct Aluno aluno;
struct Elemento *proximo; // Apontador para a próxima estrutura do tipo struct (porque os elementos são estruturas)
};
// Apelidando a lista para facilitar a manipulação
typedef struct Elemento elmt;
// Implementação das funções
lista* criarLista(){
lista* lde = (lista*) malloc(sizeof(lista));
if(lde != NULL)
*lde = NULL; // inicializa o ponteiro lde com NULL (conteúdo).
return lde;
}
and the client / application program (test.c):
#include<stdio.h>
#include<stdlib.h>
#include<conio2.h>
#include "LDE.h"
struct Aluno estudante;
int main(){
int opcao;
lista* lst = NULL;
lst = criarLista();
}