![](https://img-blog.csdnimg.cn/20191230222640859.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
C
C数据结构与算法 教程
程序员大阳
挖掘机哪家强,山东新泰找大阳
展开
-
C语言数据结构教程
背景没找到现成的,索性自己写一套,如此经典的C语言,如此重要的数据结构,必须搞一搞。系列文章C语言数据结构(1)–序言C语言数据结构(2)–VS2015下第一个C语言程序C语言数据结构(3)–数组与冒泡排序选择排序C语言数据结构(4)–数组与桶排序C语言数据结构(5)–快速排序C语言数据结构(6)–顺序线性表C语言数据结构(7)–链式线性表C语言数据结构(8)–栈 后进先出线性...原创 2019-10-17 21:23:17 · 1960 阅读 · 1 评论 -
C语言队列实现
一,简介开发环境是VC6.0,实现了一个基于C语言的队列。主要功能,入队、出队、显示当前队列元素。二,代码实现//队列演示#include#define QUEUE_LENGTH 100//仅能处理非负整数struct Queue { int element[QUEUE_LENGTH]; int head; int tail;};int Que原创 2017-07-06 16:05:18 · 1022 阅读 · 0 评论 -
C语言栈实现
一,简介栈是一种先进后出的容器,本篇实现一个入栈、出栈、显示站内元素的例子。二,代码//栈是后进先出的一种数据容器#include<stdio.h>#define STACK_LENGTH 5//定义结构体保存栈信息,注意栈元素只能是非负整数(-1用于表示栈内无元素)struct Stack{ //栈元素 int element[STACK_LENGTH]; //栈顶原创 2017-07-06 17:08:26 · 425 阅读 · 0 评论 -
C语言数据结构(10)--串的改进模式匹配算法(KMP)
0. 系列文章索引点此查看系列文章1. KMP概述改进的匹配算法,又称为KMP算法。当匹配过程中发现主串和模式串字符不等,主串的字符位置指针不再回退,而是利用之前匹配的信息将模式串的匹配位置尽可能的移动,再继续比较的算法。KMP算法还是相当复杂的,说实话我看了好几个小时才稍微理解了,此处附上一篇我感觉讲的比较到位的博客:详解KMP算法。2. 代码实现虽然算法比较复杂,但是实现起来代码量很小,佩服!/** 主题:KMP模式匹配算法* 作者:熊猫大大* 时间:2020-09-22*/#i原创 2020-09-22 16:29:29 · 566 阅读 · 0 评论 -
C语言数据结构(9)--串的朴素模式匹配算法
0. 系列文章索引点此查看系列文章1. 模式匹配概念查找字符串子串的位置的操作,称为串的模式匹配,子串被称为模式串。串的模式匹配是非常高频的操作,具体如何去匹配的算法也很重要。2. 朴素的模式匹配算法朴素模式匹配算法也称为布鲁特-福斯算法,感觉很是高大上,但是实现起来很简单。朴素的意思就是最符合咱们朴素思维的算法,从主串的第一个字符开始与子串进行比对,如果相等则逐一比对后续字符;如果不等则从主串第二个字符开始匹配子串,直到发现全部相等的子串。3. 朴素模式匹配代码实现两层循环就可以解决,完原创 2020-09-21 16:41:15 · 1267 阅读 · 0 评论 -
C语言数据结构(6)--链栈
0. 系列文章索引点此查看系列文章1. 顺序栈的缺点很显然,顺序栈使用数组作为存储结构,面临存储空间有限的限制。可以将链表作为存储结构,拓展存储空间,即为链栈。2. 代码实现/** 链栈* 作者:熊猫大大* 时间:2019-09-25*/#include<stdio.h>//链栈的节点结构体typedef struct { int data;//保存节点数据 struct Node *next;//指向下一个节点}Node;// 显示所有元素(方便测试)原创 2020-09-17 12:24:24 · 448 阅读 · 0 评论 -
C语言数据结构(8)--字符串的存储结构
字符串操作可谓是常见中的常见,usual中的usually,不好意思先秀一把英文。使用C语言数组实现字符串的操作,还是便于兄弟们理解字符串在内存中的组织与操作的。代码如下,精华都在注释中#include <stdio.h>#define MAX_LENGTH 100/* * 主题:使用数组实现字符串操作实例 * 作者:熊猫大大 * 时间:2020-01-15 */...原创 2020-01-16 12:06:52 · 1087 阅读 · 0 评论 -
C语言数据结构(16)--二叉树的层序遍历代码实现
背景在上一篇中,我们利用递归很轻易的就实现了二叉树的前序、中序、后续遍历,但是层序遍历仅仅利用递归貌似是解决不了的。在如上图的树中,我们如何先从上至下,然后从左至右的按层次进行遍历,即A-B-C-D-E-F-G这样的顺序呢。思路每次在访问下一层次节点之前,应该将上一级节点输出,而上一级节点无疑从层次上先于下一级,我们联想到先进先出的队列模型,我们可以利用一个队列,在递归访问二叉树下一层次...原创 2019-12-16 11:23:09 · 1284 阅读 · 12 评论 -
C语言数据结构(15)--二叉树的前序、中序、后序遍历
背景在上一篇中,已经构造了一个二叉树,并且对其进行了遍历输出,实际上处于不同的需求,对二叉树节点的遍历顺序有不同的做法,本文就研究下最常用的二叉树的四种遍历算法。先给一个标准的二叉树:前序遍历前表示前面、先前的意思,序是顺序的意思,前序遍历是指根节点的访问顺序是在前面的,所以:前序遍历:总是先访问根节点、然后访问左子树、然后访问右子树所以对于上面的二叉树,前序遍历顺序为:A-B-D...原创 2019-12-09 12:34:06 · 1236 阅读 · 0 评论 -
C语言数据结构(14)--二叉树的链式存储结构
模型构建二叉树如下图,是由节点、节点与节点之前的连接组成的,而且连接是有顺序的,一般我们认为左边的次序要优先于右边。对于每个节点来说,都有一个数据区域存放该节点的信息,另外还需要描述其左右子节点。每个节点的这三个信息确认之后,其实整个树的信息就确认了。节点结构体定义typedef struct { int data;//数据区域 struct BinaryTreeNode* left...原创 2019-12-02 07:44:07 · 541 阅读 · 0 评论 -
C语言数据结构(13)--二叉树的概念和性质
何为二叉树二叉树,英文名Binary Tree,顾名思义,二叉树就是每个节点最多有2个子节点的树,这个说法好理解,但是不够严谨。具体的说:二叉树节点是有限个,无限对于计算机来说处理不了。二叉树可以由0个节点,这种属于空二叉树。二叉树如果有超过0个节点,则必有根节点,而且根节点最多有两个子节点,且子节点为根节点的子树也为二叉树。注意二叉树的左右子树,是有顺序的,不能互相调换,下图为经...原创 2019-12-02 07:43:22 · 581 阅读 · 0 评论 -
C语言数据结构(12)--链表描述子节点的树
数组描述子节点的缺点如果有这么一颗奇葩的树,大多数节点的孩子数为1-2个,但是有一个节点的孩子数是100个。因为我们使用数组描述子节点,所以描述子节点的数组得定义为struct TreeNode* children[100];。也就是说,除了有一个充分利用了数组分配的空间,其他的都造成了极大浪费,毫无疑问不合理。使用链表描述孩子也是一个一维的集合,特点个数不确定,符合这种特点的数据结构就...原创 2019-10-18 13:44:22 · 499 阅读 · 0 评论 -
C语言数据结构(11)--数组描述子节点的树
啥是树之前所讲的线性表、队列、栈,实际上都是一种一对一的结构,而树是一种一对多的结构。树这个名字起的非常形象,所以一个树的结构可如下图所示:也就是说每个节点下面有N个节点(N>=0),且根节点数量小于1的数据结构为树。当根节点数量为0是,是一个空树。相关概念节点:上图中1-8都是节点根节点:1是根节点,没有父节点双亲:1是2/3/4的双亲,2是5/6的双亲兄弟:2/3/4...原创 2019-10-14 08:01:47 · 829 阅读 · 4 评论 -
C语言数据结构(7)--队列
队列的概念什么是队列,听起来很高端,其实就是最普通的排队。先排队的,先取票;先排队的,先取餐;先排队的,先上船;先排队的,先上岸。队列,就是先进先出。队列的数据结构首先队列也是一个一维数据结构,然后添加、和取出元素都是从头部操作即可。可以把队列看做从左到右排列的元素集合,添加元素和取出元素都是在左侧操作。队列的操作老三样,遍历、添加、取出。遍历,按顺序显示所有队列元素添加,在队...原创 2019-09-29 08:05:08 · 629 阅读 · 0 评论 -
C语言数据结构(5)--顺序栈
背景栈应该是第一次出现一个很专业名词的数据结构了吧,但是栈依然是一个非常简单一维结构。之所以称之为栈,就是因为栈的特点是后进先出,就像一个货栈,先放进去东西总是放在里面,后放进去的东西放到门口,所以往外拿出来的时候,就先拿出来门口的。如何表示我们把线性表看为从上到下的一个一维结构,不管是往线性表里添加元素还是取出元素,都是在上部(顶部)操作,不就是后进先出了吗。所以栈其实就是在一维线性表...原创 2019-09-29 08:04:17 · 617 阅读 · 0 评论 -
C语言数据结构(4)--链式存储线性表
顺序线性表的缺点上一篇讲了顺序线性表,实际上就是用数组的顺序来表达一个有顺序的一维数据集合。但是数据这种存储结构存在一些问题:容量有限,数组属于连续存储空间,不能太大,如果申请太大的连续数组空间,可能会GG,至于具体能申请多大,请大家试试,猫哥比较懒,此处就不试了…插入与删除,速度慢。这个是肯定的啦,比如插入一个元素,后面所有的元素都得往后移动,删除一个元素,前面的元素都得往前移动。...原创 2019-09-26 11:52:54 · 771 阅读 · 17 评论 -
C语言数据结构(3)--顺序存储线性表
顺序线性表概念线性表简单的说就是有序的元素集合,像Java里面的List。数组其实就是一个简单线性表,但是更多的只能代表线性表的一种存储结构,如果是一个完善的线性表的话,还应该包括删除元素、查询元素、修改元素等操作。线性表的存储结构最常见的有两大类,一个是用一维数组,一个使用链表,本篇演示一维数组实现的线性,即顺序线性表;链表实现的线性表可以称之链式线性表。有哪些操作显示线性表元素个数...原创 2019-09-22 22:57:51 · 818 阅读 · 0 评论 -
C语言 冒泡排序选择排序
1 前言哈哈,最常用的数据结构应该是数组吧,有人说是单一变量,单一变量那也不叫结构啊。所以一般数据结构的第一课是数组,跟数组这种数据结构相关的操作,最常见的就是排序啦。排序里面最简单也是最常用的,应该就是冒泡排序和选择排序了。2 冒泡排序说明冒泡的意思就是从水底往上面冒泡(我们把数组第一个元素看做水底),对于数组来说,是通过比较和换位,每次把最大(最小)的一个元素移动到顶上来,然后剩下的...原创 2019-09-20 22:17:53 · 600 阅读 · 0 评论 -
C语言数据结构(2)--VS2015下第一个C语言程序
0 背景因为大家用的开发环境各不相同,所以此处演示下VS2015下C语言项目开发流程。1 下载安装VS2015这个就不具体展开介绍了,反正VS系列的软件都是傻瓜式的下一步下一步安装即可。下载安装的时候直接使用社区办(community)就足够了,做好心理准备,时间很长哦。。。此处还是给一个VS2015社区版的种子便于大家快速下载:ed2k://|file|cn_visual_studio_...原创 2019-09-20 21:38:57 · 738 阅读 · 0 评论 -
C语言数据结构(1)--序言
关于C语言C语言是一门经典的语言,有着悠久的历史,而且还长期霸占各类编程语言排行榜的前几位,可谓经久不衰。C语言也是本人学习的第一门正儿八经的编程语言,刚开始学的时候可谓如痴如醉,哈哈,好像从此之后也再也没有这么认真的学习过编程语言语法。总之C语言,很重要。关于C语言数据结构我记得刚开始学数据结构的时候,不管是网上,还是教科书,都没有很好的系列教程。要么仅有短短的几篇,要么根本就是给的...原创 2019-09-16 21:17:57 · 663 阅读 · 0 评论 -
C语言 快速排序
一,简介快速排序,用分治法提高了效率,简直就是“方法得当,效率提高”的典范之作。基本思路就是每次都把当前数据化为两部分,每次排序保证前面部分都小于后面部分,然后在对两部分分别快速排序。二,代码//快速排序#include<stdio.h>int FastSort(int* p,int start,int end){ int i,j,temp; if(start>=end)原创 2017-07-06 16:20:20 · 1483 阅读 · 0 评论 -
C语言 桶排序
一,简介作为快到没朋友的桶排序,还是需要介绍一下,虽然应用场景有限,但是一旦用上还是很牛X的。我试了下,BUCKETSORT_MAX_NUM为250000时,程序还能跑。当BUCKETSORT_MAX_NUM达到260000,就报错了。我的电脑是4G内存的,不知道2G内存的和8G内存的同学能达到多少。不过一般250000也够用了。二,代码//桶排序示例#include<stdio.h>//桶排原创 2017-07-06 16:15:00 · 2311 阅读 · 0 评论