
剑指Offer笔记
文章平均质量分 66
SnailCpp
这个作者很懒,什么都没留下…
展开
-
数据结构-栈和队列
栈和队列 栈是一种后进先出的数据结构,通常栈是不考虑顺序的。队列是一种先进先出的数据结构,栈和队列是相互区别又相互联系的数据结构。7.(用两个栈实现队列)用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。(类似实现两个队列实现栈)template class C原创 2017-08-16 18:03:42 · 386 阅读 · 0 评论 -
高质量的代码(1)
代码的规范性:(1)清晰的书写(2)清晰的布局(3)合理的命名代码的完整性:(1)功能测试(2)边界测试(3)负面测试(性能测试、非法测试) 例如:把字符串转换成正整数时,基本的功能测试应包括零、正数和负数三种情况。“打印1到最大的n位数”,应注意大数溢出问题。 常见的错误处理方法: 优点缺点返回值和系原创 2017-09-08 15:53:03 · 394 阅读 · 0 评论 -
数据结构-树
树 树的特点:除了根结点之外每个结点只有一个父结点,根结点没有父结点;除了叶结点之外的所有结点都有一个或多个子结点,叶结点没有子结点。 二叉树的遍历:(1)前序遍历:先访问根结点,再访问左子结点,最后访问右子结点。(2)中序遍历:先访问左子结点,再访问根结点,最后访问有右子节点。(3)后序遍历:先访问左子结点,再访问右子结点,最后访问根结点。在二叉树的前序遍历中,第原创 2017-08-15 19:42:17 · 305 阅读 · 0 评论 -
数据结构-链表
链表 链表是一种动态的数据结构,在创建链表时,无需知道链表的长度。内存分配是链表在添加结点是才分配的。 单链表的结点定义:struct ListNode{ int m_nvalue; //数据域 ListNode * m_pNext; //指针域}; 链表的操作: 向链表的末尾添加结点void AddToTail(L原创 2017-08-14 23:40:58 · 213 阅读 · 0 评论 -
数据结构-字符串
为了节省内存,C/C++把常量字符串放到一个单独的内存区域。当几个指针赋值给相同的常量字符串时,它们的实际上会指向相同的内存地址。但用常量内存初始化数组,情况却不同。 3.运行下列程序,得到的结果是什么? #include int main(void){ char str1[] = "hello world"; char str2[] = "hello world";原创 2017-08-13 23:15:59 · 302 阅读 · 0 评论 -
数据结构-数组
数组数组是一种占据连续内存并按顺序存储数据的简单的数据结构。创建数组时,需要首先指定数组的容量,然后依据大小分配内存。由于有时候我们需要使用数组的容量不确定,可能开辟的内存远超实际使用的内存,所以数组的空间效率不好。 由于数组在内存中是连续的存储空间,所以它的时间效率很高,可以在O(1)的时间读写数据。根据这一特性,可以用数组实现简单的哈希表,这样数组下标就形成了键值-数值对。 C++的STL中原创 2017-08-13 14:12:46 · 174 阅读 · 0 评论 -
编程语言基础
2.1定义一个空的类型,里面没有任何成员变量和成员函数。对该类型求sizeof,得到的结果是多少?答:1. #include class A{ };int main(){A a;printf("%d",sizeof a );return 0;} 结果:1 #include class A{};int main(){//原创 2017-08-12 22:59:18 · 290 阅读 · 0 评论 -
数据结构-位运算
位运算 位运算包括六种运算:与、或、异或、按位取反、左移和右移。 10.(二进制中1的个数)请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如把9表示成二进制是1001,有2位是1.因此如果输入9,该函数输出2。考虑负数情况! 代码1:int NumberOf1(int n){ int count = 0; unsigned int flag = 1原创 2017-08-18 21:15:46 · 470 阅读 · 0 评论 -
数据结构-递归与循环
递归和循环 如果我们需要重复地多次计算相同的问题,通常可以选择用递归或者循环两种不同的方法。递归实在函数的内部调用这个函数本身。而循环则是通过设置计算的初始值及终止条件,在一个范围内重复计算。例如求1+2+。。。+n,我们可以用递归或者循环两种方式求出结果。对应的代码如下:int AddFrom1ToN_Recursive(int n){ return n <= 0? 0 : n原创 2017-08-18 16:45:30 · 411 阅读 · 0 评论 -
数据结构-算法和数据操作
算法和数据操作 重要的算法:二分查找、归并排序和快速排序。查找一般分为顺序查找、二分查找、哈希表查找和二叉排序树查找。排序包括:选择排序、插入排序、交换排序、归并排序以及外排序等。 快速排序实现快速排序算法的关键在于先在数组中选择一个数字,接下来把数组中的数字分为两部分,比选择的数字小的数字移到数组的左边,比选择的数字大的数字移到数组的右边。 int Partition原创 2017-08-17 23:02:59 · 502 阅读 · 0 评论 -
高质量的代码(2)
面试题12:打印1到最大的n位数题目:输入数字n,按顺序打印出从1最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的3位数即999.解法1:解决大数常用的方法是用字符串或者数组表达大数。当字符串表达数字的时候,最直观的方法就是字符串里每个字符都是‘0’ 到 ‘9’ 之间的某个字符,用来表示数字中的一位。因为数字最大是n位的,因此我们需要一个长度为n+1的字符串(字符串中原创 2017-09-09 16:33:44 · 244 阅读 · 0 评论