Mewtwo_ 2018-11-02 01:15 采纳率: 100%
浏览 429
已采纳

一道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条回答

  • threenewbee 2018-11-02 01:46
    关注

    你的代码错误太多,主要是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;
    
    }
    
    

    图片说明

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误