
数据结构
文章平均质量分 77
minghui_
路漫漫其修远兮,吾将上下而求索
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
剑指offer面试题(3)——数组中重复的数字
题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3。解法1:排序 将输入的数组排序,然后扫描排序后的数组即可。 排序算法时间复杂度:O(n...原创 2018-06-01 21:39:28 · 290 阅读 · 0 评论 -
剑指offer面试题(6)——从尾到头打印链表
题目:输入一个链表的头结点,从尾到头反过来打印每个节点的值。链表节点定义如下:typedef struct Node{ int data; //数据域 struct Node * pNext; //指针域}*PNODE, NODE;解题思路 最直观的的做法是改变链表中链接节点的指针的指向,改变链表的方向,然后就可以遍历链表直接输出了。 ...原创 2018-06-06 17:19:45 · 285 阅读 · 0 评论 -
剑指offer面试题(7)——重建二叉树
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建如下图所示的二叉树并输出它的头结点。 二叉树节点定义如下:struct BinaryTreeNode { int ...原创 2018-06-14 10:50:37 · 202 阅读 · 0 评论 -
剑指offer面试题(8)——二叉树的下一个节点
题目:给定一棵二叉树和其中的一个结点,如何找出中序遍历顺序的下一个结点? 树中的结点除了有两个分别指向左右子结点的指针以外,还有一个指向父结点的指针。 如下图所示的一颗二叉树,中序遍历序列是{d,b,h,e,i,a,f,c,g};下面将以这棵树为例。其中实线表示父节点指向子节点的指针,虚线表示子节点指向父节点的指针。 二叉树节点定义如下:struct B...原创 2018-06-20 22:02:00 · 224 阅读 · 0 评论 -
非比较排序算法
转自:http://www.cnblogs.com/eniac12/p/5332117.html 这篇文章中我们来探讨一下常用的非比较排序算法:计数排序,基数排序,桶排序。在一定条件下,它们的时间复杂度可以达到O(n)。 这里我们用到的唯一数据结构就是数组,当然我们也可以利用链表来实现下述算法。 计数排序(Counting Sort) 计数排序用到一个额外的计数数组C,根据数组C来将...转载 2018-05-17 20:13:08 · 386 阅读 · 0 评论 -
比较排序算法
转自:https://www.cnblogs.com/eniac12/p/5329396.html我们通常所说的排序算法往往指的是内部排序算法,即数据记录在内存中进行排序。 排序算法大体可分为两种: 一种是比较排序,时间复杂度O(nlogn) ~ O(n^2),主要有:冒泡排序,选择排序,插入排序,归并排序,堆排序,快速排序等。 另一种是非比较排序,时间复杂度可以达到O(n),主要有...转载 2018-05-17 20:09:43 · 208 阅读 · 0 评论 -
链表插入、删除算法
对于链表的插入和删除操作,自己写代码的一般思路是先遍历链表,找到要插入或删除的位置后再进行插入或删除操作,还要进行一系列不合法判断。而这个算法,简短的几行代码基本上就把所有的情况包含进去了,健壮性也很强,分享一下。typedef struct Node{ int data; //数据域 struct Node * pNext; //指针域}*PNODE,NODE;int原创 2017-03-23 10:44:38 · 849 阅读 · 0 评论 -
剑指offer面试题(9)——用两个栈实现队列
题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。 类的定义如下:template <typename T> class CQueue{public: CQueue(void); ~CQueue(void); ...原创 2018-06-23 19:52:18 · 211 阅读 · 0 评论