随笔分类 -  数据结构与算法分析-----C语言

数据结构及编程思想
摘要:队列的优化中,重新实现的方式确实提高了顺序队列和链式队列的效率, 可是实现过程还是比较复杂 。 可是这也是没有办法的 , 直接复用链表虽然可以实现队列 ,但是效率却不够好呀! 是不是有即能复用之前的代码 , 又比较高效的队列实现算法呢? 算法框架: 特殊队列的创建: 入队列: 出队列: 头元素: 队 阅读全文
posted @ 2018-09-04 17:40 Liu_Jing
摘要:之前实现的顺序栈和链式栈的进栈和出栈操作时间复杂度都是O(1)。而用同样的方式实现队列,进队和出队的复杂度总有一个是O(n) 。顺序队列的瓶颈 顺序队列 线性表的第一个元素作为队头 线性表的最后一个元素作为队尾 入队的新元素是在线性表的最后,时间复杂度为O(1); 出队时需要将后续的所有元素向前移动 阅读全文
posted @ 2018-09-02 17:49 Liu_Jing 阅读(296) 评论(0) 推荐(0)
摘要:队列的定义 队列是一种特殊的线性表 队列仅在线性表的两端进行操作 队头(front):取出数据元素的一端 队尾(rear):插入数据元素的一端 队列不允许在中间部位进行操作! 队列的性质 队列的一些常用操作 创建队列 销毁队列 清空队列 进队列 出队列 获取队头元素 获取队列的长度 队列的顺序存储实 阅读全文
posted @ 2018-08-27 19:54 Liu_Jing 阅读(261) 评论(0) 推荐(0)
摘要:递归与回溯 8皇后问题: 在一个8*8棋盘上,有8个皇后,每个皇后占一格;要求两个皇后不能处在同一行、同一列或同一对角线上。 找放置的位置,方向很重要,当从第一行开始,放置皇后的位置后,第二行放置时要考虑上一行的放置。 即3个方向为(-1,-1),(-1, 0),(-1,1) #include <s 阅读全文
posted @ 2018-08-21 21:58 Liu_Jing 阅读(272) 评论(0) 推荐(0)
摘要:递归的数学思想 递归的数学表示 斐波拉契数列递归解法 #include <stdio.h> int fibonacci(int n) { if( n > 1 ) { return fibonacci(n-1) + fibonacci(n-2); } else if( n == 1 ) { retur 阅读全文
posted @ 2018-08-20 18:39 Liu_Jing 阅读(318) 评论(0) 推荐(0)
摘要:C 语言中常说“ 局部变量在栈上分配空间”, 那么这个地方的“ 栈” 和我们之前学习的栈数据结构有关系吗? 函数调用时的栈 活动记录 活动记录是函数调用时一系列相关信息的记录 函数调用过程 程序中的栈 程序中的栈 递归调用中的栈变化 退栈 小结 阅读全文
posted @ 2018-08-20 16:51 Liu_Jing 阅读(250) 评论(0) 推荐(0)
摘要:几乎所有的编译器都具有检测括号是否匹配的能力 编译器中的括号检测能力是如何实现的呢? 匹配函数: 代码复用链式栈的,main函数更改如下: #include <stdio.h> #include <stdlib.h> #include "LinkStack.h" /* run this progra 阅读全文
posted @ 2018-08-16 11:19 Liu_Jing 阅读(273) 评论(0) 推荐(0)
摘要:栈的定义 * 栈仅能在线性表的一端进行操作 栈顶(Top) : 允许操作的一端 栈底(Bottom) :不允许操作的一端 栈的性质 栈的操作 # 栈的一些常用操作 * 创建栈 * 销毁栈* 清空栈* 进栈* 出栈* 获取栈顶元素* 获取栈的大小 栈的顺序存储实现 下面的顺序栈是不能支持结构体的! 现 阅读全文
posted @ 2018-03-19 20:23 Liu_Jing 阅读(299) 评论(0) 推荐(0)
摘要:单链表的局限:  单链表的结点都只有一个指向下一个结点的指针 单链表的数据元素无法直接访问其前驱元素 逆序访问单链表中的元素是极其耗时的操作!!! 单链表的改进  双向链表的定义 在单链表的结点中增加一个指向其前驱的pre指针 如下图所示: 循环链表的操作  双向链表的新操作  获取当前游 阅读全文
posted @ 2018-03-01 17:35 Liu_Jing
摘要:单链表的局限 有些线性关系是循环的,即没有队尾元素 一年12个月,是重复的,12月过了又要回到1月,对于这样的线性元素规律,前人给我指明了一条更好的道路:循环链表。 循环链表拥有单链表的所有操作  创建链表 销毁链表 获取链表长度 清空链表 获取第pos个元素操作 插入元素到位置pos 阅读全文
posted @ 2017-08-07 21:07 Liu_Jing 阅读(727) 评论(0) 推荐(0)
摘要:单链表完美解决了顺序表的问题 ! 还有其它改进顺序表的方法吗? 牛人小C C 。 出场 。。。顺序表有优势 , 单链表也同样有缺点 单链表的相对劣势 单链表的实现严重依赖指针 ! 数据元素中必须包含一个额外的指针域 ! 没有指针的程序设计语言无法实现! 顺序表的改进 静态链表的逻辑结构 静态链表相关 阅读全文
posted @ 2017-07-17 10:29 Liu_Jing 阅读(216) 评论(0) 推荐(0)
摘要:上节课学了线性表的顺序存储结构,可是顺序表的最大问题是插入和删除都需要移动大量的元素! 如何解决呢? 讨论: 这就是我们链式存储结构的思想。 链式存储定义:为了表示每个数据元素与其直接后继元素之间的逻辑关系 , 每个元素除了存储本身的信息外 , 还需要存储指示其直接后继的信息。 链式存储逻辑结构:n 阅读全文
posted @ 2017-07-15 17:25 Liu_Jing 阅读(445) 评论(0) 推荐(0)
摘要:线性表的顺序存储结构(重点) 顺序存储的定义:线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。 首先创建一个.h文件,把所有的函数的api函数写出来。 具体如下:首先创建线性表,销毁线性表,清除线性表,线性表的深度,线性表的容量,线性表的插入,获取线性表的某一个数,删除 阅读全文
posted @ 2017-07-14 10:24 Liu_Jing 阅读(342) 评论(0) 推荐(0)
摘要:此图为线性表 A:友谊是平等的。不能用线性表表示。 B:一个上级可以管多个下级。不能用线性表表示。 C:一个人可以占多个位置(帮人占座),但帮占的位置不满足线性表表示关系。 D:最前面只有一个后驱,最后面只有一个前驱,数据有限,中间的有一个前驱和一个后驱,能用线性表表示。 小结 阅读全文
posted @ 2017-07-13 21:18 Liu_Jing 阅读(218) 评论(0) 推荐(0)
摘要:算法效率的度量 * 事后统计法 比较不同算法对同一组输入数据的运行处理时间 * 缺陷 为了获得不同算法的运行时间必须编写相应程序 运行时间严重依赖硬件以及运行时的环境因素 算法的测试数据的选取相当困难 事后统计法虽然直观 , 但是实施困难且缺陷多 ,一般不予考虑* 事前分析估算 依据统计的方法对算法 阅读全文
posted @ 2017-07-12 10:08 Liu_Jing 阅读(218) 评论(0) 推荐(0)
摘要:程序是否越短越好? 是否别人看不懂就证明自己很厉害? 程序效率越高越好,并不是越短越好。在某些场合下,我们需要写出别人看不懂的算法最好,但是在一个团队开发中,算法可读性应该尽可能高。 数据结构与算法 算法的定义: 算法的特性: 算法设计的准则: 阅读全文
posted @ 2017-07-12 08:51 Liu_Jing 阅读(220) 评论(0) 推荐(0)
摘要:数据结构起源 ~ 计算机从解决数值计算问题到解决生活中的问题~ 现实生活中的问题涉及不同个体间的复杂联系~ 需要在计算机程序中描述生活中个体间的联系 数据结构主要研究非数值计算程序问题中的操作对象以及它们之间的关系 关键概念数据 – 程序的操作对象 , 用于描述客观事物数据的特点 : 可以输入到计算 阅读全文
posted @ 2017-07-10 11:09 Liu_Jing 阅读(253) 评论(0) 推荐(0)
摘要:理解程序的本质 程序是为了实际的问题而存在从本质上而言,程序是解决问题的步骤描述 一小步的进阶 首先理解实际问题!  确认问题类型– 如:数值计算,求最小值个数 确认求解的步骤– 如:打开文件,读数据,关闭文件,计算和问题:如何判断求解步骤的好坏,如下列所示: 运行结果如图: 从结果看出,三个函 阅读全文
posted @ 2017-07-09 13:48 Liu_Jing 阅读(230) 评论(0) 推荐(0)