数据结构课堂作业,要求建立顺序表,并输出顺序表和表长,实现插入和删除元素,合并两个顺序表并使之按非递减顺序排列,下面是我编的程序,编译总是出错。
#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;
}
小程序出错,关于顺序表的
- 写回答
- 好问题 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文件