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
}
最后更新于 2023-10-07 10:34:56 并被添加「」标签,已有 位童鞋阅读过。
本站使用「署名 4.0 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处
相关文章