完成的题目整理

菜鸡自己写的答案,可能答案不是特别的精确,如有大佬路过,请进行指正!

1、h头文件中的ifndef/define/endif的作用?

使用#ifndef、#define和#endif能够避免头文件的被重复定义,以便于提高编译效率

2、new delete 与malloc free 的联系和区别?

new delete与malloc free均是动态申请空间和释放内存,其中new delete是能够进C++中的分配和释放内存,malloc free再C++中也能够使用,其主要目的是兼容c语法

区别:

1new delete是操作符,malloc free 是函数

2new申请的空间是能够进行初始化,malloc申请的空间是不会初始化

3使用malloc时,需要程序员指定动态分配内存的大小,而new在只当指针类型以后,可以自动分配内存

  1. 已知类String的原型为:

Class String

 Public:

   String(const char* str=NULL);         //普通构造函数

   String(const String& rhs);          //拷贝构造函数

   ~String(void);                  //析构函数

   String& operator=(const String& rhs);   //赋值操作符

Private:

  char* m_data;                  //用于保存字符串

};

请编写String类的上述4个函数。

//普通构造函数 

String::String(const char *str){

if (str == NULL){

    m_data = new char[1];

    *m_data = '\0';

}

else{

    int len = strlen(str);

    m_data = new char[len + 1];

    strcpy(m_data, str);

}

}

//String拷贝函数

String::String(const String &other){   

int len = strlen(other.m_data);

m_data = new char[len + 1]; 

strcpy(m_data, other.m_data);

}

//String析构函数

String::~String(void){

delete m_data; 

}

//String赋值函数:

String & String::operator = (const String &other){

if (this == &other)

    return *this;

if (m_data)

    delete[] m_data; 

int len = strlen(other.m_data);

m_data = new char[len + 1]; 

strcpy(m_data, other.m_data);

return *this;   

}

编程1、在全球范围内,划有10000个不同大小的多边形区域。同时,我们有大量坐标点,如何高效判断坐标点所归属的区域?请写出主要思路。

思路:

利用数据结构中的图的深度遍历算法(DFS)对不同大小的区域进行遍历,以便于高效判断坐标点所归属的区域

由于有大量的坐标点,可以使用邻接矩阵存储数据,且坐标点是唯一的,初始化邻接矩阵为全-1矩阵,对10000个划分的不同区域进行深度遍历,同时对初始化的邻接矩阵的每个点的值进行修改,确定每个坐标点在哪个区域。

编程2、有n个人围成一圈,顺序排号。要求从其中淘汰掉m人,从第一个人开始循环报数(1到3报数),凡报到3的人退出圈子,直到剩余n-m人。请编写算法代码(链表实现),输出剩余人员在圈中的次序。

#include <iostream>

using namespace std;

struct ListNode {

    int val;        //存储数据

    ListNode *next; //next指针

    ListNode() : val(0), next(NULL) {}  //类似构造函数

    ListNode(int x) : val(x), next(NULL) {}

};

int main()

{

    int count,num,delNum = 0,flag = 0;

    //创建链表

    ListNode *head = new ListNode();

    ListNode *p=head;

    cin >> count; 

    cin >> num;            

    int i=1;

    while(i<count){

        ListNode *node = new ListNode(i); // 初始化一个节点

        node->val = i;

        p->next = node;

        p=p->next;

        i++;

    }

    p->next=NULL;//最后一个节点的指针指向空

    p=head;

    p->val += 1;

     while(p->next){

   

    p->next->val += 1;

    p = p->next;

   

    }

while(num - delNum){

        //cout<< "还有的数据需要删除:"<<num - delNum<<endl;

       p = head;       

        while(p->next&& delNum < num){

          flag++;

          if((flag % 2) == 0){

              ListNode *tem=p->next;

                p->next=p->next->next;

                //cout << "此时删除的值是:"<<tem->val<<endl;

                delete tem;

                delNum++;

                //cout <<"已经完成删除的数据"<< delNum<<endl;

         }  

       p=p->next;

        if(p == NULL){

          flag = 0;

          p = head;

          //cout<<"flag :  " <<num - delNum<<endl;

         }

      }

}

网络题目1、通过信号量能沟通控制应用程序只能启动1个实例吗?为什么?控制只能启动3个如何实现?

可以只启动一个实例,因为信号量能够实现进程间的同步与互斥。

其余不会

网络题目2、简述TCP和UDP的区别。试举出几种Windows Socket的编程模型及适用场景。

TCP:是一种面向连接的、可靠的、基于字节流的传输层通信协议

UDP:是一种无连接的、不可靠的、基于报文的传输层通信协议

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值