刚学数构的小白,请教大神们,我按照以下要求敲的代码,有错不知道怎么改调试了好几天了 救救孩子吧!

  1. SqList的定义:
  2. 创建顺序表的算法:
  3. 数据元素的插入算法:
  4. 数据元素的删除算法:
  5. 两个有序表的归并算法:
  6. 数据元素的定位算法:

 

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

#define Status int
#define ElemType int

#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define LIST_INIT_SIZE 100        //线性表存储空间的初始分配量
#define LISTINCREMENT 10 //线性表存储空间的分配增量
#define MAXSIZE 100

typedef struct{
    ElemType *elem;  //存储空间基址
    int length;   //当前长度
    int listsize;  //当前分配的存储容量
    ElemType data[MAXSIZE];
}SqList;
//创建顺序表
Status InitList_sq(SqList &L)
{
    //初始化顺序表
    L.elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
    if(!L.elem)                    //存储分配失败
        exit(OVERFLOW);
    L.length=0;                    //初始长度0
    L.listsize=LIST_INIT_SIZE;    //初始容量
    return OK;
}
void CreateList(SqList &L,int n){
    int elem;
    for(int i=0;i<n;i++){
        scanf("%d",&elem);
        L.data[i]=elem;
        L.length++;
    }

}
//数据元素的插入
Status ListInsert_sq(SqList &L,int i,ElemType e)
{
    //插入记录到顺序表
    if(i<1 || i>L.length+1)
    {
        printf("输入的值不合法\n");
        return ERROR; //i的值不合法
    }
    if(L.length>=L.listsize) //增加分配
    {
        ElemType *newbase=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
        if(!newbase)  exit(OVERFLOW);        //存储分配失败
        L.elem=newbase;                    //新基址
        L.listsize+=LISTINCREMENT;        //增加存储容量
    }
    ElemType *q = &(L.elem[i-1]);                //q为插入位置
    for(ElemType *p=&(L.elem[L.length-1]);p>=q;--p) //p指向最后一个元素的位置
        *(p+1) = *p;                    //插入位置及之后的元素右移
    *q = e;                //插入e
    ++L.length;
    return OK;
}
void Insert(SqList &L) //插入
{
    char c;
    ElemType e;
    int i;
    do
    {    printf("请输入需要插入顺序表L中的整数:");
        scanf("%d",&e);
        do
        {
            i=L.length;
            printf("\n请输入要插入的位置(1 ~ %d):",i+1);
            scanf("%d",&i);
        }while(ListInsert_sq(L,i,e)==0);    //插入位置不正确
        printf("\n是否继续输入(按y继续)?");
        c=getche();
        putchar('\n');
    }while(c=='y');
}

//数据元素的删除
Status ListDelete_Sq(SqList &L,int i,ElemType &e){
    //在线性顺序表中删除第i个元素,并用e返回其值
    //i的合法值为1<=i=<ListLength_Sq(L)
    if ((i<1) || (i>L.length))
    {
        printf("输入不合法!!!");
        return ERROR;
    }
    ElemType *p = &(L.elem[i-1]);
    e = *p; //将被删除元素赋值给e
    ElemType *q = L.elem+L.length-1;  //表尾元素
    for(++p; p<= q; ++p)  //被删除元素之后的元素后移
        *(p-1) = *p;
    --L.length;  //表长减1
    return OK;
}

void Delete(SqList &L)
{
    //删除指定位置
    ElemType a;
    int i;
    printf("\n请输入删除位置(不合法则退出):");
    scanf("%d",&i);
    while(i>0)
    {
        if(ListDelete_Sq(L,i,a)!=0)    //如果成功删除
            printf("您删除了%d\n",a);
        printf("\n请输入正确的删除位置:");
        scanf("%d",&i);
    }
}
//数据元素的定位算法
void LocateElem_Sq(SqList L, ElemType e)
 {
    int i = 0;  
    ElemType *p;         
    p = L.elem;      
    while (i<= L.length-1 && (*p++)!=e)  i++;
    if (i<=L.length-1)  printf("元素%d的位置序号是%d\n",e,i+1);
    else  printf("元素%d不存在\n",e);
}

//两个有序表的归并
void Combination(SqList &L,SqList &L1,SqList &L2){
    int i=0,j=0,k=0;
    while((i!=L.length)&&(j!=L2.length)){
        if(L.data[i]>L1.data[j]){
            L2.data[k++]=L1.data[j++];
        }
        else{
            L2.data[k++]=L.data[i++];
        }
        L2.length++;
    }
    while(i<L.length)
    {
            L2.data[k++]=L.data[i++];
            L2.length++;
    }
    while(j<L1.length){
            L2.data[k++]=L1.data[j++];
            L2.length++;
    }
}
//输出顺序表L2
void display(SqList &L){
    for(int i=0;i<L.length;i++){
        printf("%d ",L.data[i]);
    }
    printf("\n");
}
int main()
{
    int n;
    int a;
    printf("请设置顺序表的元素个素:");
    scanf("%d",&n);
    SqList L,L1,L2;
     //自动初始化顺序表
    InitList_sq(L);       
    InitList_sq(L1);
    InitList_sq(L2); 
    //顺序表的创建
    printf("\n创建顺序表L(请输入元素)");
    CreateList(L,n);
    printf("\n创建顺序表L1(请输入元素)\n");
    CreateList(L1,n);
    printf("\n数据元素的插入");
    Insert(L);
    printf("数据元素的删除");
    Delete(L);
    printf("\n顺序表L与顺序表L1合并得L2\n");
    Combination(L,L1,L2);
    printf("输出顺序表L2\n");
    display(L2);
    printf("数据元素的定位\n");
    printf("请输入需要查找的元素:");
    scanf("%d",&a);
    LocateElem_Sq(L,a);
    return 0;
}

请列出你的输入, 以及出现了什么错误?