C语言数据结构 顺序表 输入与输出

刚刚学了顺序表,想写写代码,一直显示有错!!求解答!

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define MAXSIZE 100 
#define ElemType int
void InitList(SeqList *L)  //初始化 
{
    L->elem=(ElemType *)malloc(sizeof(ElemType)*MAXSIZE);
    L->length=0;
}
typedef struct 
    {
        ElemType *elem;
        int length;
    }SeqList;

int main()
{
    SeqList *L;
    InitList(&L);
    int i;
    int n;
    scanf("顺序表长度:%d",&n);
    L->length=n;
    for(i=0;i<n;i++)
    {
        scanf("%d",L->elem);
    }
    for(i=0;i<L->length;i++)
    {
        printf("%d",L->elem[i]);
    }
    return 0;
 } 

总会报错:
C:\Users\asus\Desktop\c语言\顺序表.cpp [Error] cannot convert 'SeqList**' to 'SeqList*' for argument '1' to 'void InitList(SeqList*)'
求解答。

共有5处问题,见注释,供参考:

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define MAXSIZE 100
#define ElemType int

typedef struct   //表定义,要在函数定义之前  修改
{
    ElemType *elem;
    int length;
}SeqList;

void InitList(SeqList**L)  //修改
{
    (*L)=(SeqList*)malloc(sizeof(SeqList)); //修改 表指针 L 需初始化
    (*L)->elem=(ElemType *)malloc(sizeof(ElemType)*MAXSIZE);
    (*L)->length=0;
}
int main()
{
    SeqList *L;
    InitList(&L);
    int i;
    int n;
    //scanf("顺序表长度:%d",&n);//修改 ,需分开写下面两句
    printf("请输入顺序表长度:");
    scanf("%d", &n);
    L->length=n;
    for(i=0;i<n;i++)
    {
        scanf("%d",&L->elem[i]);
        //scanf("%d",L->elem);//修改
    }
    for(i=0;i<L->length;i++)
    {
        printf("%d ",L->elem[i]);
    }
    return 0;
 }

使用 InitList(&L); 需要函数定义为 void InitList(SeqList **L)