C语言编程高手请进~~~~~请一定要帮帮忙,万分感谢~~~~~!!!!!!!小虾米自己实在是能力有限,谢谢各位

2024-11-17 09:03:00
推荐回答(2个)
回答1:

第1题题目表述不清,普通的二叉树的合并没有任何意义,如果是二叉排序树还差不多。若非要进行普通的二叉树的合并,只要将一个树的插入到另一个树的度非2的结点上,最简便的做法是沿着另一个树的根一直遍历到左子树的叶子结点,不过这没有意义。要是这样的话,此题太简单了,自己实现吧!!
第2题
(1)排序结束的最基本即最保守的条件是:进行n次奇偶交换操作。
还有一个是针对本来就基本有序的情况,如果在n次循环中,有两次没有交换操作,则停止排序,因为此时必有序!
故综合起来为:当有两次没有交换操作或进行了n次奇偶交换时,排序结束。
(2)源代码
#include
#include
using namespace std;

void OddEvenSort(int* p,const int& size)
{
int k=-1;
for(int i=0;i {
int j=i%2;
for(;j if(j+1p[j+1])
{
++k;
p[j]=p[j+1]^p[j] , p[j+1]=p[j]^p[j+1] , p[j]=p[j+1]^p[j] ;//交换
}
if(i-k==2)
break;//两次没有交换,排序停止
}
}

void PrintArray(int* p,const int& size)
{
for(int i=0;i {
cout< if((i+1)%8==0)
cout< }
cout<}
void main()
{
int size=0;
int *p=0;
cout<<"Enter the size of an array!"< cin>>size;
p=new int[size];
cout<<"Please input the elements!"< for(int i=0;i cin>>p[i];
OddEvenSort(p,size);
cout<<"After the sortion,the array is:"< PrintArray(p,size);
delete[] p;
}

回答2:

1 找到A的底层的指针Rnext或Lnext把B的头指针headb赋给Rnext或Lnext,
unitab(struct heada,struct headb)
{
while(*heada->Rnext)heada = Rnext;//加入右叉
heada->Rnext = headb;
}

2,结束条件是不再有交换发生。。标志um

void pxu(int a[])
{
int temp;
int um = 1;//交换标志
while(um){
um = 0;
for(int i=0;(i*2+2) {
if(a[i*2+1]>a[i*2+2])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
um = 1;
}
}
for(int i=0;(i*2+1) {
if(a[i*2]>a[i*2+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
um = 1;
}
}
}
}