面试编程知识+算法题总结(一)
来源:互联网 发布:淘宝卖家参加聚划算 编辑:程序博客网 时间:2024/05/16 04:57
一、C++中引用和指针的区别
1. 指针是一个变量,存储的是一个地址,指向内存的一个存储单元;而引用跟原变量本质是一样的,只不过是原变量的一个别名
2. 指针可以为const;引用不可为const
3. 指针可以为多级;引用不可为多级;
4. 指针可以为空;引用不可为空,并且定义的时候必须初始化
5. 指针在初始化后可以改变;引用在初始化后不可改变
6. sizeof引用得到的是对象的大小;而sizeof指针是指针的大小
7. 指针和引用的自增++意义不一样
8. 指针传递的是参数的地址,可以改变实参,但不能改变指针;引用传递的是实参本身,可以同时修改引用
————————————————
二、C和C++对常量的定义区别
C++用const;C用宏定义#define
const有数据类型,编译时会做语法检查;#define只进行字符替换,没有类型检查和语法检查
————————————————
三、类和结构体的区别
C与C++中的区别:
1. C的结构体中不允许有函数出现;C++的类可以,且允许虚函数,构造函数,析构函数,this指针
2. C的结构体默认public;C++允许public,protected,private三种
3. C的结构体不可继承;C++可以继承
C++中类与结构体的区别
1. C++结构体默认public;类默认private
2. C++结构体继承默认是public;类继承默认private
————————————————
四、单链表的反转
链表节点定义:
struct ListNode{ int value; ListNode* next;};
反转思路1:直接操作
ListNode invert(ListNode head){ if (head == NULL || head -> next == NULL) return head; ListNode p = head -> next; ListNode pnext = p -> next; while(pnext != NULL){ tmp = pnext -> next; pnext -> next = p; p = pnext; pnext = tmp; } head -> next = p; return head;}
反转思路2:建立新链表
ListNode invert(ListNode head){ if (head == NULL || head -> next == NULL) return head; ListNode newhead, tmp, p; newhead -> next = head -> next; while(head -> next != NULL){ p = head -> next; tmp = newhead -> next; newhead -> next = p; newhead -> next -> next = tmp; head -> next = p -> next; } delete(head) return newhead;}————————————————
五、拷贝一个字符串
妈的这个给劳资死记硬背住
char * strcpy(char *dst,const char *src) { assert(dst != NULL && src != NULL); char *ret = dst; while ((*dst++=*src++)!='\0'); return ret;}————————————————
*六、从N个数中取出前k个最大的
3. 利用快速排序的思想,从数组S中随机找出一个元素X,把数组分为两部分Sa和Sb。Sa中的元素大于等于X,Sb中元素小于X。这时有两种情况:
七、堆和栈的区别
1.堆栈空间分配
①栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
②堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。
2.堆栈缓存方式
①栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放。
②堆则是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。
3.堆栈数据结构区别
①堆(数据结构):堆可以被看成是一棵树,如:堆排序。
②栈(数据结构):一种先进后出的数据结构。
八、字符串转换为整型数
也就是atoi
保存首位的正负号
乘十+数字
int str2int(const char *str){ int temp = 0; const char *ptr = str; if (*str == '-' || *str == '+') { str++; } while(*str != 0) { if ((*str < '0') || (*str > '9')) { break; } temp = temp * 10 + (*str - '0'); str++; } if (*ptr == '-') { temp = -temp; } return temp;}
itoa 多一位存负号,模十+0void int2str(int n, char *str){ char buf[10] = ""; int i = 0; int len = 0; int temp = n < 0 ? -n: n; if (str == NULL) { return; } while(temp) { buf[i++] = (temp % 10) + '0'; temp = temp / 10; } len = n < 0 ? ++i: i; str[i] = 0; while(1) { i--; if (buf[len-i-1] ==0) { break; } str[i] = buf[len-i-1]; } if (i == 0 ) { str[i] = '-'; }}
九、将字符串中的某些子串替换
本题的考点就两条:先找所有待替换子串个数,预留出空间,然后从后往前替换
- 面试编程知识+算法题总结(一)
- 面试知识总结(一)
- 面试知识总结(一)
- 面试算法题总结(一)
- 面试算法总结(一)
- 面试常考算法题总结(一)
- 常见面试算法总结(一)
- 面试总结(一)——Java基础相关知识
- 面试编程题(一)
- 面试算法题(一)
- hadoop知识总结(面试)
- 多进程编程的相关知识总结(一)
- 面试算法题总结
- 面试总结(一)
- 面试总结(一)
- 面试总结 (一)
- 《算法导论》数论知识总结(一)
- 查找算法总结——面试(一)
- Android干货
- ArrayList源码(3)
- VS2013创建C#的dll文件
- 标准c++库和stl库,boost库,qt库的总结(一)
- asp.net三种发送邮件代码(stmp,无组件邮件发送)
- 面试编程知识+算法题总结(一)
- Spring boot之读取自定义配置文件
- vue学习指南3
- 每日一题——删除无头链表的非尾节点、逆向打印单链表
- 精华【分布式微服务云架构dubbo+zookeeper+springmvc+mybatis+shiro+redis】分布式大型互联网企业架构!
- js技术--cookie基础(封装cookie、使用cookie记录上一次用户登录名)
- STM32F407系统时钟配置是否添加FPU功能
- 获取wsdl接口账号密码限制读取的
- 说说JSON和JSONP,也许你会豁然开朗,含jQuery用例