程序纠错 已知顺序表L递增有序,编写一个算法,将X插入到线性表的适当位置上,以保证线性表的有序性。

程序如下:#include<stdio.h>typedefintElemType;#defineMAXSIZE100#defineOK1#defineERROR0//定义... 程序如下:
#include<stdio.h>
typedef int ElemType;
#define MAXSIZE 100
#define OK 1
#define ERROR 0
//定义线性表
typedef struct
{
ElemType elem[MAXSIZE];
int last;
}SeqList;
//创建空表
void Initlist(SeqList *L)
{
L->last=-1;
}

//输入递增有序顺序表
void putseqList(SeqList *L,int n)
{
int i;
for(i=0;i<n;i++)
scanf("%d",&(L->elem[i]));
L->last=L->last+n;
}
//求表长
int LenList(SeqList *L)
{
int Len;
Len=L->last+1;
return Len;
}
//判断插入位置
int PositionList(SeqList *L,int X)
{
int j;
for(j=0;j<=L->last;j++)
if(X<L->elem[j])
return j;
else return (L->last+1);

}
//插入元素
int InsList(SeqList *L,int i,int e)
{
int k;
if((i<1)||(i>L->last+2))
{
printf("插入位置不合理");
return(ERROR);
}
if(L->last>=MAXSIZE-1)
{
printf("表已满无法插入");
return(ERROR);
}
for(k=L->last;k>=i-1;k--)
L->elem[k+1]=L->elem[k];
L->elem[i-1]=e;
L->last++;
return(OK);
}
//输出元素
int OutputSeqList(SeqList *L)
{
int i;
for(i=0;i<=L->last;i++)
printf("%d",L->elem[i]);
return(L->elem[i]);
}
//主程序
void main()
{
int s,c;

SeqList L;
Initlist(&L);
printf("请输入顺序表长度: ");
scanf("%d",&s);
printf("请输入递增顺序表: ");
putseqList(&L,s);
LenList(&L);
printf("表长为%d\n",LenList(&L));
printf("请输入要插入的元素: ");
scanf("%d",&c);
InsList(&L,PositionList(&L,c),c);
OutputSeqList(&L);
printf("\n");
}
插入位置总是不对,求解
还有一种思路,把X放入另一个顺序表中,后合并两个顺序表,这样可不可以?
展开
 我来答
嘿嘿的想你
推荐于2017-09-07 · TA获得超过479个赞
知道小有建树答主
回答量:337
采纳率:0%
帮助的人:102万
展开全部
你代码排版风格和我差不多嘛,很清晰。我调试了一下你的代码,有点小错误,正确代码如下,你自己看后面的注释就知道你错在哪里了
#include<stdio.h>
typedef int ElemType;
#define MAXSIZE 100
#define OK 1
#define ERROR 0
//定义线性表
typedef struct
{
ElemType elem[MAXSIZE];
int last;
}SeqList;
//创建空表
void Initlist(SeqList *L)
{
L->last=-1;
}

//输入递增有序顺序表
void putseqList(SeqList *L,int n)
{
int i;
for(i=0;i<n;i++)
scanf("%d",&(L->elem[i]));
L->last=L->last+n;
}
//求表长
int LenList(SeqList *L)
{
int Len;
Len=L->last+1;
return Len;
}
//判断插入位置
int PositionList(SeqList *L,int X)
{
int j;
for(j=0;j<=L->last;j++)
if(X<L->elem[j]) //如果找到位置就返回地址,否则知道循环结束再返回最后一个地址
return j+1; //注意这里要加1,下标j表示第j+1个元素,所以返回j+1
return (L->last+1); //这里不能用else,否则就属于for循环里面的了

}
//插入元素
int InsList(SeqList *L,int i,int e)
{
int k;
if((i<1)||(i>L->last+2))
{
printf("插入位置不合理");
return(ERROR);
}
if(L->last>=MAXSIZE-1)
{
printf("表已满无法插入");
return(ERROR);
}
for(k=L->last;k>=i-1;k--)
L->elem[k+1]=L->elem[k];
L->elem[i-1]=e;
L->last++;
return(OK);
}
//输出元素
int OutputSeqList(SeqList *L)
{
int i;
for(i=0;i<=L->last;i++)
printf("%d,",L->elem[i]);
return(L->elem[i]);
}
//主程序
void main()
{
int s,c;

SeqList L;
Initlist(&L);
printf("请输入顺序表长度: ");
scanf("%d",&s);
printf("请输入递增顺序表: ");
putseqList(&L,s);
LenList(&L);
printf("表长为%d\n",LenList(&L));
printf("请输入要插入的元素: ");
scanf("%d",&c);
InsList(&L,PositionList(&L,c),c);
OutputSeqList(&L);
printf("\n");

}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式