秋过冬漫长

没有比脚更长的路,走过去,前面是个天!


  • 首页

  • 归档

  • 标签

  • 搜索

栈

发表于 2017-05-01 | 分类于 数据结构和算法 |

1. 栈的介绍

注意:本文所说的栈是数据结构中的栈,而不是内存模型中栈

栈(stack)是限定仅在表尾一端进行插入或删除操作的特殊线性表。对于栈来说, 允许进行插入或删除操作的一端称为栈顶(top),而另一端称为栈底(bottom)。不含元素栈称为空栈,向栈中插入一个新元素称为入栈或压栈, 从栈中删除一个元素称为出栈或退栈。

假设有一个栈S=(a1, a2, …, an), a1先进栈, an最后进栈。称a1为栈底元素, an为栈顶元素, 如图3.1所示。出栈时只允许在栈顶进行, 所以an先出栈, a1最后出栈。因此又称栈为后进先出(Last In First Out,LIFO)的线性表。

栈(stack),是一种线性存储结构,它有以下几个特点:

  • 栈中数据是按照”后进先出(LIFO, Last In First Out)”方式进出栈的。
  • 向栈中添加/删除数据时,只能从栈顶进行操作。

栈通常包括的三种操作:push、peek、pop。

  • push – 向栈中添加元素。
  • peek – 返回栈顶元素。
  • pop – 返回并删除栈顶元素的操作。
阅读全文 »

数组和链表

发表于 2017-05-01 | 分类于 数据结构和算法 |

1. 概要

线性表是一种线性结构,它是具有相同类型的n(n≥0)个数据元素组成的有限序列。本章先介绍线性表的几个基本组成部分:数组、单向链表、双向链表;随后给出双向链表的C、C++和Java三种语言的实现

2. 数组

数组有上界和下界,数组的元素在上下界内是连续的。存储10,20,30,40,50的数组的示意图如下

数组

数组的特点是:数据是连续的;随机访问速度快。

数组中稍微复杂一点的是多维数组和动态数组。对于C语言而言,多维数组本质上也是通过一维数组实现的。至于动态数组,是指数组的容量能动态增长的数组;对于C语言而言,若要提供动态数组,需要手动实现;而对于C++而言,STL提供了Vector;对于Java而言,Collection集合中提供了ArrayList和Vector。

阅读全文 »

队列

发表于 2017-05-01 | 分类于 数据结构和算法 |

1. 队列的介绍

队列 (Queue)是另一种限定性的线性表,它只允许在表的一端插入元素,而在另一端删除元素,所以队列具有先进先出(Fist In Fist Out, 缩写为FIFO)的特性。在队列中,允许插入的一端叫做队尾(rear),允许删除的一端则称为队头(front)。 在队列中插入一个新元素的操作简称为进队或入队,新元素进队后就成为新的队尾元素;从队列中删除一个元素的操作简称为出队或离队,当元素出队后,其后继元素就成为新的队头元素

假设队列为q=(a1,a2,…,an),那么a1就是队头元素,an则是队尾元素。队列中的元素是按照a1,a2,…,an的顺序进入的, 退出队列也必须按照同样的次序依次出队,也就是说,只有在a1,a2,…,an-1都离开队列之后,an才能退出队列。

队列

队列(Queue),是一种线性存储结构。它有以下几个特点:

  • 队列中数据是按照”先进先出(FIFO, First-In-First-Out)”方式进出队列的。
  • 队列只允许在”队首”进行删除操作,而在”队尾”进行插入操作。

队列通常包括的两种操作:入队列 和 出队列。

阅读全文 »

排序算法

发表于 2017-05-01 | 分类于 数据结构和算法 |

1. 冒泡排序

冒泡排序(Bubble Sort),又被称为气泡排序或泡沫排序。

它是一种较简单的排序算法。它会遍历若干次要排序的数列,每次遍历时,它都会从前往后依次的比较相邻两个数的大小;如果前者比后者大,则交换它们的位置。这样,一次遍历之后,最大的元素就在数列的末尾! 采用相同的方法再次遍历时,第二大的元素就被排列在最大元素之前。重复此操作,直到整个数列都有序为止!

相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处

阅读全文 »

Android安全加密:消息摘要Message Digest

发表于 2017-05-01 | 分类于 安全加密 |

Android安全加密专题文章索引

  1. Android安全加密:对称加密
  2. Android安全加密:非对称加密
  3. Android安全加密:消息摘要Message Digest
  4. Android安全加密:数字签名和数字证书
  5. Android安全加密:Https编程

1. 常见算法

MD5、SHA、CRC 等

2. 使用场景

  • 对用户密码进行md5 加密后保存到数据库里
  • 软件下载站使用消息摘要计算文件指纹,防止被篡改
  • 数字签名(后面知识点)
  • 百度云,360网盘等云盘的妙传功能用的就是sha1值
  • Eclipse和Android Studio开发工具根据sha1值来判断v4,v7包是否冲突
  • 据说银行的密码使用的就是MD5加密(因为MD5具有不可逆性)
  • 病毒查杀,把每个病毒文件或apk进行MD5后得到一个特征码,拿着特征码去跟病毒数据库对比,特征码一致说明该文件是病毒
  • Git版本控制也使用到了sha1

例如软件下载站数据指纹:http://dev.mysql.com/downloads/installer/

数字摘要

阅读全文 »
1…345…17
JackChan

JackChan

生活不止眼前的苟且,还有诗和远方!

84 日志
11 分类
49 标签
GitHub GitBook 微博 CSDN
友情链接
  • 郭霖
  • 鸿洋
  • 张帅
  • 极客导航
© 2017 JackChan
由 Hexo 强力驱动
主题 - NexT.Pisces