初学数据结构,想问一下这个为什么无法运行?

#include<stdio.h>
#include<stdlib.h>
#define maxsize 50
#define true 0
#define false 1
typedef struct{
    int *data;
    int length;
}sqlist; 

bool init_list(sqlist &l){
    //l.data-new int[maxsize];
    l.data=(int*)malloc(maxsize*sizeof(int));
    if(!l.data){ 
       printf("系统分配空间失败!\n");
    return false;
    } 
    for(int i=0;i<=maxsize;i++)
       l.data[i]=0;
    l.length=0;
    printf("初始化成功!\n");
    return true;
}

bool creat_list(sqlist &l){
    printf("请输入顺序表长度:\n");
    scanf("%d",&l.length);
    if(l.length>maxsize)
      printf("数据长度超过存储长度!创建失败!\n");
      return false; 
    printf("请输入数据表元素:\n");
    for(int i=0;i<l.length;i++)
       scanf("%d",&l.data[i]);
    printf("顺序表创建成功!\n");
    return true;
}

bool list_insert(sqlist &l,int i,int e){     //在顺序表的第i个位置插入值为e的数 
    if(i<1||i>l.length+1)
       printf("插入位置违法!\n"); 
       return false;
    if(l.length>=maxsize)
       printf("静态顺序表已满!无法插入!\n");
       return false;
    for(int j=l.length-1;j>=i-1;j--)
       l.data[j+1]=l.data[j];
       l.data[i-1]=e;
       l.length++;
    printf("数据插入成功!\n");
    return true; 
}

bool list_delete(sqlist &l,int i,int e){    //删除顺序表的第i个位置的值,并将删除值以e返回 
    if(i<1||i>l.length)
      printf("删除位置不存在!\n"); 
      return false;
      e=l.data[i-1];
    for(int j=i-1;j<l.length;j--)
      l.data[j]=l.data[j+1];
      l.length--;
    printf("删除数据值:%d 成功!\n",e);
    return true; 
}

int Get_elem(sqlist l,int i){              //按位查找,返回第i个位置的值 
    if(i<1||i>l.length){
        printf("该位置不存在!");
        return 1;
    }
    return l.data[i-1];
}

int locate_elem(sqlist l, int e){         //按值查找,返回值为e的位置
    for(int i=0;i<l.length;i++){
        if(l.data[i]==e)
          return i+1;
    }
    return 0;
}

void menu_list(){
    printf("\t\t********************顺序表的创建********************\n");
    printf("\t\t||               a.顺序表的初始化                 ||\n");
    printf("\t\t||               b.顺序表的数据化                 ||\n");
    printf("\t\t||               c.顺序表的插入                   ||\n");
    printf("\t\t||               d.顺序表的删除                   ||\n");
    printf("\t\t||               e.顺序表的按位查找               ||\n");
    printf("\t\t||               f.顺序表的按值查找               ||\n");
    printf("\t\t||               g.退出程序                       ||\n"); 
}

char menuselect_list(){
    char cmd;
    printf("请输入你选择功能序号(a~g):\n");
    cmd=getchar();
    while(cmd>='a'&&cmd<='g');
    return cmd;
} 

int main(){
    sqlist l;
    int i,local,data;
    char cmd=0;
    menu_list();
    do{
        switch(menuselect_list()){
            case'a':printf("****************顺序表的初始化*****************\n");init_list(l);getchar();break;
            case'b':printf("****************数据表的数据化*****************\n");creat_list(l);getchar();break;
            case'c':printf("****************数据表的插入*****************\n");
                    printf("请输入想要插入的位置:%d",i);
                    scanf("%d\n",&i);
                    printf("请输入想要插入的值:%d",data);
                    list_insert(l,i,data);break;
            case'd':printf("****************数据的删除*******************\n");
                    printf("请输入想要删除的位置:%d",i);
                    scanf("%d\n",&i);
                    list_delete(l,i,data);break;
            case'e':printf("*****************数据的按位查找***************\n");
                    printf("请输入你想查找的位置:%d",i);
                    scanf("%d\n",&i);
                    Get_elem(l,i);break;
            case'f':printf("*****************数据的按值查找***************\n");
                    printf("请输入你想查找的值:%d",data);
                    scanf("%d\n",&data);
                    locate_elem(l,data);break;
            case'g':printf("********************谢谢使用******************\n");
                    cmd='g';break;
        }
    }while(cmd!='g');
}

图片说明

你是c语言还是 c++,这段代码用了c++的语法,用c无法编译,用c++可以编译。