C语言中两个有序数集合的组合

拿你的例子来写,可以修改的更笼统一些。

该算法的核心代码是:

int I = j = k = 0;

//循环比较,将小的插入C数组。

while ( i 3 j 3) {

If (a C语言)写一个程序将两个有序(从小到大)的顺序表合并成一个顺序表,合并后的结果放在第一个顺序表中。 你说的“奇怪的错误”是因为你的exit宏和函数同名,所以预处理程序会把程序中的exit替换成-1,所以有错误。

另外,你的合并函数也是错误的,达不到要求。整个程序修改如下:

// -

#包含stdio.h

#include stdlib.h //这里注意,exit()函数需要这个文件,这个文件已经包含了malloc()和其他函数的声明。

#定义确定1

#define LIST_INIT_SIZE 100

#定义溢出0

# defineexit-2//* * * * * *此处注意。

typedef int ElemType

typedef int状态;

typedef结构{

ElemType * elem

int长度;

int listsize

} SqList

状态InitList_Sq(SqList *L)

{ L-elem =(elem type *)malloc(LIST _ INIT _ SIZE * sizeof(elem type));

如果(!L-elem)退出(溢出);

l-长度= 0;

l-LIST SIZE = LIST _ INIT _ SIZE;

退货OK;

}

void Create_Sq(SqList *L)

{ int i,n;

Printf("创建有序表:\ n ");

Printf("输入有序表中元素的个数:");

scanf("%d ",n);

l-长度= n;

for(I = 0;在;i ){

Printf("输入%d元素的值:",I 1);

scanf("%d ",L-elem[I]);

printf(" \ n ");

}

}

Voiddisp _ sq (SQLIST * L)/* * * * * * * *此处注意。

{ int i,n;

n = L-长度;

for(I = 0;在;我)

printf("]",L-elem[I]);

printf(" \ n ");

}

Voidcombine (SQLIST * LA,SQLIST * LB)/* * * * * * * *注意,这个函数已经重写了。

{

ElemType *pa=la-elem,* Pb = l b-elem;

int i,j,k,len_a=la-length,len _ b = lb-length;

if((la-elem = malloc((len _ a len _ b)* sizeof(elem type)))= = NULL)exit(溢出);

for(k = I = j = 0;ilen _ ajlen _ b;) {

if(pa[I]Pb[j])la-elem[k]= pa[I];

else la-elem[k]= Pb[j];

}

while (ilen_a)

la-elem[k]= pa[I];

while (jlen_b)

la-elem[k]= Pb[j];

la-长度= k;

la-list size = k;

免费(pa);

}

void main()

L2 L1的SqList

InitList _ Sq(L1);

InitList _ Sq(L2);

create _ Sq(L1);

disp _ Sq(L1);

printf(" \ n ");

create _ Sq(L2);

disp _ Sq(L2);//* * * * * * * * *注意这里

printf(" \ n ");

联合收割机(L1、L2);

disp _ Sq(L1);//* * * * * * * * *注意这里

}

// -

用C语言编程:寻找两个有序集合的并集 # includestdio.h

#includestdlib.h

#includetime.h

#定义数字1 7

#定义数字2 5

void createCollect(int [],int);

void display(int [],int);

int main()

{

int集合1[number 1];

int集合2[number 2];

int collection 3[数字1数字2];

int i,j,label = 0;

createCollect(collection1,number 1);

for(j = 0;j数字2;j)

{

集合2[j]= j * 2;

}

printf(" Set 1:");

显示(集合1,数字1);

printf(" Set 2:");

显示(集合2,数字2);

for(I = 0;I数字1;我)

{

//取出集合1中的元素,遍历集合2中的所有元素。

for(j = 0;j数字2;j)

{

//如果相同,跳出遍历。

if(集合1[I]= =集合2[j])

打破;

}

//判断:此时有两种情况:1)当前集合1的元素与集合2的元素相同。

//2)遍历集合2的数组后不存在相同的元素。

如果(j ==数字2)

{

集合3[label]=集合1[I];

标签;

}

}

//将集合2的所有元素保存到集合3中。

for(j = 0;j数字2;j)

{

集合3[label]=集合2[j];

}

Printf("集合1和集合2的并集为:\ n ");

显示(集合3,标签);

返回0;

}

//随机生成一个没有重复元素的数组。

void createCollect(整数[],整数计数)

{

//randValue:临时随机数存储变量。

//condition:循环生成一个不重复的条件。

int i,j,randValue,condition

srand(time(NULL));

for(I = 0;icount我)

{

条件= 1;

while(条件){

rand value = 1(int)rand();

for(j = 0;j = I;j ){

If(i==0){//第一个数不能重复,可以直接赋值。

条件= 0;

打破;

}

if(randValue==num[j])

打破;

if(randValue!=num[j]j==i-1)//当生成的随机数与当前数组的最后一位不同时,下标相等。

{

条件= 0;

打破;

}

}

}

num[I]= rand value;

}

}

//打印数组

空显示(整数[],整数计数)

{

int I;

for(I = 0;icount我)

{

printf("%d\t ",num[I]);

}

printf(" \ n ");

}

用C语言写一个函数,将两个给定的有序(升序)一维数组A和B合并,形成有序数组C。 #包含stdio.h

int main()

{

int a[5]={1,2,3,4,5 };

int b[5]={6,7,8,9,10 };

int c[10],I,j = 0;

for(I = 0;i5;我)

c[j]= a[I];

for(I = 0;i5;我)

c[j]= b[I];

for(I = 0;i10我)

printf("M ",c[I]);

printf(" \ n ");

}

C语言编程:写一个程序把两个有序数组A和B合并成另一个有序数组C,按升序设置。 # includestdio.h

voidmain()

{

inta[10],b[10],c[20],I,ia,ib,IC;

printf(" pleaseinputthefirstarray \ n ");

for(I = 0;i10我)

scanf("%d ",a[I]);

for(I = 0;i10我)

scanf("%d ",b[I]);

printf(" \ n ");

ia = 0;IB = 0;IC = 0;

while(ia10ib10)

{

if(a[ia]b[ib])

{

c[IC]= a[ia];

ia;

}

否则{

c[IC]= b[IB];

IB;

}

IC;

}

while(ia10)

{

c[IC]= a[ia];

ia;

IC;

}

while(ib10)

{

c[IC]= b[IB];

IB;

IC;

}

for(I = 0;i20我)

{

printf("]",c[I]);}

}

扩展数据

c语言合并排序

# includestdio.h

#定义8

inta[LEN]={5,2,4,7,1,3,2,6 };

int tempa[LEN];

voidmerge(inta[],inttempa[],intleft,intright,intrightend)

{

inti,temp

int leftend = right-1;

int num = right end-left 1;

temp = left

while(left = left end right = right end)

{

如果(左)右)

{

tempa[temp]= a[left];

}

其他

{

tempa[temp]= a[right];

}

}

while(left=leftend)

{

tempa[temp]= a[left];

}

while(right=rightend)

{

tempa[temp]= a[right];

}

for(I = 0;inum我,右右-)

{

a[right end]= tempa[right end];

}

}

voidsort(inta[],inttempa[],intleft,intright)

{

intmid

如果(向左向右)

{

mid=(左右)/2;

sort(a,tempa,left,mid);

sort(a,tempa,mid 1,right);

合并(a,tempa,左,中1,右);

}

}

intmain()

{

sort(a,tempa,0,7);

for(inti = 0;iLEN我)

{

printf("%d ",a[I]);

}

return0

}

相关文章

发表新评论