(线性表)设顺序表A中的数据元素递增有序,试写一程序,将x插入到顺序表的适当位置上,使该表仍然有序。
[算法的基本思想]
建立顺序表,在表中从后往前查找要插入的元素的位置,直到找到第一个比X小的数,并从表的最后一元素依次后移,把插入元素插入查找位置
源代码:
#include<stdio.h>
#define LIST_INIT_SIZE 100
typedef int ElemType;
typedef struct{
ElemType elem[LIST_INIT_SIZE];
int next;
}SqList;
void Initlist(SqList *L){
L->next=-1;
}
void ReadList(SqList *L,int n){
int i;
for(i=0;i<n;i++)
scanf("%d",&(L->elem[i]));
L->next=L->next+n;
}
int LenList(SqList *L){
int Len;
Len=L->next+1;
return Len;
}
int PositionList(SqList *L,int X){
int j;
for(j=0;j<=L->next;j++)
if(X<L->elem[j])
return j+1;
return (L->next+1);
}
int InsList(SqList *L,int i,int e){
int k;
if((i<1)||(i>L->next+2)){
printf("The position is wrong!");
return(0);
}
if(L->next>=LIST_INIT_SIZE-1){
printf("The list is full!");
return(0);
}
for(k=L->next;k>=i-1;k--)
L->elem[k+1]=L->elem[k];
L->elem[i-1]=e;
L->next++;
return(1);
}
int WriteList(SqList *L){
int i;
for(i=0;i<=L->next;i++)
printf("%d,",L->elem[i]);
return(L->elem[i]);
}
int main(){
int s,c;
SqList L;
Initlist(&L);
printf("要输入多少个数:");
scanf("%d",&s);
printf("输入数字 :");
ReadList(&L,s);
LenList(&L);
printf("请输入要插入的数字:");
scanf("%d",&c);
printf("排列好的顺序:");
InsList(&L,PositionList(&L,c),c);
WriteList(&L);
printf("\n");
getchar();
}
结果执行如下: