
Data Structure
文章平均质量分 81
主要讲解数据结构的一些基础知识,并通过实例来深度剖析数据结构的本质已及相关操作,内容易于理解和详实。
_昨日重现
专注于移动端系统开发
展开
-
快速排序法详解
快速排序 快速排序是对冒泡排序的一种改进。它的基本思想是:通过一躺排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一不部分的所有数据都要小,然后再按次方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。大概算法是先找到某一元素的确切位置,再把该元素前后分成两半,没找到就移动,找到就赋值!具体做法是先移H,左边找到比val大的原创 2013-07-23 15:14:27 · 2551 阅读 · 0 评论 -
链式二叉树
树 树可以简单理解为是由节点和边(存放指针域,指向下一个结点的地址)组成,每个节点只有一个父节点(根节点除外),但可以有多个子节点。树只有一个称为根的节点,树有若干个子树,且这些子树本身也是一棵树。树里面有很多专业术语,常用的有:深度(从根节点到最底层结点的层数,根节点是第一层),叶子节点(没有子节点的节点),非叶子节点(也叫非终端节点,含有子节点),度(某个节点含有子节点的原创 2013-07-22 22:37:17 · 2084 阅读 · 0 评论 -
递归、函数的调用机制及汉诺塔问题
递归 递归一个函数直接或间接调用自己的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。递归要满足3个条件:一是递归必须得有一个明确的中止条件,要不然就很可能陷入死递归;二是递归函数所处理数据(或问题)的规模必须在递减,n个问题的解决依赖于n-1个问题的解决;三是这个转化必须是可解的。 函数的调用机制当在一个函数的运行期间调用另一个函数原创 2013-07-22 14:34:20 · 2691 阅读 · 0 评论 -
静态循环队列的相关操作及详解
循环队列 队列通常分为两类:一是动态链式队列(其核心思想为链表,只是少了链表的一些功能),二是静态(顺序)队列(其核心是用数组实现,准确一点讲是由向量空间来实现,向量空间好比是开辟的一块内存,由我们的指针来指向其地址)。顺序队列实际上是运算受限的顺序表,由于队列的队头和队尾的位置是变化的,通常设置两个指针front和rear分别指示队头元素和队尾元素在向量空间中的位置,它们的初值原创 2013-07-21 13:35:20 · 2761 阅读 · 0 评论 -
动态链式队列详解及完整实例演示
队列 队列(Queue)是只允许在一端(队尾rear)进行插入,而在另一端(队头front)进行删除的运算受限的线性表。它是一种可以实现“先进先出”(FIFO)的存储结构。队列在具体应用中通常用链表或者数组来实现,因此我们也常常将队列分为静态队列(数组队列),链式队列(主要以链表方式进行操作)。当队列中没有元素时,我们称之为空队列。一般队列的存储结构是顺序存储,当队列的存储结构是链原创 2013-07-20 18:09:14 · 3197 阅读 · 1 评论 -
对栈的相关操作详解及堆区、栈区的理解
栈的定义和分类 栈是我们线性结构中的一种常见应用。在函数调用、内存分配等也常常跟栈打交道,栈可以简单的理解为是一种可以实现“先进后出”的存储结构。栈又分为静态栈和动态栈。静态栈以类似于数组方式存放,而动态栈以类似于链表的方式存放。栈区(Stack)和堆区(heap) 栈区主要用于存放局部变量、定义的形参,在定义时局部变量或形参时由系统自动分配,在函数结束原创 2013-07-19 23:55:45 · 2383 阅读 · 0 评论 -
对链表的相关操作及数据结构的再理解
结点的操作 由于链表是n个离散结点彼此通过指针相连,所以对链表的相关操作主要通过头指针(存放了头结点的地址)对结点进行操作来实现。 1.如何将p所指向的结点插入到p所指向结点的后面? 有两个方法 第一种: 采用临时变量 r=p->pNext;原创 2013-07-19 00:43:25 · 2927 阅读 · 0 评论 -
链表的创建和遍历
前言 链表是数据结构中非常重要的一种线性结构,它在线性结构中是离散存储的。在讲链表之前,先谈下typedef的用法,因为typedef在定义结构体时经常用到,可以起到很好的简化数据类型书写的作用。typedef(为数据类型取别名)的用法实例说明:#includetypedef struct Student{ int sno;//学号 char name[原创 2013-07-18 10:58:48 · 1884 阅读 · 0 评论 -
线性结构之数组
数组 把所有节点用一根直线串起来而形成的一种数据结构称为线性结构。 今天我想谈谈线性结构中的数组。大家都知道数组是连续存储的一种线性结构,而数组名为该数组元素的首地址。如int a[3]={1,2,3};a就等价于&a[0],而&a[0]本身是int *类型,所以我们通常利用数组名来与指针建立联系,进而跨函数使用内存对数组进行操作。 实例说明:#incl原创 2013-07-17 12:31:45 · 2283 阅读 · 0 评论 -
结构体的使用和动态内存的分配及释放
结构体 什么是结构体?结构体是用户根据实际需要自己定义的复合数据类型。结构体的出现是为了表示一些复杂的数据,而普通的数据类型无法满足要求。结构体的定义:struct Student //struct Student为一个复合数据类型,结构体名字为Student,含有三个成员sno,name,age{ int sno; char name[20原创 2013-07-17 09:46:04 · 14691 阅读 · 1 评论 -
谈谈我对指针的认识
前言 因为之前我学的是信息与计算这个专业(计算机这个专业是大二刚转的),所以一开始接触数据结构(大二开的)这门课程,感觉很吃力,不过后来发现也确实很难。 为了学习数据结构,去过图书馆借了相关书籍。一开始看的时候简直就是一头雾水,什么都不懂,连指针是什么也不知道,看了一两天就放弃了。想想还是得把基础捡起来,然来看了问同学建议的一些视频,大概看了1个月左右,决定把再原创 2013-07-16 22:12:18 · 2568 阅读 · 0 评论