
数据结构
Mr_len
这个作者很懒,什么都没留下…
展开
-
单链表结构
链表是一种复杂的数据结构,其数据之间的相互关系使链表分成三种:单链表、循环链表、双向链表,下面将逐一介绍。 单链表:单链表有一个头节点head,指向链表在内存的首地址。链表中的每一个节点的数据类型为结构体类型(数据的结构类型,有一个数据域和指针域共同组成了这种新的数据),节点有两个成员:整型成员(实际需要保存的数据,可以是泛型)和指向下一个结构体类型节点的指针即下一个节点的地址。链表按此结构对各节原创 2016-08-24 21:38:11 · 1393 阅读 · 0 评论 -
数据结构中的栈和递归以及队列
栈定义:是限定仅在表尾进行插入或删除操作的线性表。表尾 称为栈顶,表头称为栈底,不含元素的空表称为空栈(记得以前学汇编语言的时候,经常讲压栈、出栈当是就不明白,现在算是明白了一点了,栈并不是能把所有不同的东西都压入的,我猜测可能有多种栈,按元素类型来划分,比如有函数栈,变量栈等)。 栈表示和实现:栈也是像线性表一样可以用数组或者链表来实现,大多采用链表。栈的操作就是在添加到链表尾和从链表尾取出。C原创 2016-08-31 17:26:03 · 599 阅读 · 0 评论 -
线性表的顺序表示
数据结构中的线性表用不同的语言书写线性表的顺序表示指的是用一组地址连续的存储单元依此存储线性表的数据 元素。说白了就是一个可以自动增长长度的数组;首先数组是不可能动态增长的,必须手动更改内存大小,不同的语言有不同的实现方式,C语言使用malloc()函数 来动态扩展内存,其它的高级语言比如java则通过new对象来扩充,php语言是底层直接支持动态数组的,底层也是同样的原理封装。 C语言:#inc原创 2016-08-23 21:56:22 · 410 阅读 · 0 评论 -
堆排序
1、堆定义堆定义如下:n个元素的序列{k1,k2,k3,…..,kn}当且仅当满足一下关系时,称为堆。 就是这两个公式,仔细体会,i是指结点下标,ki指第i个结点,i的范围(i=i,2,……,n/2)n是要排序的长度。 将一维数组看成是一个完全二叉树,则堆的含义表明,完全二叉树中所有非终端结点(叶子结点)的值均不大于(或者均不小于)其左右孩子结点的值。 例如:[1,2,3,17,19,36原创 2017-01-02 23:59:17 · 445 阅读 · 0 评论 -
快速排序
1、基本思想 1、从数组中选择一个数作为基准 2、分区过程,将把比这个数大的数全放到它的右边,小于它的数放在它的左边 3、再对左右区间进行第二步操作,直到他们区间只有一个数。 一次快排的具体操作: 第一步:取第一个和最后一个元素的指针,并设置一个基准值,比如可以把第一个元素设置为基准,(或者用更复杂的规则生成这个基准,这样有利于排序的稳定性,比如可以选用随机选取基准,或者原创 2017-01-05 10:57:47 · 409 阅读 · 0 评论 -
golang 各种排序大比拼
1、准备工作准备数据: 生成随机数并写入文件,之后在把数据读取出来//新生成整数随机数,并存储在txt文件中, func NewIntRandm(fileName string, number, maxrandm int) { filename := fileName file, err := os.Create(filename) if err != nil {原创 2017-01-05 16:14:45 · 3884 阅读 · 0 评论 -
快速排序的优化
1、改进办法 对于小数组,插入排序比快速排序快,并且切分到小数组的时候,快速的排序的递归深度很大 因为递归,快速排序在小数组中也会调用自己 调整pivot的值,(可使用三数取中,或者随机数等) 最后一种最优的排序:三向切分快速排序 因此在排序小数组是应该使用应该切换为插入排序, //这是golang中的源码,也是这种做法,当只有12(这个值在5~15之间都能获得不错的性能)的时候就是用下原创 2017-01-07 15:49:56 · 583 阅读 · 0 评论