qq_31780133 2015-10-05 10:30 采纳率: 0%
浏览 1709

小程序出错,关于顺序表的

数据结构课堂作业,要求建立顺序表,并输出顺序表和表长,实现插入和删除元素,合并两个顺序表并使之按非递减顺序排列,下面是我编的程序,编译总是出错。
#include
#include
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef int ElemType
typedef struct SqList{
ElemType elem;
int length;

int listsize;
}
int NewSqlist_Sq(SqList &L,int n)
{
int i;
L.elem=(ElemType
)malloc(LIST_INIT_SIZE*sizeof(ElemType));
L.listsize=LIST_INIT_SIZE;
L.length=n;
printf("请输入顺序表长度:");
scanf("%d",&n);
printf("请输入顺序表的元素:\n");
if(n>LIST_INIT_SIZE)
{L.elem=(ElemType*)realloc(L.elem,(n+LISTINCREMENT)*sizeof(ElemType));
if(!L.elem){exit(OVERFLOW);}
L.listsize=n+LISTINCREMENT;
}
for(i=0;i {
printf("\n");
scanf("%d",&L.elem[i]);
}
printf("顺序表构建成功!\n");
return 0;
}
void Printlist_Sq(SqList &L ,int n)
{int i;
for (i=0;i printf("输出顺序表:\n",L.elem[i]);}
printf("输出顺序表的长度:%d\n",L.length);
}
int ListInsert_Sq(SqList &L,int i,ElemType e)
{
int j;
if(iL.length+1)
return ERROR;
if(L.length>=LISTSIZE)
{
newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
L.elem=newbase;
L.listsize+=LISTINCREMENT;
}
for(j=L.length-1;j>=i-1;--j)
{
L.elem[j+1]=L.elem[j];
}
L.elem[i-1]=e;
++L.length;
return OK;
}

int ListDelete_Sq(SqList &L,int i,ElemType &e)
{
int j;
if(iL.length)
{
return ERROR;
}
if(ListEmpty(L))
{
printf("L为空表,不能执行删除操作!\n");
return ERROR;
}
e=L.elem[i-1];
for(j=i;j<=L.length-1;j++)
{
L.elem[j-1]=L.elem[j];
}
L.length--;
return OK;
}
int MergeList_Sq(SqList L,SqList Lb,SqList&Lc)
{int i,j,k;
SqList c;
InitList(Lc);
if(Lc.listsize<L.length+Lb.length)
{Lc.elem=(ElemType*)realloc(Lc.elem,(L.length+Lb.length+LISTINCREMENT)*sizeof(ElemType));
if(!L.elem)exit(OVERFLOW);
Lc.listsize=L.length+Lb.length+LISTINCREMENT;
}
i=j=k=0;
while(i<L.length && j<Lb.length)
{
if(*(L.elem+i) < (Lb.elem+j))
{
*(Lc.elem+k)=
(L.elem+i);
k++;i++;
}
else
{
(Lc.elem+k)=(Lb.elem+j);
k++;j++;
}
}
while(i<L.length)
{
(Lc.elem+k)=(L.elem+i);
k++;i++;
}
while(j<Lb.length)
{
(Lc.elem+k)=(Lb.elem+j);
k++;j++;
}
Lc.length=L.length+Lb.length;
L=Lc;
return OK;
}
int main()
{int op,flag,i;
SqList L,Lb;
NewSqList(L);
scanf("%d",&op);
while(op)
{switch(op){
case1:Printlist_Sq(L);
break;
case2:printf("请输入要插入的数据i:\n");
scanf("%d",&i);
flag=ListInsert(L,i);

if(flag)
printf("插入成功!!\n");
else
printf("插入失败!!\n");
break;
case3:printf("请输入要删除的位置i:\n");
scanf("%d",&i);
flag=ListDelete2(L,i-1);

if(flag)
printf("删除成功!!\n");
else
printf("元素不存在,删除失败!!\n");
break;
case4:printf("请输入Lb的内容:\n");
NewSqList(Lb);
flag=MergeList_Sq(L,Lb);
if(flag)
printf("合并成功!!\n\n");
break;
return 0;
}

  • 写回答

3条回答 默认 最新

  • threenewbee 2015-10-05 10:55
    关注

    错误太多了。OVERFLOW,这个,系统已经定义了,你再定义就重复了。
    typedef int ElemType后面缺少分号
    printf("输出顺序表:\n",L.elem[i]);},你的格式中根本没有变量,后面的参数输出到哪里?
    LISTSIZE,这个在哪里定义的。

    评论

报告相同问题?

悬赏问题

  • ¥15 关于#java#的问题,请各位专家解答!
  • ¥15 急matlab编程仿真二阶震荡系统
  • ¥20 TEC-9的数据通路实验
  • ¥15 ue5 .3之前好好的现在只要是激活关卡就会崩溃
  • ¥50 MATLAB实现圆柱体容器内球形颗粒堆积
  • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
  • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
  • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?
  • ¥30 求解达问题(有红包)
  • ¥15 请解包一个pak文件