Criar struct com ponteiro

Olá pessoal, tudo bem?
Estou querendo criar uma lista vazia utilizando ponteiros em Linguagem C, mas aparece erro, alguém conseguiria me ajudar?
#include <stdio.h>
#include <stdlib.h>
typedef struct{
char nome[30], ender[50];
int dia, mes, ano;
}PESSOA;

typedef struct{
PESSOA *pPessoa;
//PESSOA *pPessoa;
int qtdePessoas;
};

void criarListaVazia(LISTAPESSOA *listaP){
listaP → pPessoa = (Pessoa )malloc(10sizeof(PESSOA));
listaP → qtdePessoas = 0;
}

int main()
{

return 0;

}
Aparece mensagem de erro:
linha 14: error: unknown type name ‘LISTAPESSOA’

Você não criou nenhum struct chamado LISTAPESSOA.

Ok, consegui criar.

Eu fiz como, ficará a passagem de Parâmetro?
#include <stdio.h>
#include <stdlib.h>
typedef struct{
char nome[30], ender[50];
int dia, mes, ano;
}PESSOA;

typedef struct{
PESSOA *pPessoa;
int qtdePessoas;
}LISTAPESSOA;

void menu(){
printf(“=================================\n”);
printf(“\tCADASTRO DE PESSOAS\n”);
printf(“=================================\n”);
printf(“[ 1 ] - Inserir registro: “);
printf(”\n[ 2 ] - Exibir Lista”);
printf(“\n[ 3 ] - Buscar registro:”);
printf(“\n[ 4 ] - Eliminar registro”);
printf(“=================================\n”);
}

void criarListaVazia(LISTAPESSOA *listaP){
listaP → pPessoa = (PESSOA )malloc(10sizeof(PESSOA));
listaP → qtdePessoas = 0;
}

void inserirRegistro(PESSOA pessoa, LISTAPESSOA *listaP, int pos){
int i;
if(listaP ->qtdePessoas == 10){
return -1; //indicativo de lista cheia
}
if(pos > listaP → qtdePessoas){
return -2;
}
for(i = listaP->qtdePessoas+i;i>=pos;i–){
memcpy((listaP->pPessoa+i),(listaP->qtdePessoas+i-1),sizeof(PESSOA));
memcpy((listaP->pPessoa+pos),&pessoa,sizeof(PESSOA));
(listaP->qtdePessoas)++;
}
}

int removerRegistro(LISTAPESSOA *listaP, int pos){
int i;
if(listaP->qtdePessoas ==0){
return -1;
}
if(pos >= listaP->qtdePessoas){
return -2;
}
for(i = pos;iqtdePessoas-1;i++){
memcpy((listaP->pPessoa+i),(listaP->pPessoa+i+1),sizeof(PESSOA));
(listaP->qtdePessoas)–;
}
}

int buscarRegistro(char *nome, LISTAPESSOA listaP, PESSOA *pessoa){
int i = 0;
if(listaP.qtdePessoas == 0){
return -1; // indicativo de lista vazia
}
for(i = 0; i < listaP.qtdePessoas;i++){
if(!strcmp(nome,(listaP.pPessoa+i)->nome)){
pessoa = (listaP.pPessoa+i);
return i;
}
}
return -2; // indicativo de registro não encontrado
}

int main()
{
PESSOA pessoa;
PESSOA* pPessoa = &pessoa;

int opcao = 0;
char procuraNome[30];

while(opcao != 5){
    menu();
    scanf("%d", &opcao);
    int i = 0;
    switch(opcao){
        case 1:
            for(i = 0; i < 10; i++){
                printf("Informe o nome: ");
                scanf("%s", &pessoa.nome);
                printf("Informe o endereco: ");
                scanf("%s", &pessoa.ender);
                printf("Dia de nascimento: ");
                scanf("%d",&pessoa.dia);
                printf("Mes de nascimento: ");
                scanf("%d",&pessoa.mes);
                printf("Ano de nascimento: ");
                scanf("%d",&pessoa.ano);
            }
        inserirRegistro(pessoa, pessoa, i);
        //PESSOA pessoa, LISTAPESSOA *listaP, int pos
        break;
        case 2:

        break;
        case 3:
            printf("Informe o nome: ");
            scanf("%s",&procuraNome);
            //buscarRegistro(procuraNome, LISTAPESSOA listaP, PESSOA *pessoa);
        break;

    }
}

/*strcpy(pessoa.nome,"Joao");
strcpy(pessoa.ender, "Rua Absalao, Jaco e Jacu, 2999");
pessoa.dia = 5;
pessoa.mes = 11;
pessoa.ano = 1975;
printf("Nome: %s\tEndereco: %s\t - Data de Nascimento: %d / %d / %d ", pessoa.nome, pessoa.ender, pessoa.dia, pessoa.mes, pessoa.ano);*/

return 0;

}