![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
kang___xi
这个作者很懒,什么都没留下…
展开
-
数据结构之双向链表(C语言实现)
数据结构之双向链表(C语言实现)原创 2016-11-26 08:14:17 · 9552 阅读 · 12 评论 -
数据结构之动态存储管理(C语言)
一、 概述1. 占用块占用块:已分配给用户使用的地址连续的内存区可利用空间块:未曾分配的地址连续的内存区2. 动态存储分配过程的内存状态系统运行一段时间后,有些程序的内存被释放,造成了上图(b)中的状态。假如此时又有新的程序请求分配内存,系统将如何做呢?通常有两种做法:一种策略是继续从高地址的空闲块中进行分配,而不考虑已经分配给用户的内存区是否已空闲,知道分配无法进行(即剩余的空闲块不能满足分原创 2017-09-05 10:43:13 · 2318 阅读 · 1 评论 -
单链表相关面试题(C语言实现)
在这里给出一些关于单链表常见的面试题。一、 给定单链表,检测是否有环。1.题目分析仔细读题目发现还是有难度的,很多人刚开始会理解成就是判断一个单链表是否为循环链表,这样的理解是错的。题目的意思是指给出一条单链表,判断其中是否含有环,如“6”字型单链表就含有环。明白题目意思以后我们来说明解题思路,假设给定的单链表中有n个节点,我们可以利用两个指针fast和slow来求解问题。fast指针每次走两步,原创 2017-08-23 17:44:23 · 457 阅读 · 0 评论 -
数据结构之数组(C语言实现)
数组是大家很熟悉的一种数据类型,而且在我们的程序设计中也应用非常广泛。这里以抽象数据类型的形式讨论数组的定义和实现。一、数组的定义假设n维数组中含有第i维的长度为b(i),则数组的总长度为b(0) *b(1)*...*b(n-1),每个元素都受着n个关系的约束。在每个关系中元素a(j1,j2,...,jn) (0<=jn<=b(i)-2)都有一个直接后继元素。因此,就单个关系而言,这n个关系仍然是线原创 2017-08-29 17:34:38 · 6186 阅读 · 1 评论 -
数据结构之串的模式匹配(C语言实现)
一、暴力匹配算法(BF)BF全称为Brute-Force,最简单直观的模式匹配算法。1.算法思想两个字符串进行匹配时,一个主串和一个模式串,就是按照我们最容易想到的算法来进行匹配。用两个变量i,j分别记录主串和模式串的匹配位置,如果两者在某个字符不匹配,则将记录主串匹配位置的变量i回退到匹配前i的位置的后一个位置,将j回头到模式串的第一个字符位置;如果i和j指向的主串和模式串字符匹配,...原创 2017-08-29 17:34:08 · 7755 阅读 · 0 评论 -
八大排序算法之插入排序
八大排序算法之插入排序 排序分为内部排序和外部排序,内部排序时数据记录在内存中进行排序,适用于数据量比较少的情况;而外部排序因数据量太大,内存一次不能容纳所有的数据,此时需要借助文件来进行排序。 本文这里介绍的八大排序为内部排序,然后通过内部排序来实现一种外部排序。 下面先对排序进行分类如下: 在具体实现排序之前,先介绍三个衡原创 2017-08-01 11:44:22 · 279 阅读 · 0 评论 -
八大排序算法之选择排序
前面已经介绍了四种排序算法—-直接插入排序、希尔排序、冒泡排序和快速排序,今天再介绍两种排序算法:直接选择排序和堆排序。 这里还是以升序为例进行说明。一、直接选择排序1.基本思想直接选择排序也是比较简单,容易理解的排序算法。对于一个有N个数的序列,每次遍历过程中找到序列中值最大或者最小的元素的下标并记录下来。并将其和最左边或者最右边的元素进行交换,这样的话就可以保证每次遍历都原创 2017-08-09 11:25:17 · 325 阅读 · 0 评论 -
数据结构之二叉树
树形结构是一类重要的非线性数据结构,而且应用十分广泛。本篇博客首先以思维导图的形式来介绍树和二叉树的基本概念你,涉及到树的定义、基本术语、遍历方式以及扩展(线索化),然后再以源码的形式实现出来。一、代码实现(C++语言)1.二叉树 这里对二叉树各种操作代码实现提供了递归和非递归两种版本,如前序、中序、后序和层次遍历二叉树,获取度为0/1/2的节点数目,以及根据前序和中序恢复一...原创 2018-04-24 16:00:48 · 306 阅读 · 0 评论 -
数据结构之二叉排序树(C语言实现)
一、基本概念1.二叉排序树 二叉排序树(Binary sort tree,BST),又称为二叉查找树,或者是一棵空树;或者是具有下列性质的二叉树:(1)若它的左子树不为空,则左子树上所有节点的值均小于它的根节点的值;(2)若它的右子树不为空,则右子树上所有节点的值均大于它的根节点的值;(3)它的左、右子树也分别为二叉...原创 2018-05-21 23:35:10 · 70894 阅读 · 33 评论 -
数据结构之“串”
字符串一般简称为串,在我们的编程中使用非常广泛。一、串类型的定义串(string)(或字符串)是由零个或过个字符组成的有限序列。1.基本概念串的长度:串中字符的数目空串:零个字符的串空格串:串中只有一个空格字符的串子串:串中任意个连续的字符组成的子序列二、串的实现1.串的抽象数据类型这里介绍的顺序存储的串,这个比较容易理解。下面在String.h头文件中给出串的定义:#ifndef ST原创 2017-08-26 21:41:19 · 322 阅读 · 0 评论 -
线性表之循环链表、双向链表(三)--C语言实现
一、循环链表循环链表(Circular linked list)是另一种形式的链式存储结构。它的特点是表中最后一个节点的指针域指向头结点,整个链表形成一个环。由此,从表中任一节点出发均可找到表中其他节点,如下所示为单链的循环链表: 单链的循环链表和单链表的本质一样,唯一的区别在于判断链表结束由判空改为了判断是否为头结点。下面给出具体的C语言代码实现: 头文件CList.h中给出循环链表结构体定义原创 2017-08-22 23:12:21 · 400 阅读 · 0 评论 -
线性表之单链表(二)--C/C++实现
从上一篇的博文中可见,线性表的顺序存储结构的特点是逻辑关系上相邻的两个元素在物理位置上也相邻,因此可以随机存取表中任一元素,它的存储位置可以用一个简单、直观的公式来表示。然而,从另一个方面来看,这个特点也铸成了这中存储结构的弱点:在进行插入和删除操作时,需要大量移动元素。这里介绍另一种线性表的表示方法—-链式存储结构,由于它不要求逻辑上相邻的元素在物理位置上也相邻,因此它没有顺序存储结构所具有的弱点原创 2017-08-22 16:40:25 · 323 阅读 · 0 评论 -
数据结构之单链表(C语言实现)
数据结构之单链表(C语言实现),包括单链表的结构体结构和单链表的常用操作(初始化,插入,删除,查找,销毁等)。原创 2016-11-25 21:26:09 · 2208 阅读 · 0 评论 -
数据结构之循环单链表(C语言实现)
数据结构之循环单链表(C语言实现)原创 2016-11-25 22:42:19 · 2354 阅读 · 0 评论 -
数据结构之队列(C语言实现)
数据结构之队列(C语言实现)在这里将介绍三种队列:数组实现的循环队列、链表队列和具有实用价值的优先级队列。本次只介绍前两种,优先级队列在下一次博客中再单独说明。原创 2016-12-01 19:24:23 · 19242 阅读 · 6 评论 -
数据结构之带优先级的队列(C语言实现)
数据结构之带优先级的队列(C语言实现)原创 2016-12-01 21:48:15 · 5323 阅读 · 4 评论 -
八大排序算法之交换排序
上一篇博文中已经分享了八大排序算法中两种插入排序算法--直接插入排序和希尔排序。本文来继续介绍剩下的排序算法--交换排序,包括冒泡排序和快速排序。其中关于冒泡排序还会介绍其改进后的算法,而对于快速排序则会介绍递归和非递归两种形式。说明:排序还是以从小到大为例。一、冒泡排序1.基本思想冒泡排序算法是比较常用而且特别容易理解的排序算法。每一趟冒泡过程挑选出一个最大或最小的数,N个数只需要N-1趟就可以原创 2017-08-08 10:31:36 · 415 阅读 · 0 评论 -
八大排序算法之归并排序
介绍到这里只剩下归并排序和基数排序没有介绍过了。这两种算法各有各的特点,归并排序是分治法的一种有效应用, 所谓归并是指将若干个已排好序的部分合并成一个有序的部分。而基数排序又称为桶排序,是唯一一种不需要元素之间相互比较就可以排好序的排序算法。一、归并排序1.基本思想这里介绍的归并排序是非递归版本的归并排序。基本思想如下:首先我们知道单个元素都是有序,然后我们逐渐增加元素之间的距离,最开始的时候为1原创 2017-08-12 20:23:11 · 518 阅读 · 1 评论 -
八大排序算法总结
前面的几篇博客中已经介绍了八大排序算法,在这里最后再进行总结一下,从算法思想、空间复杂度、时间复杂度和稳定性进行总结: 一、插入排序 1.直接插入排序 直接插入排序的过程可以分为三步:一是找到待排序元素应该插入的位置;二是移动后面的元素,为待排序元素插入腾出空间;最后是插入待排序元素。 改进后的直接插入排序是从后往前比较,这样就可以边移位边找待排序元素插入的位置。 2.希尔原创 2017-08-12 23:17:09 · 219 阅读 · 0 评论 -
线性表之顺序表(一)
在这里我们将介绍线性表的顺序存储结构–顺序表。这里我们介绍两种类型的顺序表,一种是静态的顺序表,另一种是动态增长的顺序表;并使用C和C++两种语言进行描述。这里给出C语言实现的具体的代码和说明,而C++的实现只是简单贴代码,不再详细说明。一、相关概念1.顺序表的概念线性表的顺序存储结构称为顺序表(sequential list).2.特点(1)顺序表是用一段地址连续的存储单元一次存储线性表的数据元原创 2017-08-19 23:30:22 · 414 阅读 · 0 评论 -
数据结构之查找(面试专用)
本篇博客主要用于对查找方面的数据结构做一个简单的介绍,能满足面试的时候问的问题深度即可,所以不会给出代码实现。一、静态查找表 静态查找表主要满足一下两点: a.查找某个“特定的”数据元素是否在查找表中; b.检索某个“特定的”数据元素的各种属性。方法特点时间复杂度顺序查找逐个比较,等概率比较O(n)二分查找前提是序列有序O(logn)次优查...原创 2018-05-22 16:29:35 · 824 阅读 · 0 评论