数据结构及算法
xtrb
这个作者很懒,什么都没留下…
展开
-
二分查找的各种情况实现以及一些注意点
转载请注明出处,谢谢:http://blog.csdn.net/u014285517/article/details/45341741说真的自己开始也认为二分查找实在太简单了,不屑一顾,可是上礼拜阿里实习面试真是教会我做人要踏实啊!上礼拜面试的事等下有时间再写一篇文章细谈,现在谈谈二分查找,建议大家先自己写写,然后再看下面的文章,效果更好。 让我们先看看一个朴素版的二分查找(其...原创 2015-04-28 20:38:36 · 1832 阅读 · 0 评论 -
C语言创建二叉树过程中遇到的一些问题
其实这些问题以前也遇到过,不过没总结,遇到又要搞段时间,现在总结下。 比如我们要创建颗如下二叉树,按前序输入,则为AB#D##C##:开始代码写成下面这样:#define TElemType chartypedef struct BiTNode { TElemType data; struct BiTNode *lchild,*rchild;}BiTNode,*BiTre原创 2015-12-31 16:35:29 · 5269 阅读 · 3 评论 -
杨氏矩阵及其变形
杨氏矩阵的概念就不说了。先看个这样的:9 6 4 2 011 7 6 4 113 8 7 5 2每次去除一行一列,显然找个数O(m+n)。再看个这样的:1 2 8 92 3 9 124 7 10 136 8 11 15一开始竟然没想到怎么做,后来发现从左下方开始做就和上面那个从右上角开始做一样了。。。。。原创 2015-10-26 19:47:33 · 423 阅读 · 0 评论 -
去除一个字符串中数字的三种方法
最容易想到的一个方法是碰到数字,其后的所有字符往前移一位,代码如下:void fun(char s[]) { int i = 0,j; while(s[i]) { if(s[i] >= '0' && s[i] <= '9') { j = i; while(s[j]) { s[j] = s[j+1]; j++; } continue; }原创 2016-01-17 00:09:33 · 21925 阅读 · 2 评论 -
java实现二叉树的建立以及前序中序后序遍历
可以结合这篇文章:http://blog.csdn.net/u014285517/article/details/50440829代码如下:package com.company;import java.io.IOException;public class Test5 { public static class TreeNode { char val;原创 2015-12-31 19:41:11 · 615 阅读 · 0 评论 -
只遍历一次,将单链表中的元素顺序反转过来
转载请注明出处。思想很简单,边遍历边将指针反向,顺便将数据往前移一个单位,这样原来的最后一个节点就变成头节点了。代码实现如下:#include#includetypedef struct LNode { int data; struct LNode *next;}LNode,*linkList;linkList creatLinkList(int n) {//创原创 2015-05-01 20:27:03 · 5269 阅读 · 2 评论 -
简单的教务管理系统模拟程序
功能实现:1.用结点保存学校、学院、专业、班级、学生的名称和代码信息。2.正确实现建树、对树上结点的增加、删除、修改操作。3.对节点进行查询统计4.实现一般搜索及模糊搜索源代码如下:#include#include#include#include#includeusing namespace std;#define name_size 100//树中原创 2015-12-15 16:45:33 · 1862 阅读 · 0 评论 -
最长有序子序列
什么是最长有序子序列呢?首先要明白子序列和子串不同,可以不连续,然后保证有序就是有序子序列了。比如有如下数组:I012345678Num[I]147258原创 2015-12-13 22:28:35 · 3662 阅读 · 0 评论 -
动画模拟实现电梯的载客运行过程
动画模拟实现电梯的载客运行过程今天有个搞电子设计竞赛的来问我电梯的运行逻辑的C代码实现,我想到学数据结构那会用C/C++写过一个,不过好久自己现在也记不清了,直接就把源代码给他,让他自己看了。想想自己马上要开始漫长艰苦的数模国赛集训,心情就不好啊。这个测序运行后结果如下:(源代码和.exe可执行文件在下面,不过我把VS卸载了,今天本来想运行下哪个.exe文件,结果没法运行了,说丢失MSVCP120.dll,不过有几张以原创 2015-07-28 15:11:45 · 3271 阅读 · 1 评论 -
约瑟夫环
先看下定义:有M个人围坐成一圈, 编号依次从1开始递增,现从编号为1的人开始报数,报到N的人出列,然后再从下一人开始重新报数,报到N的人出列;重复这一过程,直至所有人出列。求出列次序。不难看出,用循环链表可以比较容易的解决,代码如下。#include#includetypedef struct LinkList{ int data; struct原创 2015-05-07 20:50:34 · 928 阅读 · 0 评论 -
判断链表是否有环为什么快慢指针一定会相遇
判断链表是否有环这个问题应该已经算“经典”问题了,就不说了,百度下一堆一堆的。那么为什么快慢指针一定会相遇?首先两者要相遇,肯定是在那个环里面(比如最好情况慢的指针一踏入环就和快指针相遇)。然后我们要明确快慢指针的速度差为1,两者每移动一下,距离减1,而这个环的最小划分单位就是1,所以显然会相遇。原创 2015-05-15 16:13:34 · 3413 阅读 · 4 评论 -
算法竞赛入门经典-铁轨问题
算法竞赛入门经典-铁轨问题先上题目题目说了一大堆,其实意思就是给你一个大小1-n的序列,让你判断一下是否可以通过1,2,3,,,n这个序列通过进栈出栈来得到这个序列。解题思路书上没说,只给了代码,我这里说下。按一定规则遍历那个序列,只要能遍历完就ok.其实你可以想象1,2,3,,,n也存在一个数组b里,也在遍历,这样便于理解。这样就有两个数组a,b,原创 2015-05-10 18:53:09 · 1591 阅读 · 0 评论 -
辗转相除法证明及其时间复杂度证明
首先看下辗转相除法的递归及非递归代码实现://递归实现int gcd(int a,int b) { return b?gcd(b,a%b):a;} //非递归实现int gcd(int a,int b){ int t; while(b) { t = a; a = b; b = t%b; } return a;}代码实现不难,不过怎么证明呢?其实从递原创 2015-04-30 11:14:04 · 15355 阅读 · 1 评论 -
各种基本排序算法总结
虽然我们用的语言中有排序的函数,我们用的时候直接调用就可以,不过这些经典排序算法中的许多思想以及实现它们过程中的一些编程技巧在我们实际编程中还是被频繁被用到的,作为一个程序员,这是基本功,还是很有必要掌握的。下面算法全部最终按从小到大排序。1.冒泡排序思想:相邻两个数进行比较,如果前一个更大,就和后一个交换,这样每次将未排序部分的最大的数添加到已排好序的部分的第一个,进行...原创 2015-12-20 00:20:03 · 611 阅读 · 0 评论