一道C++的题,好像是对应的数据类型不对,但是实在是想不到如何修改好这个程序

首先,这个程序的功能是实现顺序表的基本操作,代码如下:

 //顺序表的基本操作

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

#define OK   1
#define ERROR   0
#define OVERFLOW   -2
typedef  int  ElemType;
typedef  int  Status;

//----- 顺序表的顺序存储表示 -----
#define LIST_INIT_SIZE 100 // 存储空间的初始分配量
#define LISTINCREMENT 10 // 存储空间的分配增量
typedef struct {
    ElemType    *elem;  // 存储空间的基址
    int length; // 表长
    int size;// 存储容量
    int increment; // 扩容时,增加的存储容量
} SqList;  //顺序表 

// 构造一个顺序表 
Status InitSqlist(SqList &L){
    L.elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));
    if(!L.elem) exit (OVERFLOW);
    L.length = 0;
    L.size = LIST_INIT_SIZE;
    L.increment = LISTINCREMENT;
    return OK;
}
// 判顺序表是否为空表 
Status ListEmpty(SqList L){
    if (L.length==0) return OK;
    else return ERROR;
}
//顺序表插入函数
Status ListInsert_Sq(SqList &L,int i,int p,int q,int newbase,int increment,ElemType e){
  //请在此填写代码,将该算法补充完整
  //在顺序线性表L中第i个位置之前插入新的元素e,
  // i的合法值为1<=i<=ListLength.Sq(L)+1
  if (i<1||i>L.length+1)return ERROR;//i值不合法
  if(L.length>=L.size){ //当前存储空间已满,增加分配
  newbase=(ElemType *)realloc(L.elem,(L.size+increment)*sizeof(ElemType));
  if(!newbase)exit(OVERFLOW);//存储分配失败
  L.elem=newbase;//新基址
  L.size+=increment;//增加存储容量 
  } 
  q=&(L.elem[i-1]);//q为插入位置
  for(p=&(L.elem[L.length-1]);p>=q;--p)*(p+1)=*p;//插入位置及之后的元素右移
  *q=e;//插入e
  ++L.length;//表长增1
  return OK; 
}//ListInsert_Sq


//顺序表删除元素函数
Status ListDelete_Sq(SqList &L, int i,int p,int q,ElemType  &e){
   //请在此填写代码,将该算法补充完整
   //在顺序线性表L中删除第i个元素,并用e返回其值
   //i的合法值为1<=i<=ListLengt_Sq(L)
   if(i<1||(i>L.length))return ERROR;//i值不合法
   p=&(L.elem[i-1]);//p为被删除元素的位置
   e=*p;//被删除元素的值赋给e
   q=L.elem+L.length-1;//表尾元素的位置
   for(++p;p<=q;++p)*(p-1)=*p;//被删除元素之后的元素左移
   --L.length;
   return OK;
}//ListDe;ete_SQ

//输出顺序表函数
void OutList_Sq(SqList L)
{   int i;
    ElemType  e;
    if(ListEmpty(L)){
        printf("这是一个空表!");
    }
    else
    { 
     printf("顺序表为:");
     for(i=0;i<L.length;i++)
        printf("%6d",L.elem[i]);
    }
    printf("\n");
}
//主函数
int main()
{ SqList L;
    int cord,i; ElemType a;
    printf("第一次使用必须初始化!\n");
    do{
        printf("\n 主菜单 \n");
        printf(" 1 初始化顺序表 ");
        printf(" 2 插入一个元素 ");
        printf(" 3 删除一个元素 ");
        printf(" 4 结束程序运行 ");
        printf("\n-------------------------------------------------------------------\n");
        printf("请输入您的选择( 1, 2, 3, 4)");
        scanf("%d",&cord);
        printf("\n");
        switch(cord){
        case 1:
            InitSqlist(L);
            OutList_Sq(L);
            break;
        case 2:
            printf("\n请输入要插入的插入位置和数据元素(如:3 20)");
            scanf("%d%d",&i,&a);
            ListInsert_Sq(L,i,a);
            printf("\n插入%d元素之后的",a);
            OutList_Sq(L);
            break;
        case 3:
            printf("\n请输入要删除的数据元素的位置(如: 3)");
            scanf("%d",&i);
            ListDelete_Sq(L,i,a);
            printf("\n删除第%d个位置的元素之后",i);
            OutList_Sq(L);
            break;
        case 4:
            exit(0);
}
}while (cord<=4);
return 1;

}

然后这个是所有的报错信息,编译器是DEV-C++
图片说明

1个回答

你的代码错误太多,主要是int参数不能转换为指针
主程序的参数个数和函数也不同

不考虑运行,仅仅修改编译错误,如下:

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

#define OK   1
#define ERROR   0
#define OVERFLOW   -2
typedef  int  ElemType;
typedef  int  Status;

//----- 顺序表的顺序存储表示 -----
#define LIST_INIT_SIZE 100 // 存储空间的初始分配量
#define LISTINCREMENT 10 // 存储空间的分配增量
typedef struct {
    ElemType    *elem;  // 存储空间的基址
    int length; // 表长
    int size;// 存储容量
    int increment; // 扩容时,增加的存储容量
} SqList;  //顺序表 

// 构造一个顺序表 
Status InitSqlist(SqList &L){
    L.elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));
    if(!L.elem) exit (OVERFLOW);
    L.length = 0;
    L.size = LIST_INIT_SIZE;
    L.increment = LISTINCREMENT;
    return OK;
}
// 判顺序表是否为空表 
Status ListEmpty(SqList L){
    if (L.length==0) return OK;
    else return ERROR;
}
//顺序表插入函数
Status ListInsert_Sq(SqList &L,int i,ElemType * p,ElemType * q,ElemType * newbase,int increment,ElemType e){
  //请在此填写代码,将该算法补充完整
  //在顺序线性表L中第i个位置之前插入新的元素e,
  // i的合法值为1<=i<=ListLength.Sq(L)+1
  if (i<1||i>L.length+1)return ERROR;//i值不合法
  if(L.length>=L.size){ //当前存储空间已满,增加分配
  newbase=(ElemType *)realloc(L.elem,(L.size+increment)*sizeof(ElemType));
  if(!newbase)exit(OVERFLOW);//存储分配失败
  L.elem=newbase;//新基址
  L.size+=increment;//增加存储容量 
  } 
  q=&(L.elem[i-1]);//q为插入位置
  for(p=&(L.elem[L.length-1]);p>=q;--p)
      *(p+1)=*p;//插入位置及之后的元素右移
  *q=e;//插入e
  ++L.length;//表长增1
  return OK; 
}//ListInsert_Sq


//顺序表删除元素函数
Status ListDelete_Sq(SqList &L, int i,ElemType * p,ElemType * q,ElemType  &e){
   //请在此填写代码,将该算法补充完整
   //在顺序线性表L中删除第i个元素,并用e返回其值
   //i的合法值为1<=i<=ListLengt_Sq(L)
   if(i<1||(i>L.length))return ERROR;//i值不合法
   p=&(L.elem[i-1]);//p为被删除元素的位置
   e=*p;//被删除元素的值赋给e
   q=L.elem+L.length-1;//表尾元素的位置
   for(++p;p<=q;++p)*(p-1)=*p;//被删除元素之后的元素左移
   --L.length;
   return OK;
}//ListDe;ete_SQ

//输出顺序表函数
void OutList_Sq(SqList L)
{   int i;
    ElemType  e;
    if(ListEmpty(L)){
        printf("这是一个空表!");
    }
    else
    { 
     printf("顺序表为:");
     for(i=0;i<L.length;i++)
        printf("%6d",L.elem[i]);
    }
    printf("\n");
}
//主函数
int main()
{ SqList L;
    int cord,i; ElemType a;
    printf("第一次使用必须初始化!\n");
    do{
        printf("\n 主菜单 \n");
        printf(" 1 初始化顺序表 ");
        printf(" 2 插入一个元素 ");
        printf(" 3 删除一个元素 ");
        printf(" 4 结束程序运行 ");
        printf("\n-------------------------------------------------------------------\n");
        printf("请输入您的选择( 1, 2, 3, 4)");
        scanf("%d",&cord);
        printf("\n");
        switch(cord){
        case 1:
            InitSqlist(L);
            OutList_Sq(L);
            break;
        case 2:
            printf("\n请输入要插入的插入位置和数据元素(如:3 20)");
            scanf("%d%d",&i,&a);
            ElemType * p, *q, *newbase;
            int inc;
            ListInsert_Sq(L,i,p,q,newbase,inc,a);
            printf("\n插入%d元素之后的",a);
            OutList_Sq(L);
            break;
        case 3:
            printf("\n请输入要删除的数据元素的位置(如: 3)");
            scanf("%d",&i);
            ListDelete_Sq(L,i,p,q,a);
            printf("\n删除第%d个位置的元素之后",i);
            OutList_Sq(L);
            break;
        case 4:
            exit(0);
}
}while (cord<=4);
return 1;

}

图片说明

Mewtwo_
Mewtwo_ 感谢您的回答。
大约一年之前 回复
qq_23126581
渊渟无迹静涛君 赞赞赞!可以采纳
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问