Chinaunix首页 | 论坛 | 博客
  • 博客访问: 596646
  • 博文数量: 109
  • 博客积分: 1463
  • 博客等级: 上尉
  • 技术积分: 859
  • 用 户 组: 普通用户
  • 注册时间: 2011-07-22 13:21
个人简介

希望和广大热爱技术的童鞋一起交流,成长。

文章分类

全部博文(109)

文章存档

2017年(1)

2016年(2)

2015年(18)

2014年(1)

2013年(9)

2012年(15)

2011年(63)

分类: C/C++

2011-09-16 22:33:42

    今天超级郁闷,华赛一面过了,虽然答得不好,但是总算过了,结果二面群面挂掉了,真是杯具。。。不过还是认识到了自己的很多不足,一面做卷子最后一道编程题,当时没写完整,有些地方又没有考虑到,现在特地写了补上呵呵。
    题目:有如下结构体,A和B都是该结构体类型,A里面的数据已经从小到大排好序,B里面的数据也从小到大排好序。编程实现以下功能:将A和B的数据合并,形成结构体C,要求C里面的数据也从小到大排好序。
typedef struct Seqlist
{
 int data[255];
 int len; //有效数据长度
}Seq;
代码:
  1. #include <iostream>
  2. #include <stdlib.h>
  3. using namespace std;

  4. typedef struct Seqlist
  5. {
  6.     int data[255];
  7.     int len; //有效数据长度
  8. }Seq;

  9. void merge(Seq A,Seq B,Seq* C)
  10. {
  11.     Seq *p = (Seq*)malloc(sizeof(Seq));
  12.     int i=0,j=0,k=0;
  13.     int lenshort = (A.len > B.len)? B.len : A.len;
  14.     while(i<lenshort && j<lenshort)
  15.     {
  16.         if(A.data[i] == B.data[j])
  17.         {
  18.             C->data[k++] = A.data[i];
  19.             i++;
  20.             j++;
  21.         }
  22.         else if(A.data[i] > B.data[j])
  23.         {
  24.             C->data[k++] = B.data[j];
  25.             j++;
  26.         }
  27.         else
  28.         {
  29.             C->data[k++] = A.data[i];
  30.             i++;
  31.         }
  32.     }
  33.     while(i<A.len){
  34.         C->data[k++] = A.data[i];
  35.         i++;
  36.     }
  37.     while(j<B.len){
  38.         C->data[k++] = B.data[j];
  39.         j++;
  40.     }
  41.     C->len = k;    
  42. }
  43. int main()
  44. {
  45.     Seq A;
  46.     Seq B;
  47.     Seq* C = (Seq*)malloc(sizeof(Seq));
  48.     int i = 0;
  49.     int len = 20;
  50.     
  51.     for(i = 0;i < len;i++)
  52.     {
  53.         A.data[i] = i+1;
  54.     }
  55.     A.len = len;
  56.     B.len = len;
  57.     
  58.     for(i = 0;i < len;i++)
  59.     {
  60.         B.data[i] = i+4;
  61.     }
  62.     
  63.     memset(C->data,0,255);
  64.     C->len = 0;

  65.     merge(A,B,C);
  66.     
  67.     for(i=0;i<C->len;i++)
  68.     {
  69.         cout<<C->data[i]<<endl;
  70.     }
  71.     return 0;
  72. }
这种方法是采用数组实现的,个人觉得这种方法要麻烦一些,但是比较妥当。还可以用指针方法。
阅读(736) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~