//顺序表:
#include<stdio.h>
#include<stdlib.h>
#define maxlength 20
#define listincreament 10
typedef struct {
int *elem;
int length;
int listsize;
}sqlist;
void T_creat(sqlist &l)
{
l.elem=(int*)malloc(maxlength*sizeof(int));
if(!l.elem)
exit(0);
printf("输入表的长度:\n");
scanf("%d",&l.length);
printf("输入数据元素:\n");
for(int i=0;i<l.length;i++)
scanf("%d",&l.elem[i]);
l.listsize=l.length;
}
void travel(sqlist &l)
{
int i;
for(i=0;i<l.length;i++)
printf("%5d",l.elem[i]);
printf("\n");
}
void locationelem(sqlist &l,int e)
{
int i,k;
int flag=1;
for(i=0;i<l.length&&flag;i++)
{
if(l.elem[i]==e)
{
k=i;
flag=0;
}
}
if(!flag)
printf("查找成功,该元素为数序表中第%d个数\n",k+1);
else
printf("查找失败\n");
}
void delete1(sqlist &l,int addr)
{
int i;
for(i=addr-1;i<l.length;i++)
l.elem[i]=l.elem[i+1];
l.listsize=l.length-1;
l.length=l.length-1;
}
void insert(sqlist &l,int a,int elem)
{
int i;
l.elem=(int*)realloc(l.elem,listincreament*sizeof(int));
l.listsize=maxlength+listincreament;
for(i=l.length;i>a-1;i--)
{
l.elem[i]=l.elem[i-1];
}
l.elem[a-1]=elem;
l.length+=1;
}
void merge(sqlist &la,sqlist &lb,sqlist &lc)
{
int i,j,k;
lc.elem=(int*)malloc((la.length+lb.length)*sizeof(int));
lc.listsize=la.length+lb.length;
lc.length=0;
i=j=k=0;
while(i<la.length&&j<lb.length){
if(la.elem[i]<lb.elem[j])
lc.elem[k++]=la.elem[i++];
else if(la.elem[i]>lb.elem[j])
lc.elem[k++]=lb.elem[j++];
else
{
lc.elem[k++]=la.elem[i];
i++;j++;
}
}
while(i<la.length)
lc.elem[k++]=la.elem[i++];
while(j<lb.length)
lc.elem[k++]=lb.elem[j++];
lc.length=k;
}
<pre name="code" class="cpp">int main()
{
sqlist L,la,lb,lc;
int m,n,s,r;
T_creat(L);
printf("输入要查找的数:\n");
scanf("%d",&m);
locationelem(L,m);
printf("输入要删除的数的位置:\n");
scanf("%d",&n);
delete1(L,n);
travel(L);
printf("输入要插入的位置及要插入的数:\n");
scanf("%d",&s);
scanf("%d",&r);
insert(L,s,r);
travel(L);*/
printf("请输入要合并的两表数据(递增有序):\n");
T_creat(la);
T_creat(lb);
printf("两表合并后为:\n");
merge(la,lb,lc);
travel(lc);
return 0;
}