数据结构
文章平均质量分 81
dressrosa
I would be better,I will be better
展开
-
线性表-顺序表的简单知识
正在重新学数据结构,觉得算法和算法思想真的是很重要也是相融相通的。程序的具体完成只是时间给你的任务而已,理解了算法,然后根据你的算法思想一步一步的写出来,感觉很赞。记录下自己慢慢学习的过程,留着自己以后回来复习,也希望为那些和我一样一直很渣却迫切想要进步的人服务。顺序表的结构其实就是一个数组的组成。数组有固定的长度,里面存了一些数据。然后有一个灰常重要的头指针typedef struct原创 2015-02-02 15:47:11 · 520 阅读 · 0 评论 -
堆排序
堆排序是先将待排序的数看成完全二叉树的结构排列.以大顶堆为例,堆顶数总是大于左右孩子.堆排序的思想:1.现将所有数初始化成一个大顶堆2.将堆顶a[0]和最后一个子节点a[len-1]交换位置3.将余下的数再重新构建成大顶堆4.重复2,3过程,直到全部排序完成(截图于百度百科)构建一个简单的大顶堆的思路就是从第一个非叶子节点开始(至原创 2016-09-21 18:21:40 · 267 阅读 · 0 评论 -
希尔排序
希尔排序是对直接插入排序的一种改进,利用了直接插入排序在数量少,有序性比较好的情况下效率高.所以产生增量的概念,根据增量d将数组分割为几个子数组,然后对子数组进行直接插入排序,于是在增量d逐步递减的时候,数组的有序性越来越好,所以子数组越来越大的情况下,排序的效率依然很高.public static void shellSort(int a[]) {int i, j, d;int原创 2016-09-18 17:26:09 · 213 阅读 · 0 评论 -
直接插入排序
直接插入排序就是 每插入一个新数的时候重新排一次序.假如有5个数 5 3 4 1 2,要求按照从小到大排序,那么直接插入的思想是这样的,我们先假设起始状态下我们只有5这一个数的数组,然后有个数3要插入这个数组,这时我们已经默认数组有俩个数了,就是{5 ,_},然后比较,5>3,那么将5赋值给3这个位置,变成{5,5},再将拿出去的3放回5原来的位置去,变成{3,5}.原创 2016-09-13 15:56:25 · 311 阅读 · 0 评论 -
冒泡排序的简单实现
冒泡的意思就是一次循环中依次比较相邻位置的数,满足则交换。第一个for代表次数,第二个for来真正的两两比较。 冒泡的关键在于循环条件的次数确定,先看第一个for循环是length-1, 比如5个数 5 3 1 2 0,那么看第一次比较后变成3 1 2 0 5 第二次变成 1 20 3 5 第三次变成 1 0 2 3 5 第四次变成 0 1 2 3 5 最后一次不需要比较了,肯定最原创 2015-03-18 16:44:26 · 407 阅读 · 0 评论 -
循环队列的简单知识
队列其实也是链表,这里讲的是顺序表示。队列,顾名思义,就是排队的队形。按照专业一点就是FIFO(first in first out) 原则,从对列头出列,从对尾入列。因为循环队列最利用效率,也稍微增加了难度,所以要记住循环队列的表示方法。其实很多数据结构都有很多种写法,重要是理解其思想,代码完成只是让自己更加透彻的掌握,每一种实现方式都是按其思想一步一步完成的。先贴出结构体:原创 2015-03-06 19:37:45 · 783 阅读 · 0 评论 -
二叉排序树的一些简单操作
二叉排序树就是左孩子比根节点小,右孩子比根节点大,左小右大的那种二叉树。从定义来看,二叉排序树是不可能有俩个数是相同的。二叉排序树是为了查找时更加有效率,查找的时候如果小,就往左边跑,一下子就去掉了整个右边。#include #include #include typedef float datatype;typedef struct BiTNode { datatype原创 2015-03-16 18:59:51 · 458 阅读 · 0 评论 -
二叉树的先中后序遍历的递归和非递归实现
二叉树的遍历真的很有意思,而且递归和非递归的实现的思想都很精妙。真心觉得创造出这种数据结构的人是多么炫酷。二叉树的遍历就是把所有节点都走一遍,通常有三种遍历方式,先序遍历:中左右;中序遍历:左中右;后序遍历:左右中这些原理当然没啥深究的,记住就行。#include #include #include //二叉树typedef struct ErNode { int data原创 2015-03-15 18:01:21 · 740 阅读 · 0 评论 -
串的kmp模式匹配
串就是很多字符组在一起,就是一个字符数组。串的操作不是很复杂,但是查找子串却很麻烦。我是参考大话数据结构这本书学习的,看了n遍,基本思想是懂了(但是还没透彻),我把我所能理解的记录下来。 先说传统的也就是正常思维都能想出来的方法,实现也很简单。先从概念上理解,假设我们有一个字符串abcdefgh,有一个子串ef那么我们平常应该怎么想。肯定是把ef拿过去一个一个的比,第一个比较原创 2015-03-18 23:12:36 · 407 阅读 · 0 评论 -
栈的一些简单操作
我觉得栈应该应用是很多的吧,不过现在说的栈只有基本的操作,知道她了解她。栈就是一个先进后出的链表,我说的是链式栈哈。我觉得顺序栈应该叫压箱子,链式栈该叫码砖。因为顺序栈代表有固定的深度,链式栈随便多长。入栈就是一个一个的压,每个节点指向刚刚她压住的那一个。我觉得就是初始化能够理解了,出入栈的操作很简单的。我觉着越简单的数据结构就要越理解深一点(完全理解不知道该是啥程度),因为以后很多东原创 2015-02-27 09:53:59 · 376 阅读 · 0 评论 -
二叉树的一些简单操作
二叉树的概念就不用多说了,根节点,左右孩子,blablabla。二叉树的定义就是一个递归的定义,所以很多二叉树问题我们都可以用递归来轻松的解决。递归有时候真的太神奇了。然后粘贴书上的一些二叉树的必要的知识点吧。二叉树分为完全二叉树(满二叉树的基础上节点从左往右有序排列),满二叉树(除了叶子节点,每个节点都有左右孩子);一般二叉树的重要性质:1 在二叉树的第i层上最多有2i-1个节点原创 2015-03-14 21:14:15 · 336 阅读 · 0 评论 -
线性表-双向链表的简单知识
前面先贴出我之前才学双向链表写的总结,也许更贴近我才接触的感受,虽然也没过去多久。贴出的代码则是我重新写的和之前写的还是有点不一样(写的要稍微好一点点点),前面这就作为代码思想的注释吧,而且我只列出当时重点怎么理解的部分。不过还是先贴出结构体:typedef struct Node { int data; structNode *prior;//原创 2015-02-09 18:31:20 · 462 阅读 · 0 评论 -
线性表--循环链表的简单知识
循环链表核心思想和单向链表其实一样,数据结构没变,就是她的尾节点又指向了头结点,饶了个圈,循环了一下。和双向链表不一样,循环其实就尾节点算有程序上的前驱后继而已。尾指针循环链表就是在原基础上又添加了尾指针指向尾节点,在合并的时候方便,知道了尾指针能得到尾节点和头结点。我只写了和单向链表不一样的部分,注释也只是注释了和单向链表不一样的地方。所以显得(反正单向里面都有了)#incl原创 2015-02-05 19:40:43 · 361 阅读 · 0 评论 -
线性表-链表的简单操作
链表和顺序表的简单区别在于链表是一个一个的节点相连接起来的,通过指针的作用,形成逻辑上的像链子一样的效果。其实对链表的操作和对数组的操作是差不多的,数组是直接操作数据,链表通过节点,间接操作数据。我感觉就像java的封装类一样,setItem(item)为节点赋值,getItem()指针得到节点的值。有点像哈。虽然我学java,但还是感觉用c写这些算法比较明白,也许当初老师就是用c教我们的吧,习惯原创 2015-02-04 16:55:29 · 398 阅读 · 0 评论 -
归并排序
归并排序重点在于合并俩个有序子数组,思想来自于怎么合并俩个有序数组,这里只不过这俩个数组是同一个数组的前后两部分而已.比如 0 1 3 2 4 所以mid=2 俩部分就是0 1 3和 2 4 ,依次比较放入新数组(0 2)取0,然后(1 2)取1,然后(3,2)取2,然后(3,4)取3,这样第一部分取完了,剩下的4直接赋值就行了private static void merge(int原创 2016-10-13 20:48:14 · 225 阅读 · 0 评论