1.已知顺序表L递增有序,编写一个算法,将X插入到线性表的适当位置上,以保持线性表的有序性 用C语言

 我来答
司马刀剑
高粉答主

2019-09-09 · 每个回答都超有意思的
知道顶级答主
回答量:4.6万
采纳率:93%
帮助的人:7587万
展开全部
二路归并排序.下面这个算法是从网上找的. 1、算法基本思路  设两个有序的子文件(相当于输入堆)放在同一向量中相邻的位置上:R[low..m],R[m+1..high],先将它们合并到一个局部的暂存向量R1(相当于输出堆)中,待合并完成后将R1复制回R[low..high]中。 (1)合并过程  合并过程中,设置i,j和p三个指针,其
嘿嘿的想你
2019-09-10 · TA获得超过479个赞
知道小有建树答主
回答量:337
采纳率:0%
帮助的人:103万
展开全部
你代码排版风格和我差不多嘛,很清晰。我调试了一下你的代码,有点小错误,正确代码如下,你自己看后面的注释就知道你错在哪里了
#include
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;jlast;j++)
if(Xelem[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((iL->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;ilast;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

提交
取消

辅 助

模 式