Problem Description
Input
Output
Example Input
3 3 1 2 4 0 0
Example Output
1 2 3 4
Hint
Author
HDOJ
代码:
#include <stdio.h>
#include <stdlib.h>
//线性表的应用
#define INIT_LIST_SIZE 1000000
#define listincrement 1000 //本题需要使用插入函数,所以要加上线性表的增量
typedef int element ;
typedef struct
{
element *elem;
int length;
int listsize;
} Sqlist;
int Initlist(Sqlist *L)
{
L->elem=(element*)malloc( INIT_LIST_SIZE*sizeof(element));
if(!L->elem) return -1;
L->length=0;
L->listsize= INIT_LIST_SIZE;
return 0;
}
void creat(Sqlist *L,int n)
{
int i;
for(i=0; i<n; i++)
scanf("%d",&L->elem[i]);
L->length=n;
}
int Insertlist(Sqlist *L,int i,int key) //插入函数
{
int j;
if(i<0||i>L->length-1) return -2;
if(L->length>=L->listsize) //所需空间的长度是大于线性表的初始分配量
L->elem=(element*)realloc(L->elem,(INIT_LIST_SIZE+listincrement)*sizeof(element)); //扩增内存,使用realloc函数,不要忘记realloc的格式
if(!L->elem)
return -1;
L->listsize=L->listsize+listincrement;
for(j=L->length-1; j>=i; j--) //从最后一个元素往后移
{
L->elem[j+1]=L->elem[j];
}
L->elem[j+1]=key; //插入元素
L->length++;
return 0;
}
void find(Sqlist *L,int key) //查找元素的插入位置
{
int i;int flag=0;
for(i=0; i<L->length; i++)
{
if(L->elem[i]>=key)
{
flag=1;
Insertlist(L,i,key);
break;
}
}
if(flag==0) //************忘记考虑,当给的元素大于数列的最后一个元素时,直接插入;
{
L->elem[L->length]=key;
L->length++;
}
}
void print(Sqlist *L)
{
int i;
for(i=0; i<L->length-1; i++)
printf("%d ",L->elem[i]);
printf("%d\n",L->elem[L->length-1]);
}
int main()
{
Sqlist L;
int n,m;
while(scanf("%d %d",&n,&m)&&(n||m))
{
Initlist(&L);
creat(&L,n);
find(&L,m);
print(&L);
}
return 0;
}