数据结构与算法
兜里有糖心里不慌
前路漫漫,但心之所向。
展开
-
基本概念和基础知识
ps:回家第一天,复习开始了,嘎嘎嘎。数据:对客观事物的符号化表示,在计算机科学中是指能够输入到计算机中并被计算机处理的符号的总称。例如:一张照片存储到计算机中,则计算机中代表照片的所有0和1称为数据。数据元素:数据的基本组成单位,常作为一个整体进行考虑和处理。通常一个数据元素由若干个数据项组成。例如: 一本书的信息为一个数据元素,而其是由若干个数据项组成(书名,作者,出版日期等),而数据项是数据原创 2016-02-01 00:28:39 · 641 阅读 · 0 评论 -
《剑指》41
题目:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得他们的和证号是s。如果有多对数字的和等于s,输出任意一对即可。方法一:定义两个指针,分别指向数组第一个和数组最后一个,然后判断两者的和与s的关系:若两者的和大于s,则指向数组最后一个的指针向前移动若两者的和等于s,则直接输出这两个数若两者的和小于s,则指向数组第一个的指针向后移动原创 2016-10-27 11:41:30 · 330 阅读 · 0 评论 -
面试中的 10 大排序算法总结
本文转载自码农网:http://www.codeceo.com/article/10-sort-algorithm-interview.html#0-tsina-1-10490-397232819ff9a47a7b7e80a40613cfe1 查找和排序算法是算法的入门知识,其经典思想可以用于很多算法当中。因为其实现代码较短,应用较常见。所以在面试中经常会问到排序算法及其相关的问题。但万变不离其转载 2016-11-07 21:40:10 · 622 阅读 · 0 评论 -
《剑指》42
题目:输入一个英文句子,翻转句子中单词的顺序,但是单词内支付的顺序不变,为简单起见,标点符号和普通字母一样处理。例如输入字符串“I am a student.”则输出“student. a am I ”。翻转字符串可以先翻转整个字符串,然后再将每个单词的字符翻转过来。public class Offer42 { public static void main(String[] args) {原创 2016-10-27 14:40:32 · 395 阅读 · 0 评论 -
《剑指》3
题目:在二维数组中,每一行都是按照从左到右的顺序递增排序,每一列都是按照从上到下递增排序。请完成一个函数,输入一个这样的二维数组和一个整数,判断数组中是否含有这个整数。方法一:最直观的方法肯定是遍历整个数组,寻找是含有给出的整数。/** * 遍历数组 * @param array * @param target * @return */ pu原创 2016-10-27 14:56:20 · 364 阅读 · 0 评论 -
《剑指》4
题目:实现一个函数,把字符串中的每个空格替换成“%20”。例如输入“We are happy”,则输出“We%20are%20happy”方法一:最直观的就是遍历字符串,每当遇到一个空格的时候将其替换成%20,然后继续扫描,但是得每一次都得移动空格之后的所有字符。/** * 遍历字符串,遇到空格就替换成%20 * @param str * @return */原创 2016-10-27 15:57:49 · 396 阅读 · 0 评论 -
哈希表及其操作
哈希表定义:一般的查找都是基于比较的,其关键字和在结构中的位置是没有确定的对应关系的,查找的效率依赖于比较的次数。 理想的情况是,每个记录的关键字和其在结构中的位置是有确定的关系的,就像是函数的变量和因变量一样,对于每一个KK,有一个f(K)f(K)与之对应。这样我们在查找时候就可以根据给定的关键字K而直接找到其对应的镜像。此时,我们称这个对应关系ff为哈希函数,按这个思想建立的表称原创 2016-10-17 22:18:56 · 1107 阅读 · 0 评论 -
《剑指》6
题目:给定一颗二叉树的前序和中序遍历结果,重构该二叉树,并输入其头结点package offer;public class offer6_ReBuildTree { /** * 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树,并输出其头结点。 * 假设输入的两种遍历结果中都不含重复的数字 * @param args */ public原创 2016-11-10 18:54:29 · 406 阅读 · 0 评论 -
《剑指》7
题目:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。package offer;import java.util.Stack;/** * 用两个栈来实现一个队列,完成队列的Push和Pop操作。 * 队列中的元素为int类型。 * @author WQC * */public class offer7_TwoStackImplQueue {原创 2016-11-10 20:36:35 · 449 阅读 · 0 评论 -
树的Java实现
关于View和View事件的基础知识:View:View是Android中所有的控件的基类,Android中所有的控件基本可以分为两类,一种是只有其自身的控件(类似于web中的单标签),另一种是在这个组件中可以放置其他的View组件(类似于web中的双标签),即View和ViewGroup。这样根据控件之间的相互嵌套就形成了树一样的结构,即控件树。关于View的更多的介绍可以看这篇博文:Androi原创 2016-11-07 17:36:30 · 541 阅读 · 0 评论 -
常见查找算法(Java实现)
查找的性能分析:对于查找算法而言,常用“其关键字和给定值进行过比较的记录个数的平均值”作为衡量查找算法的依据。定义:为了确定记录在查找表中的位置,需要和给定的值进行比较的关键字个数的期望值称为查找算法在查找成功时的平均查找长度。 对于含有n个记录的表。查找成功时的平均查找长度为ASL=∑i=1nPiCiASL= \sum _{i=1}^nP_iC_i 其中PiP_i为查找表中第ii个记录原创 2016-09-29 17:33:46 · 9683 阅读 · 2 评论 -
图及其操作(C语言版)
图及其操作(C语言版)标签(空格分隔): 未分类图的定义和性质:定义: 图是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,R),其中,G表示一个图,V是图G中顶点的集合,R是图G中边的集合。顶点:在图中的数据元素通常叫做顶点。弧头/弧尾:若<v,w>∈VR<v,w>\in VR则<v,w><v,w>表示从vv到 ww的一条弧,且称vv为弧尾或初始点,称ww为弧头或终端点。有原创 2016-09-27 22:23:12 · 6901 阅读 · 0 评论 -
线性表详解(c语言版)
放假回家第三天,接着复习。啦啦啦: 1. 线性表:线性表是最常用且最简单的一种数据结构,一个线性表就是若干个数据元素的有限序列。 2. 线性表的操作: - InitList(&L)构造一个空的线性表 - DestroyList(&L)销毁线性表 - ClearList(&L)清空线性表 - ListEmpty(L) 判断线性表是否为空 -原创 2016-02-17 10:47:57 · 1912 阅读 · 0 评论 -
栈和队列(C语言版)
栈和队列是在程序中最常被用到的数据结构,其重要性不言而喻。栈:定义:限定仅在表尾进行插入和删除操作的线性表,因此表尾称之为栈顶,表头为栈底,重要特点是后进先出(LIFO)操作: InitStack(&S) 初始化一个栈DestoryStack(&S)销毁一个已经存在的栈ClearStack(&S)清空一个栈StackEmpty(S)判断已存在的栈是否为空St原创 2016-02-18 00:21:35 · 6792 阅读 · 0 评论 -
串及其操作(C语言版)
串(或者是字符串):由一个或者多个字符组成的有限序列,一般标记为 s = ‘abcd…’。其中s称之为串名;串中字符的数目n称为串的长度 ;零个字符的串称为空串;串中由任意个连续的字符组成的子序列称为子串;包含子串的串相应的称为主串;字符在串中的位置称为该字符在串中的位置;子串在主串中的位置以子串第一个字符的位置为准。串相等:当且仅当串中的长度相等,且各个对应位置的字符都相等时才相等。 空串和空格原创 2016-03-05 22:19:57 · 974 阅读 · 0 评论 -
算法基础
经典算法:复习算法中……….有不对的地方请指正。穷举搜索法:描述:穷举搜索算法是对可能是解的众多候选解按照某种顺序进行逐一枚举和检验,并从中找出那些符合要求的候选解作为问题的解。(也就是暴力破解咯+_+)注意点:虽然穷举搜索是把所有的可能解都能行枚举和检验,但是并不是杂乱的进行,而是按照某种顺序,使得其不漏掉解,也不重复搜索。当然了常见的肯定是顺序搜索咯。迭代算法:递推算法:原创 2016-04-12 09:50:32 · 790 阅读 · 0 评论 -
Java中HashMap详解
本文转载自alex09的ITeye博客原文连接地址HashMap 和 HashSet 是 Java Collection Framework 的两个重要成员,其中 HashMap 是 Map 接口的常用实现类,HashSet 是 Set 接口的常用实现类。虽然 HashMap 和 HashSet 实现的接口规范不同,但它们底层的 Hash 存储机制完全一样,甚至 HashSet 本身就采用 Hash转载 2016-04-18 19:56:50 · 582 阅读 · 0 评论 -
常见排序算法(C语言版)
简单排序算法: 一些常见的排序算法实现O(∩_∩)O~插入排序:直接插入排序:最简单的排序方式,将一个数据插入到已经排好序的有序表中,得到一个新的,记录数增一的有序表。折半插入排序:由于插入排序是在一个有序表中进行查找和插入,则可知查找操作可以用折半查找来实现,也可极大地减少复杂度。希尔排序:又称为“缩小增量排序”。将整个待排序序列分割成若干个子序列分别进行插入排序,待整个序列中的的记录基本原创 2016-03-12 17:59:09 · 640 阅读 · 0 评论 -
树及其操作(C语言版)
树及其操作(C语言版)标签(空格分隔): 数据结构 树树定义和性质:树的定义:树是n个(n>=0)有限节点组成一个具有层次关系的集合。根及子树:在任意一个非空树中,有且仅有一个特定的称为根的结点,当n>1时,其余结点又可以分为m(m>0)个互不相交的有限集T1,T2,...Tm T_1,T_2,...T_m,其中每一个集合本身又是一颗树,并称为根的子树。基本操作:InitTree(&T):构造原创 2016-09-23 09:50:34 · 10526 阅读 · 1 评论 -
《剑指》5
题目:从尾到头打印一个单链表方法:很容易的就想到了栈先进后出的特性,可以把链表从头到尾遍历,同时将结点入栈,然后将栈中的元素依次弹出。这里写代码片原创 2016-11-01 15:01:12 · 344 阅读 · 0 评论