array – Atividade Listas em C

Recebi a seguinte atividade no tópico de Listas em contiguidade fisica:

“Complete os atributos da estrutura lista_contatos no arquivo
lista_contatos.h. Crie um arquivo lista_contatos.c e
implemente as funções inicializar, inserir, print_lista e
destruir, sem modificar a interface (as funções definidas em
lista_contatos.h).

Após isso, modifique a função inserir para que, ao invés de falhar quando não
tiver espaço, proceda da seguinte forma:
● Alocar um vetor de itens com capacidade de 150% da atual;
● Atualizar a nova capacidade;
● Copiar os itens do vetor antigo para o novo vetor e usar o novo
a partir daí;
● Liberar o vetor antigo;
● Inserir o novo item normalmente.
Fique à vontade para adicionar novas funções se achar necessário,
porém, não mude os arquivos .h”

Minha duvida fica em o que eu devo utilizar para implementar essas funções solicitadas(como estamos aprendendo listas em contiguidade fisica, acredito que seja algo assim, mas não sei como), e de que maneira eu consigo fazer isso, visto que, eu não devo mudar a interface.

Vou colocar aqui todos os codigos que vieram da atividade:

//lista_contatos.h//
#ifndef LISTA_H
#define LISTA_H

#include "contato.h"

typedef struct lista_contatos {
//CompleteAqui//
} lista_contatos;

/** Inicializa uma lista vazia de contatos  */
void inicializar(lista_contatos *l, int capacidade);

/** Destroi a lista de contatos, liberando o espaço ocupado */
void destruir(lista_contatos *l);

/** Mostra na tela a lista de contatos */
void print_lista(lista_contatos* l);

/**
* Adiciona um elemento na lista de contatos. Retorna 1 se
* a insercao foi bem sucedida e 0 caso contrario
*/
int inserir(lista_contatos *l, contato novo);

#endif // LISTA_H

e

//contato.h//
#ifndef CONTATO_H
#define CONTATO_H

typedef struct contato {
char nome(140);
char telefone(20);
int ano, mes, dia;
} contato;

#endif // CONTATO_H

e finalmente o main:

#include <stdio.h>
#include <stdlib.h>

#include "contato.h"
#include "lista_contatos.h"

int main()
{
lista_contatos amigos;
inicializar(&amigos, 3);

contato a = {"neil tyson", "+1(699)193265", 1958,10,5};
contato b = {"serena williams", "+1(369)654963", 1981,9,26};
contato c = {"edson nascimento", "+55 (11) 35693696", 1940,10,23};
contato d = {"miguel sapateiro", "+49 (0151) 9876589", 1969,1,3};

inserir(&amigos, a);
inserir(&amigos, b);
inserir(&amigos, c);
inserir(&amigos, d);

print_lista(&amigos);

destruir(&amigos);

return 0;
}