北航计算机机试07排序10归并字符串

将两个升序字符串合并成一个升序字符串,相同的字母,出现一次。

!!!!又出了同样的题!!!

个人认为:首先输入的一定是升序的字符串,所以没有重复的字母,那么相同的字母只有在比较的时候才能发现,两个升序的字符串合并成一个字符串,是属于线性表的归并排序

可以用数组来存储线性表,代码如下

#include<stdio.h>
#include<string.h>

int main()
{
    char a[100];
    char b[100];
    char c[100];
    while(scanf("%s",a)!=EOF)
    {
        scanf("%s",b);
        int a_len=strlen(a);
        int b_len=strlen(b);
        int i=0;
        int j=0;
        int k=0;
        while((i<a_len)&&(j<b_len))//ab均非空
        {
            if(a[i]<b[j]) 
            {
                c[k]=a[i];
                i++;
            }else if(a[i]>b[j]){
                c[k]=b[j];
                j++;
            }else{
                c[k]=a[i];
                i++;
                j++;
            }
            k++;
        }
        while(i<a_len)
        {
            c[k]=a[i];
            k++;
            i++;
        }
        while(j<b_len)
        {
            c[k]=b[j];
            k++;
            j++;
        }
        for(i=0;i<k;i++)
        {
            printf("%c",c[i]);
        }
        printf("\n");

    }return 0;
}

也可以用链表来存储线性表,即线性链表

void mergelist(linklist &la,linklist &lb,linklist &lc)
{
pa=la->next;  pb=lb->next;
lc=pc=la;
while(pa&&pb){
if(pa->data <=pb->data){
pc->next=pa;pc=pa;pa=pa->next;
}
else { pc->next=pb; pc=pb;pb=pb->next;}
}
pc->next=pa?pa:pb;
free(lb);
}
全部评论

相关推荐

10-27 17:26
东北大学 Java
点赞 评论 收藏
分享
在评审的大师兄很完美:像这种一般就是部门不匹配 转移至其他部门然后挂掉 我就是这样被挂了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务