想用间接寻址法实现表 来解决两链表排序问题,可是真的晕了,求各位大虾帮忙看我的程序啊!
#include<stdio.h>#include<malloc.h>
typedef struct indlist * List;
typedef struct indlist{
int n;
int maxsize;
int **table;
}Indlist;
List ListInit(int size) //创建空表
{
List L=(Indlist*)malloc(sizeof *L);
L->n=0;L->maxsize=size;
L->table=(int**)malloc(size*sizeof(int));
return L;
}
void ListInsert(int k,int x,List L) //表元素插入
{
int i;
for(i=L->n-1;i>=k;i--) L->table[i+1]=L->table[i];
L->table[k]=(int*)malloc(1*sizeof(int));
*L->table[k]=x;
L->n++;
}
void PrintList(List L) //输出
{
int i;
for(i=0;i<L->n;i++)
printf("%d",*L->table[i]);
}
void main()
{
int m,n,i,x;
int search(int,int,int,List);
scanf("%d %d",&n,&m);
List L=ListInit(n);
for(i=0;i<m;i++)
ListInsert(search(0,n,scanf("%d",&x),L),x,L);
PrintList(L);
}
int search(int a,int b,int x,List L) //二分法需找插入点
{
int t,c;
t=(a+b)/2;
if(x>*L->table[t]) c=search(t,b,x,L);
if(x<*L->table[t]) c=search(a,t,x,L);
else c=t;
return c;
}
第一行输入n和m,第二行输入n个从小到大的序列,第三行输入m个要插入的数,如
4 2
1 5 7 9
4 8
输出1 4 5 7 8 9