
数据结构与算法
mainn
本人是移动互联应用技术专业,选择嵌入式开发方向。声明:博文的编写,主要参考网上资料,并结合个人见解,仅供学习、交流使用,如有侵权,请联系博主删除。...
展开
-
朱有鹏C语言高级---4.9.7--单链表--删除节点(7)
朱有鹏C语言高级---4.9.7--单链表--删除节点(7) (1)链表到底用来干嘛的?链表是用来存数据的,链表和数组是一类东西!!(2)为什么要删除节点?有时候链表节点中的数据不想要了,因此要删除这个节点。(3)删除节点的2个步骤第一步:找到要删除的节点第二步:删除这个节点。(4)如何找到待删除的节点通过遍历来查找节点。从头指针+头结点开始,顺着链表依次将...原创 2018-10-18 10:10:44 · 311 阅读 · 0 评论 -
小甲鱼 P48 内存池---通讯录管理程序--单链表的应用
小甲鱼 P48 内存池---通讯录管理程序 小甲鱼 P45 单链表1---头插法小甲鱼 P46 单链表2---尾插法和遍历小甲鱼 P47 单链表3---单链表插入和删除 通讯录管理程序#include <stdio.h>#include <stdlib.h>#include <string.h>struct Person...原创 2018-10-04 16:24:08 · 862 阅读 · 4 评论 -
朱有鹏C语言高级---4.9.4--单链表--头结点(4)
朱有鹏C语言高级---4.9.4--单链表--头结点(4) 链表还有另一种用法,就是把头指针指向的第一个节点作为头节点使用。头结点的特点是:第一,它紧跟在头指针后面。第二,头结点的数据部分是空的(有时候不是空的,而是存储整个链表的节点数),指针部分指向下一个节点,也就是第一个节点。这样看来,头节点确实和其他节点不同。我们在创建一个链表时添加节点的方法也不同。头结点在创建头指针时一并创建...原创 2018-10-17 15:05:46 · 234 阅读 · 0 评论 -
郝斌数据结构入门--P50--递归
郝斌数据结构入门--P50--递归 定义:一个函数自己直接或间接调用自己。 举例:1、求阶乘#include <stdio.h>//假定n的值是1或大于1的值 long f(long n){ if (1 == n) return 1; else return f(n-1) * n;}int main(void){ printf...原创 2018-10-22 16:34:49 · 242 阅读 · 0 评论 -
朱有鹏C语言高级---4.9.5--单链表--从链表头部插入新节点(5)
朱有鹏C语言高级---4.9.5--单链表--从链表头部插入新节点(5) 从链表头部插入新节点(1)注意写代码过程中的箭头符号 ( -> ),和说话过程中的指针指向。这是两码事,容易搞混。箭头符号实际上是用指针方式来访问结构体,所以箭头符号的实质是访问结构体中的成员。更清楚一点说程序中的箭头和链表的连接没有任何关系;链表中的节点通过指针指向来连接,编程中表现为一个赋值语句...原创 2018-10-17 18:38:35 · 1174 阅读 · 0 评论 -
朱有鹏C语言高级---4.9.6--单链表--遍历节点(6)
朱有鹏C语言高级---4.9.6--单链表--遍历节点(6) 什么是遍历(1)遍历就是把单链表中的各个节点挨个拿出来,就叫遍历。(2)遍历的要点:一是不能遗漏、二是不能重复、追求效率。 如何遍历单链表单链表的特点就是由很多个节点组成,头指针+头节点为整个链表的起始,最后一个节点的特征是它内部的pNext指针值为NULL。从起始到结尾中间由各个节点内部的pNext指针来挂...原创 2018-10-17 20:03:33 · 286 阅读 · 0 评论 -
数据结构---栈(C语言数组实现)
https://blog.youkuaiyun.com/morixinguan/article/details/51374184数据结构---栈(C语言数组实现) 栈的全名称为堆栈,栈其实就是与队列相反的过程,队列是先进先出,而栈便是先进后出了,如下图: 栈的基础实现:1、栈的初始化2、判断栈是否为空3、判断栈是否已经满了4、入栈5、出栈 代码如下:#...转载 2018-10-20 14:46:38 · 2100 阅读 · 3 评论 -
郝斌数据结构入门---P30---栈
郝斌数据结构入门---P30---栈 线性结构的常见应用之一:栈(只能头部插入,头部删除)定义:一种可以实现“ 先进后出 ”的存储结构,栈类似于箱子分类:静态栈,动态栈算法:出栈pop,入栈push(压栈)应用:函数调用,中断,表达式求值,内存分配,缓冲处理,迷宫 为了便于链表的操作,产生一个没有实际含义的头结点。 初始化栈init()函数:建立一...原创 2018-10-20 17:44:18 · 371 阅读 · 0 评论 -
郝斌数据结构入门---P35---队列(循环队列)
郝斌数据结构入门---P35---队列 线性结构的常见应用之一:队列(头部删除,尾部插入)定义:一种可以实现“ 先进先出 ”的存储结构,队列类似于排队去买票(一端入,一端出)分类:链式队列(用链表实现),静态队列(用数组实现),静态队列通常都必须是循环队列。 循环队列: (循环队列的好处:可以重复使用已经废弃的内存!!)1、静态队列为什么必须是循环队列(f:front前,r...原创 2018-10-21 16:00:39 · 386 阅读 · 0 评论 -
郝斌数据结构入门--P67-二叉树的先序、中序、后序遍历
郝斌数据结构入门--P67-二叉树的先序、中序、后序遍历 技巧:先、中、后序,是针对访问根节点的位置来定义的。先序,先访问根。中序,中间访问根。后序,最后访问根。 二叉树的遍历(数是一个非线性的,通过先序、中序、后序遍历把非线性的保存线性的硬件上)先序遍历[先访问根节点]:先访问根节点,再先序访问左子树,再先序访问右子树 中序遍历[中间访问根节点]:中...原创 2018-11-09 10:01:18 · 183 阅读 · 0 评论 -
郝斌数据结构入门--P70-树 已知两种遍历序列求原始二叉树
郝斌数据结构入门--P70-树 已知两种遍历序列求原始二叉树 已知先序、中序、后序任何一种序列,不能够找到原始二叉树。经过研究发现,已知一棵树的两种序列,可以把二叉树求出来。也经过研究发现,已知先序和后序,无法还原出原始的二叉树。最终表明,通过 先序和中序 或者 中序和后序 我们可以还原出原始的二叉树。(有一个是中序!!) 已知先序和中序求后序规...原创 2018-11-09 11:28:46 · 346 阅读 · 0 评论 -
郝斌数据结构入门--P75-链式二叉树具体遍历程序演示
郝斌数据结构入门--P75-链式二叉树具体遍历程序演示 知道递归的实现与应用,二叉树的遍历就容易了。 代码如下:#include <stdio.h>#include <malloc.h>struct BTNode{ char data; struct BTNode *pLchild; //p是指针 L是左 child是孩子 struct...原创 2018-11-10 11:56:00 · 276 阅读 · 0 评论 -
郝斌数据结构入门--P60--树的定义与分类
郝斌数据结构入门--P60--树 树和森林就是以递归的方式定义的。树和图的很多算法都是以递归来实现的。 非线性结构-----树树的定义专业定义:1.有且只有一个称为根的节点2.有若干个互不相交的子树,这些子树本身也是一棵树通俗的定义:1.树是由节点和边组成2.每个节点只有一个父节点,但可以有多个子节点3.但有一个节点例外,该节点没有父节点,此节点...原创 2018-11-08 10:41:16 · 263 阅读 · 0 评论 -
小甲鱼 P47 单链表3---单链表插入和删除
小甲鱼 P47 单链表3---单链表插入和删除 单链表和数组相比较,最大的优势是插入元素到指定位置的效率。 (单链表插入)让用户输入若干个整数,按顺序插入单链表之中:比如将3插入2和4之间。对于单链表,改变指针就可以了。先抹掉2指向4的指针,将2改为指向3,3指向4,两个步骤。代码如下:#include <stdio.h>#include <...原创 2018-10-04 14:38:13 · 1155 阅读 · 0 评论 -
小甲鱼 P46 单链表2---尾插法和遍历
小甲鱼 P46 单链表2---尾插法和遍历 单链表---尾插法核心代码:if (*library != NULL) { temp = *library; // 定位单链表的尾部位置 while (temp->next != NULL) { temp = temp->next; } //插入数据 temp->next ...原创 2018-10-03 19:28:24 · 592 阅读 · 0 评论 -
朱有鹏C语言高级---4.9.8-单链表--逆序(单链表的完整程序)(8)
朱有鹏C语言高级---4.9.8-单链表--逆序(8) 什么是链表的逆序?链表的逆序又叫反向,意思就是把链表中所有的有效节点在链表中的顺序给反过来。 单链表逆序算法分析(1)当我们对一个数据结构进行一个操作时,我们就需要一套算法。这就是数据结构和算法的关系。(2)我总结:算法有2个层次。第一个层次是数学和逻辑上的算法;第二个层次是用编程语言来实现算法(3)从逻辑上来...原创 2018-10-18 15:12:22 · 858 阅读 · 0 评论 -
朱有鹏C语言高级---4.9.9--双链表--引入和实现(9)
朱有鹏C语言高级---4.9.9--双链表--引入和实现(9) 单链表的局限性(1)单链表是对数组的一个扩展,解决了数组的大小比较死板不容易扩展的问题。使用堆内存来存储数据,将数据分散到各个节点之间,其各个节点在内存中可以不相连,节点之间通过指针进行单向连接。链表中的各个节点内存不相连,有利于利用碎片化的内存。(2)单链表各个节点之间只由一个指针单向连接,这样实现有一些局限性。局限...原创 2018-10-18 17:14:44 · 186 阅读 · 0 评论 -
朱有鹏C语言高级---4.9.10--双链表--头插入和尾插入(10)
朱有鹏C语言高级---4.9.10--双链表--头插入和尾插入(10) 尾插入: 头插入: 注意下面的代码中,insert_head()函数里面语句的顺序,第一语句和第二语句的顺序可以互相调换,但是第一语句和第二语句要在第三语句的前面,最后一句要放在最后面。 代码如下:#include <stdio.h>#include <stdl...原创 2018-10-18 20:31:33 · 203 阅读 · 0 评论 -
朱有鹏C语言高级---4.9.2--单链表--访问单链表中各个节点的数据(1)
朱有鹏C语言高级---4.9.2--单链表--访问单链表中各个节点的数据(1) 构建一个简单的单链表目标:构建一个链表,然后将一些数据(譬如1,2,3三个数字)存储在链表中,访问链表中各个节点的数据 源码:4.9.2.danlianbiao.c#include <stdio.h>#include <strings.h>#include <...原创 2018-10-16 10:38:26 · 545 阅读 · 0 评论 -
朱有鹏C语言高级---4.9.3--单链表--将创建节点的代码封装成一个函数(2)
朱有鹏C语言高级---4.9.3--单链表--将创建节点的代码封装成一个函数(2) 源码:4.9.3danlianbiao2.c#include <stdio.h>#include <strings.h>#include <stdlib.h>//构建一个链表节点struct node{ int data; //有效数据 st...原创 2018-10-16 12:26:19 · 183 阅读 · 0 评论 -
朱有鹏C语言高级---4.9.3--单链表--从链表的头部插入节点(3)
朱有鹏C语言高级---4.9.3--单链表--从链表的头部插入节点(3) 从链表的尾部插入节点尾部插入简单点,因为前面已经建立好的链表不用动。直接动最后一个。 因为我们在insert_tail中直接默认了头指针指向的有一个节点,因此如果程序中直接定义了头指针后就直接insert_tail就会报段错误。我们不得不在定义头指针之后先create_node创建一个新节点给头指针初始化...原创 2018-10-16 14:06:36 · 286 阅读 · 0 评论 -
朱有鹏C语言高级---4.9.11--双链表--遍历节点(11)
朱有鹏C语言高级---4.9.11--双链表--遍历节点(11) 遍历节点(1)双链表是单链表的一个父集。双链表中如何完全无视pPrev指针,则双链表就变成了单链表。这就决定了双链表的正向遍历(后向遍历)和单链表是完全相同的。(2)双链表中因为多了pPrev指针,因此双链表还可以前向遍历(从链表的尾节点向前面依次遍历直到头结点)。但是前向遍历的意义并不大,主要是因为很少有当前当了尾...原创 2018-10-19 09:32:23 · 243 阅读 · 0 评论 -
郝斌 数据结构 1 什么叫做数据结构
数据结构概述书籍:严蔚敏 吴伟民(伪算法)、高一凡(例子源程序)定义:我们如何把现实中大量而复杂的问题以特定的数据类型和特定的存储结构保存到主存储器(内存)中,以及在此基础上为实现某个功能(比如查找某个元素,删除某个元素,对所有元素进行排序)而执行的相应操作,这个相应的操作也叫做算法。(特定的数据类型:个体如何来存储。特定的存储结构:个体的关系)(数据结构解决存储问题,算法解决操作...原创 2018-10-10 10:32:43 · 261 阅读 · 0 评论 -
朱有鹏C语言高级---4.9.12--双链表--删除节点(双链表的完整程序)(12)
朱有鹏C语言高级---4.9.12--双链表--删除节点(12) 删除的过程就是一个遍历的过程。 删除尾节点 删除普通节点 代码如下:#include <stdio.h>#include <stdlib.h>//双链表的节点struct node{ int data; //有效数据 struct node *pP...原创 2018-10-19 11:01:02 · 551 阅读 · 0 评论 -
数据结构---队列(C语言数组实现)
https://blog.youkuaiyun.com/morixinguan/article/details/51374296数据结构---队列(C语言数组实现) 队列是先进先出的过程。简单地画一幅画来描述一下队列:一个简单的、由数组实现的队列,可以由以下几种最基本的操作组成:1、判断队列是否为空2、判断队列是否已经满了3、入队4、出队 代码如下:#i...转载 2018-10-19 20:01:42 · 1828 阅读 · 0 评论 -
小甲鱼 P45 单链表1---头插法
小甲鱼 P45 单链表1---头插法 单链表包含两个域:信息域、指针域信息域:存放链表节点的内容 指针域:指向下一个 和它一样的节点结束:直到最后一个节点的指针域为NULL头指针:指向第一个节点连接:链表通过指针进行连接的 单链表声明struct Book{ //信息域 char title[128]; char author[40]; ...原创 2018-10-03 14:15:45 · 983 阅读 · 1 评论 -
郝斌数据结构入门--P63-树的存储
郝斌数据结构入门--P63-树的存储 完全二叉树:先把一棵树转换为满二叉树,再把最底层最右边删掉,意味着下图黄色框可以删掉,不保存。剩下的一棵树就是完全二叉树。 为什么一个二叉树以数组的方式存储时,必须要求这个数是完全二叉树?上图红色是真正的点(有效点)。如果只存放有效的点,无法确定这棵树是怎样构造出来的。别人不知道以前的树是怎样子的,所以不能只保留有效的点。 ...原创 2018-11-08 14:24:31 · 207 阅读 · 0 评论