数据结构与算法
文章平均质量分 93
总结相关数据结构知识点和一些有趣有用的代码
Summer_ZJU
如果你不去努力,就没有资格抱怨
展开
-
排序算法总结
好记性不如烂笔头o(^▽^)o前言 记得之前毕业找工作的时候好好总结过,但是,工作中基本不怎么用到这些排序算法,所以久而久之就忘了。以前写的文章链接(包括详细的思路、图和完整代码): 《直接选择排序》 《冒泡排序算法》 《希尔排序算法》 《快速排序算法》 《直接插入排序》 其实每种看了后很容易混淆和记不住,所以这里就对这些排序算法进行归类和总结,主要涉及十大排序算法。原创 2016-09-23 14:41:30 · 717 阅读 · 0 评论 -
删除重复字符
Description 给定一个字符串,将字符串中所有和前面重复多余的字符删除,其余字符保留,输出处理后的字符串。需要保证字符出现的先后顺序。Prototype int GetResult(const char *input, char *output)Input Param input 输入的字符串Output原创 2015-04-07 22:28:12 · 647 阅读 · 0 评论 -
字符串最后一个单词的长度
如题意,代码如下:#include #include #include #include using namespace std;int wordlength(char a[]){ char temp[200]; int count=0; int len=strlen(a); for(int i=0;i<len;i++) temp[i]=a[len-1-i]原创 2015-04-08 20:30:03 · 524 阅读 · 0 评论 -
大数求和
描述: 给定两个非常大的正整数A和B,位数在50至100之间。求C=A+B; 题目类别: 字符串 难度: 中级 运行时间限制:10Sec内存限制:128MByte阶段: 入职前练习 输入: 因为A和B很大,从高位到低位,以字符串的形原创 2015-04-08 22:56:00 · 1365 阅读 · 1 评论 -
二叉树遍历
描述: 二叉树的前序、中序、后序遍历的定义:前序遍历:对任一子树,先访问跟,然后遍历其左子树,最后遍历其右子树;中序遍历:对任一子树,先遍历其左子树,然后访问根,最后遍历其右子树;后序遍历:对任一子树,先遍历其左子树,然后遍历其右子树,最后访问根。给定一棵二叉树的前序遍历和中序遍历,求其后序遍历(提示:给定前序遍历与中序遍历能够唯一确定后序遍历)。原创 2015-04-09 20:29:46 · 569 阅读 · 0 评论 -
最大递减数
给出一个正整数,找到这个正整数中包含的最大递减数。一个数字的递减数是指相邻的数位从大到小排列的数字。如: 95345323,递减数有:953,95,53,53,532,32, 那么最大的递减数为953。代码如下:#include #include #include #include #include using namespace std;int getMaxDegre原创 2015-04-09 21:52:35 · 2169 阅读 · 0 评论 -
求二叉树的深度和宽度
题目标题:求二叉树的宽度和深度给定一个二叉树,获取该二叉树的宽度和深度。 例如输入 a / \ b c/ \ / \d e f g 返回3.详细描述:接口说明原型: int GetBi原创 2015-04-09 23:10:07 · 640 阅读 · 0 评论 -
链表实现冒泡排序算法
// TEST2.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include#includeint main(int argc, char* argv[]){ int a = 0, i = 0; int *arr = NULL; str原创 2015-04-10 16:36:43 · 1058 阅读 · 0 评论 -
整数排序
输入一串数字,以逗号为分割符,无非法输入输出:将数字按从小到大排序,如果数字是连续的,则只输出头和尾,每个数字之间有空格例:输入:1,4,3,70,90,2,110输出:1 4 70 90 110代码如下:#include #include #include #include #include using namespace std;int main原创 2015-04-12 14:59:49 · 574 阅读 · 0 评论 -
铁路栈问题
题目标题:铁路栈问题 铁路的调度站如下:火车编号为:1~9,且不重复。如:编号分别为“1”、“2”、“3”、“4”、“5”的5个火车顺序进站,那么进站序列为“12345”,全部进站后再顺序出站,则出站序列为“54321”,如果先进1,2,然后2出站,然后1出站,然后再3进站、出站,4进站、出站,5进站、出站,那么出站序列就为21345.详细描述:原创 2015-04-12 22:52:12 · 2169 阅读 · 0 评论 -
在字符串中找出连续最长的数字串
题目描述 请一个在字符串中找出连续最长的数字串,并把这个串的长度返回;如果存在长度相同的连续数字串,返回最后一个连续数字串;注意:数字串只需要是数字组成的就可以,并不要求顺序,比如数字串“1234”的长度就小于数字串“1359055”,如果没有数字,则返回空字符串(“”)而不是NULL!样例输入abcd12345ed125ss123058789abc原创 2015-04-14 20:54:09 · 1820 阅读 · 0 评论 -
删除链表中的重复节点、剩余节点逆序输出
题目描述:输入一个不带头节点的单向链表(链表的节点数小于100),删除链表中内容重复的节点(重复的节点全部删除),剩余的节点逆序倒排。要求实现函数: void vChanProcess(strNode * pstrIn,strNode * pstrOut);【输入】 pstrIn:输入一个不带头节点的单向链表【输出】 pstrOut:删除内容重复的节点(重复原创 2015-04-16 22:34:21 · 911 阅读 · 0 评论 -
向升序单向链表中插入一个节点
输入一个升序单向链表和一个链表节点,向单向链表中按升序插入这个节点。输入为空指针的情况视为异常,另外不考虑节点值相等的情况。链表结点定义如下:struct ListNode{ int m_nKey; ListNode* m_pNext;};详细描述:接原创 2015-04-16 23:38:50 · 1479 阅读 · 0 评论 -
最短路径算法
1 最短路径算法在日常生活中,我们如果需要常常往返A地区和B地区之间,我们最希望知道的可能是从A地区到B地区间的众多路径中,那一条路径的路途最短。最短路径问题是图论研究中的一个经典算法问题, 旨在寻找图(由结点和路径组成的)中两结点之间的最短路径。 算法具体的形式包括:(1)确定起点的最短路径问题:即已知起始结点,求最短路径的问题。(2)确定终点的最短路径问题:与确定起点原创 2016-06-24 08:02:17 · 654 阅读 · 0 评论 -
数据结构——AVL树
AVL树是最早提出的自平衡二叉树,在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树。AVL树得名于它的发明者G.M. Adelson-Velsky和E.M. Landis。AVL树种查找、插入和删除在平均和最坏情况下都是O(log n),增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。原创 2014-04-19 10:37:21 · 1216 阅读 · 0 评论 -
B-Tree
先引用一段wiki上B-Tree的定义:Definition[edit]According to Knuth's definition, a B-tree of order m is a tree which satisfies the following properties:Every node has at most m children.Every non-原创 2014-04-25 20:36:54 · 1013 阅读 · 0 评论 -
直接插入排序
基本思想插入排序的基本思想就是:每次将一个待排序的记录,按照其关键字大小插入到已经排好序的子序列的适当位子,知道全部记录插入完成为止;假设待排序的记录都存储在R[n]中,首先把R[1]自成一个有序区,R[2..n]为无序区,然后将R[2..n]中的记录依次插入到R[1..i]中,直到生成含有n个记录的有序区; 在插入的某一中间时刻,存在两个区,一个是R[1..i-1原创 2014-04-30 18:00:02 · 673 阅读 · 0 评论 -
快速排序算法
基本思想: 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。原创 2014-04-30 22:03:25 · 3707 阅读 · 0 评论 -
希尔排序算法
基本思想: 希尔排序(Shell Sort)是插入排序的一种。因D.L.Shell于1959年提出而得名。原创 2014-05-01 10:23:49 · 845 阅读 · 0 评论 -
冒泡排序算法
交换排序的基本思想是:两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。原创 2014-07-12 20:47:57 · 634 阅读 · 0 评论 -
直接选择排序
选择排序(Selection Sort)的基本思想是:每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的子文件的最后,直到全部记录排序完毕。 常用的选择排序方法有直接选择排序和堆排序。原创 2014-07-12 21:38:08 · 1716 阅读 · 0 评论 -
堆内存和栈内存详解
堆:顺序随意 栈:先进后出 堆和栈的区别 一、预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的转载 2014-10-08 11:02:40 · 559 阅读 · 0 评论 -
斐波那契数列的几种计算机解法
斐波那契数列传说起源于一对非常会生的兔子。定义:这个数列有很多奇妙的性质(比如 F(n+1)/F(n) 的极限是黄金分割率),用计算机有效地求解这个问题的解是一个比较有意思的问题,本文一共提供了4种解法。解法一:递归这是最最最直观的想法,是每个人都能编写的简单程序,优点是非常明显的:简单易懂,清晰明了。但是缺点就是效率非常低,时间复杂度是指数级的。举转载 2014-10-08 23:18:15 · 1212 阅读 · 0 评论 -
链表操作
链表操作(不带头节点的)链表其实蛮简单的,但如果一段时间不用的话马上让你写还真不一定能写的出来,这里总结一下,作为温习。结构声明typedef int elemType;//根据自己的需要来 //单链表结点类型 typedef struct ListNode{ elemType element; struct ListNode *next; }Node; 初始化//原创 2016-08-31 13:44:02 · 569 阅读 · 0 评论 -
B树、B+树、红黑树、AVL树
B树、B+树、红黑树B树B树红黑树定义及概念B树B树红黑树AVL树B树和B树的区别红黑树的应用及和B树区别AVL树和红黑树B树M阶的插入和删除插入删除定义及概念B树二叉树的深度较大,在查找时会造成I/O读写频繁,查询效率低下,所以引入了多叉树的结构,也就是B树。关于B树的由来,这里阐述了B-tree名字来源以及相关的开源地址。 阶为M的B树具有以下性质: 1、根节点在不为原创 2016-09-15 15:33:48 · 3405 阅读 · 0 评论