数据结构 算法 面试题
文章平均质量分 76
hearto
这个作者很懒,什么都没留下…
展开
-
求链表中的倒数第K个节点
题目描述:求链表的倒数第K个节点基本思路:在遍历时维持两个指针,第一个指针从链表的头指针开始遍历,在第k-1步之前,第二个指针保持不动;在第k-1步开始,第二个指针也开始从链表的头指针开始遍历。由于两个指针的距离保持在k-1,当第一个(走在前面的)指针到达链表的尾结点时,第二个指针(走在后面的)指针正好是倒数第k个结点。特殊处理部分:1.链表为空; 2.链表的长度小于K; 3.K原创 2014-02-25 14:54:09 · 711 阅读 · 0 评论 -
快速排序算法实现
快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微软等知名IT公司都喜欢考这个,还有大大小的程序方面的考试如软考,考研中也常常出现快速排序的身影。 总的说来,要直接默写出快速排序还是有一定难度的,因为本人就自己的理解对快速排序作了下白话解释,希望对大家理解有帮助,达到快原创 2014-03-02 15:53:52 · 556 阅读 · 0 评论 -
用两个堆栈实现队列
主要问题:使用两个堆栈实现队列的插入与删除。基本思路:设两个堆栈为s1与s2,s1用于存放新插入的元素,队列的尾部;当要删除元素的时候,需要删除队列的头部元素,如果s2中没有元素,那么需要将s1中的元素依次弹出并压入到s2中;如果s2中有元素,那么直接弹出s2头部的元素就是队列尾部的元素。(因为元素入栈s1时,是从前向后,从s1弹出来,压入s2时,从后向前压入,那么从s2依次弹出的就是元素进入原创 2014-03-02 14:05:52 · 651 阅读 · 0 评论 -
根据前序与后序遍历构建二叉树,并以后序遍历结果输出
问题描述:给定一个二叉树的前序遍历序列和后序遍历序列,构建二叉树,然后输出二叉树的后序遍历结果。代码如下:#include using namespace std;struct BinaryTreeNode{ int value; BinaryTreeNode *leftBinaryTreeNode; BinaryTreeNode *rightBinaryTreeNode;}原创 2014-03-01 18:54:32 · 589 阅读 · 0 评论 -
链表 生成链表 链表尾部添加元素 移出元素 反序从尾到头打印链表
问题描述:1.生成链表:根据给定的数组元素,生成链表,并返回链表的头结点。 2.链表尾部添加元素:给定一个元素,在链表的尾部添加一个新的元素。 3.移除元素:给定一个元素,删除链表中与之值相等的节点。 4.反序输出链表:从尾到头打印链表元素的值。注意事项:链表为空(添加);链表仅有一个头结点(删除)。代码如下:#include #includeusin原创 2014-02-28 13:20:03 · 1028 阅读 · 0 评论 -
双向链表的创建,添加与删除
问题描述:1.生成双向链表:根据给定的数组元素,生成双向链表,并返回双向链表的头结点。 2.双向链表尾部添加元素:给定一个元素,在双向链表的尾部添加一个新的元素。 3.移除元素:给定一个元素,删除双向链表中与之值相等的节点。注意事项:链表为空(添加);链表仅有一个头结点(删除)。代码如下:#include using namespace std原创 2014-02-28 14:00:56 · 845 阅读 · 0 评论 -
替换字符串中的空格
题目描述:给定一个字符串,比如” I am a student."。将字符串中的空格替换为%20。那么替换后的字符串为“I%20am%20a%20student.”思路:(1)从头到尾遍历整个字符串,碰到空格,就移动后面的字符串,每次需要向后移动2个字节。(移动非常耗时。) (2)遍历一遍数组,统计出来整个字符串中有多少个空格,然后可以确定替换之后的字符串的长度,替换空格,生成新的字原创 2014-02-26 21:28:08 · 574 阅读 · 0 评论 -
字符串 赋值运算符 重载
问题描述:对字符串的赋值运算符进行重载。注意点:1.将返回值的类型声明为该类型的引用,同时在函数结束前返回实例自身的应用。返回引用的目的是允许连续赋值。 2.把传入的参数的类型声明为常量引用。如果传入参数不是引用而是实例,那么从形参到实参会调用一次复制构造函数。把参数声明为引用可以避免无所谓的消耗,提高代码的效率。 3.判断传入的参数和当前的实原创 2014-02-26 14:35:05 · 1868 阅读 · 0 评论 -
字符串转化成整数
题目描述:输入一个表示整数的字符串,并把该字符串转化成整数并输出。例如输入“123”,则输出整数123.基本思路:以"123"作为例子。当我们扫描到字符串的第一个字符'1'时,我们不知道后面还有多少位,仅仅知道这是第一位,因此此时得到的数字是1。当扫描到第二个数字'2'时,此时我们已经知道前面已经一个1了,再在后面加上一个数字2,那前面的1相当于10,因此得到的数字是1*10+2=12。接原创 2014-02-25 15:10:51 · 612 阅读 · 0 评论 -
希尔排序,基数排序,归并排序
希尔排序:将无序数组分割为若干个子序列,子序列不是逐段分割的,而是相隔特定的增量的子序列,对各个子序列进行插入排序;然后再选择一个更小的增量,再将数组分割为多个子序列进行排序......最后选择增量为1,即使用直接插入排序,使最终数组成为有序。(希尔排序可以作为插入排序的一种。)不稳定的排序算法,时间复杂度O(n^1.5),最好时间复杂度O(n),最坏时间复杂度O(n^2),辅助内存O原创 2014-03-03 16:31:38 · 639 阅读 · 0 评论