题目简述:两列已经按高矮顺序排好队的幼儿园小朋友要过斑马线,交警要求单列通过;编写C语言算法帮助实现目标,保持原高矮顺序不变。
相关提示:如果第一列高矮顺序:1 3 4 5 7 9,第二列高矮顺序:2 6 8 。则新列应输出:1 2 3 4 5 6 7 8 9。
数据结构要求用什么?数组还是链表?
数组的写法,供参考:
#include<stdio.h>
#define N 20
int main()
{
int a[N],b[N],c[2*N],m,n,i,j,k;
printf("请分别输入两组升序数列的长度:");
scanf("%d %d",&m,&n);
printf("请输入第一组 %d 个整数数据:",m);
for(i=0;i<m;i++)
scanf("%d",&a[i]);
printf("请输入第二组 %d 个整数数据:",n);
for(i=0;i<n;i++)
scanf("%d",&b[i]);
i = 0; j = 0; k = 0;
while(i < m && j < n)
{
if(a[i] >= b[j])
c[k++] = b[j++];
else
c[k++] = a[i++];
}
if(i == m)
{
while(k < m + n)
{
c[k++] = b[j++];
}
}
if(j == n)
{
while(k < m + n)
{
c[k++] = a[i++];
}
}
for(i=0;i < m+n;i++)
printf("%4d",c[i]);
return 0;
}
指针的写法:
#include<stdio.h>
int main()
{
int a[6] = {1,3,4,5,7,9}, b[3] = {2,6,8}, c[9];
int *pa = a, * pb=b, * pc=c;
while (pa < a + 6 && pb < b + 3)
{
if (*pa <= *pb){
*pc++ = *pa++;
}
else{
*pc++ = *pb++;
}
}
while (pa < a + 6) *pc++ = *pa++;
while (pb < b + 3) *pc++ = *pb++;
for (int i = 0; i < 9; i++)
printf("%d ", c[i]);
return 0;
}