摘要:判断字符串中的括号是否匹配-C语言 题目:请写一个程序,判断给定表达式中的括号是否匹配。表达式中的合法括号为“(”、“)”、“[”、“]”、“{”、“}”,这三种括号可以按照任意的次序嵌套使用。输入说明有多个表达式,每个表达式占一行。当输入的表达式为空字符串(长度为0)时表示输入结束输出说明对每个表
阅读全文
摘要:c语言中的全排列算法和组合数算法在实际问题中应用非常之广,但算法有许许多多,而我个人认为方法不必记太多,最好只记熟一种即可,一招鲜亦可吃遍天 全排列: #include<stdio.h> void swap(int *p1,int *p2) { int t=*p1; *p1=*p2; *p2=t;
阅读全文
摘要:队列的优化中,重新实现的方式确实提高了顺序队列和链式队列的效率, 可是实现过程还是比较复杂 。 可是这也是没有办法的 , 直接复用链表虽然可以实现队列 ,但是效率却不够好呀! 是不是有即能复用之前的代码 , 又比较高效的队列实现算法呢? 算法框架: 特殊队列的创建: 入队列: 出队列: 头元素: 队
阅读全文
摘要:队列的定义 队列是一种特殊的线性表 队列仅在线性表的两端进行操作 队头(front):取出数据元素的一端 队尾(rear):插入数据元素的一端 队列不允许在中间部位进行操作! 队列的性质 队列的一些常用操作 创建队列 销毁队列 清空队列 进队列 出队列 获取队头元素 获取队列的长度 队列的顺序存储实
阅读全文
摘要:之前实现的顺序栈和链式栈的进栈和出栈操作时间复杂度都是O(1)。而用同样的方式实现队列,进队和出队的复杂度总有一个是O(n) 。顺序队列的瓶颈 顺序队列 线性表的第一个元素作为队头 线性表的最后一个元素作为队尾 入队的新元素是在线性表的最后,时间复杂度为O(1); 出队时需要将后续的所有元素向前移动
阅读全文
摘要:递归的数学思想 递归的数学表示 斐波拉契数列递归解法 运行结果: strlen 递归解法 运行结果: 汉诺塔递归解法 递归当然只能以递归的思路理解,把它展开纯属自讨苦吃。 递归思路,说白了是如下三步: 1、对于问题N,如果N-1已经解决了,那么N是否很容易解决。 2、一步步递推下去,终究会有个“包工
阅读全文
摘要:递归与回溯 8皇后问题: 在一个8*8棋盘上,有8个皇后,每个皇后占一格;要求两个皇后不能处在同一行、同一列或同一对角线上。 找放置的位置,方向很重要,当从第一行开始,放置皇后的位置后,第二行放置时要考虑上一行的放置。 即3个方向为(-1,-1),(-1, 0),(-1,1) 8皇后共有92种。 用
阅读全文
摘要:几乎所有的编译器都具有检测括号是否匹配的能力 编译器中的括号检测能力是如何实现的呢? 匹配函数: 代码复用链式栈的,main函数更改如下: 实例二:用栈实现计算: 后缀表达式: 中缀或后缀? 中缀表达式符合人类的阅读和思维习惯; 后缀表达式符合计算机的“运算习惯”; 如何将中缀表达式转化为后缀表达式
阅读全文
摘要:C 语言中常说“ 局部变量在栈上分配空间”, 那么这个地方的“ 栈” 和我们之前学习的栈数据结构有关系吗? 函数调用时的栈 活动记录 活动记录是函数调用时一系列相关信息的记录 函数调用过程 程序中的栈 程序中的栈 递归调用中的栈变化 退栈 小结
阅读全文
摘要:栈的定义 * 栈仅能在线性表的一端进行操作 栈顶(Top) : 允许操作的一端 栈底(Bottom) :不允许操作的一端 栈的性质 栈的操作 # 栈的一些常用操作 * 创建栈 * 销毁栈* 清空栈* 进栈* 出栈* 获取栈顶元素* 获取栈的大小 栈的顺序存储实现 下面的顺序栈是不能支持结构体的! 现
阅读全文
摘要:单链表的局限: 单链表的结点都只有一个指向下一个结点的指针 单链表的数据元素无法直接访问其前驱元素 逆序访问单链表中的元素是极其耗时的操作!!! 单链表的改进 双向链表的定义 在单链表的结点中增加一个指向其前驱的pre指针如下图所示: 循环链表的操作 双向链表的新操作 获取当前游标
阅读全文
摘要:单链表完美解决了顺序表的问题 ! 还有其它改进顺序表的方法吗? 牛人小C C 。 出场 。。。顺序表有优势 , 单链表也同样有缺点 单链表的相对劣势 单链表的实现严重依赖指针 ! 数据元素中必须包含一个额外的指针域 ! 没有指针的程序设计语言无法实现! 顺序表的改进 静态链表的逻辑结构 静态链表相关
阅读全文
摘要:单链表的局限 有些线性关系是循环的,即没有队尾元素 一年12个月,是重复的,12月过了又要回到1月,对于这样的线性元素规律,前人给我指明了一条更好的道路:循环链表。 循环链表拥有单链表的所有操作 创建链表 销毁链表 获取链表长度 清空链表 获取第pos个元素操作 插入元素到位置pos
阅读全文
摘要:上节课学了线性表的顺序存储结构,可是顺序表的最大问题是插入和删除都需要移动大量的元素! 如何解决呢? 讨论: 这就是我们链式存储结构的思想。 链式存储定义:为了表示每个数据元素与其直接后继元素之间的逻辑关系 , 每个元素除了存储本身的信息外 , 还需要存储指示其直接后继的信息。 链式存储逻辑结构:n
阅读全文
摘要:此图为线性表 A:友谊是平等的。不能用线性表表示。 B:一个上级可以管多个下级。不能用线性表表示。 C:一个人可以占多个位置(帮人占座),但帮占的位置不满足线性表表示关系。 D:最前面只有一个后驱,最后面只有一个前驱,数据有限,中间的有一个前驱和一个后驱,能用线性表表示。 小结
阅读全文
摘要:线性表的顺序存储结构(重点) 顺序存储的定义:线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。 首先创建一个.h文件,把所有的函数的api函数写出来。 具体如下:首先创建线性表,销毁线性表,清除线性表,线性表的深度,线性表的容量,线性表的插入,获取线性表的某一个数,删除
阅读全文
摘要:算法效率的度量 * 事后统计法 比较不同算法对同一组输入数据的运行处理时间 * 缺陷 为了获得不同算法的运行时间必须编写相应程序 运行时间严重依赖硬件以及运行时的环境因素 算法的测试数据的选取相当困难 事后统计法虽然直观 , 但是实施困难且缺陷多 ,一般不予考虑* 事前分析估算 依据统计的方法对算法
阅读全文