合并两顺序表(数据结构算法2.1)
(2012-07-24 23:34:20)
标签:
严蔚敏c语言算法实现it |
分类: 数据结构 |
任务:将b顺序表里的元素插入a顺序表里,a顺序表里元素最要是从小到大顺序排列的。
算法思路:1.建立两个空顺序表,在为两个表赋值。
若不包含则执行插入操作。
为了温习知识,自己编的代码:
#include "stdafx.h"
#define ElemType int
#define INIT_LIST_SIZE 50
#define NUM 100
#define SAMENUM 10
typedef struct list
{
ElemType *elem;
int length;
int listsize;
}SqList;
SqList c;
static int count=0;
void InitSize(SqList & L);
void FillList(SqList & L);
void PrintList(SqList L);
void Sort(SqList & L);
void Union(SqList & La,SqList Lb);
int Locate(SqList L,int m);
void InsertList(SqList & L,int m);
int _tmain(int argc, _TCHAR* argv[])
{
SqList a,b;
InitSize(a);
InitSize(b);
InitSize(c);
a.length=20;
b.length=10;
FillList(a);
FillList(b);
printf("please output the original array:\n");
printf("a:");
PrintList(a);
printf("b:");
PrintList(b);
Sort(a);
printf("\n the sorted list of a:\n");
PrintList(a);
Union(a,b);
c.length=count;
printf("the common data of a and b:\n");
PrintList(c);
printf("\nlength of a: %d\n",a.length);
printf("\nthe result:\n");
PrintList(a);
return 0;
}
void InitSize(SqList & L)
{
L.elem=(ElemType
*)malloc(INIT_LIST_SIZE*sizeof(ElemType));
if(!L.elem)
exit(1);
L.listsize=INIT_LIST_SIZE;
}
void FillList(SqList &L)
{
int i;
for(i=0;i<L.length;i++)
{
L.elem[i]=rand()%NUM+1;
}
}
void PrintList(SqList L)
{
int i;
for(i=0;i<L.length;i++)
printf("%d ",L.elem[i]);
}
void Sort(SqList & L)
{
int i,j;
for(i=0;i<L.length-1;i++)
for(j=i+1;j<L.length;j++)
{
int temp;
if(L.elem[i]>L.elem[j])
{
temp=L.elem[i];
L.elem[i]=L.elem[j];
L.elem[j]=temp;
}
}
}
void Union(SqList & La,SqList Lb)
{
int i;
int e;
for(i=0;i<Lb.length;i++)
{
e=Lb.elem[i];
if(!Locate(La,e))
{
InsertList(La,e);
La.length++;
}
}
}
int Locate(SqList L,int m)
{
int i;
for(i=0;i<L.length;i++)
{
if(L.elem[i]==m)
{
c.elem[count]=m;
count++;
return 1;
}
}
return 0;
}
void InsertList(SqList & L,int m)
{
int i,j;
for(i=0;i<L.length;i++)
{
if(m<=L.elem[i])
{
for(j=L.length-1;j>=i;j--)
{
L.elem[j+1]=L.elem[j];
}
L.elem[i]=m;
break;
}
}
}