今天超级郁闷,华赛一面过了,虽然答得不好,但是总算过了,结果二面群面挂掉了,真是杯具。。。不过还是认识到了自己的很多不足,一面做卷子最后一道编程题,当时没写完整,有些地方又没有考虑到,现在特地写了补上呵呵。
题目:有如下结构体,A和B都是该结构体类型,A里面的数据已经从小到大排好序,B里面的数据也从小到大排好序。编程实现以下功能:将A和B的数据合并,形成结构体C,要求C里面的数据也从小到大排好序。
typedef struct Seqlist
{
int data[255];
int len; //有效数据长度
}Seq;
代码:
- #include <iostream>
- #include <stdlib.h>
- using namespace std;
- typedef struct Seqlist
- {
- int data[255];
- int len; //有效数据长度
- }Seq;
- void merge(Seq A,Seq B,Seq* C)
- {
- Seq *p = (Seq*)malloc(sizeof(Seq));
- int i=0,j=0,k=0;
- int lenshort = (A.len > B.len)? B.len : A.len;
- while(i<lenshort && j<lenshort)
- {
- if(A.data[i] == B.data[j])
- {
- C->data[k++] = A.data[i];
- i++;
- j++;
- }
- else if(A.data[i] > B.data[j])
- {
- C->data[k++] = B.data[j];
- j++;
- }
- else
- {
- C->data[k++] = A.data[i];
- i++;
- }
- }
- while(i<A.len){
- C->data[k++] = A.data[i];
- i++;
- }
- while(j<B.len){
- C->data[k++] = B.data[j];
- j++;
- }
- C->len = k;
- }
- int main()
- {
- Seq A;
- Seq B;
- Seq* C = (Seq*)malloc(sizeof(Seq));
- int i = 0;
- int len = 20;
-
- for(i = 0;i < len;i++)
- {
- A.data[i] = i+1;
- }
- A.len = len;
- B.len = len;
-
- for(i = 0;i < len;i++)
- {
- B.data[i] = i+4;
- }
-
- memset(C->data,0,255);
- C->len = 0;
- merge(A,B,C);
-
- for(i=0;i<C->len;i++)
- {
- cout<<C->data[i]<<endl;
- }
- return 0;
- }
这种方法是采用数组实现的,个人觉得这种方法要麻烦一些,但是比较妥当。还可以用指针方法。
阅读(736) | 评论(0) | 转发(0) |