
C++数据结构
文章平均质量分 75
Cainv89
业精于勤荒于嬉,行成于思毁于随。
展开
-
数据与数据结构
数据与数据结构1. 数据1.1 数据(data)数据:是信息的载体,是描述客观事物的数、字符,以及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。1.2 数据大致分的两类:(1)数值性数据;(2)非数值数据数值性数据:主要包括整数、浮点数、复数、双精度数等,主要用于工程和科学计算,以及商业事务处理。非数值数据:主要包括字符和字符串,以及文字、图形、图像、语音等数据。1.3 数据元素(d原创 2016-03-03 00:27:22 · 1336 阅读 · 0 评论 -
迷宫问题(MazePath)的求解——利用回溯法(backtracking)
迷宫问题(MazePath)的求解——利用回溯法(backtracking)1. 迷宫问题的提法迷宫问题是典型的图的搜索问题。假设一个迷宫,只有一个入口和一个出口。如果从迷宫的入口到达出口,途中不出现行进方向错误,则得到一条最佳路线。为此,用一个二维数组maze[m][n]来表示迷宫。 (1)当数组元素maze[i][j]=1 (0≤i≤m-1,1≤j≤n-1),表示该位置是墙壁,不能通行。 (2)当原创 2016-05-25 23:07:51 · 26708 阅读 · 8 评论 -
栈(Stack)
栈(Stack)1. 栈的概念1.1 栈的定义栈是一种特殊的线性表,是一种运算受限的线性表。栈是后进先出(LIFO,Last In First Out)的线性表。1.2 栈的逻辑结构和存储表示栈的逻辑结构和线性表相同。栈的抽象数据类型有两种典型的存储表示:基于数组的存储表示和基于链表的存储表示。 (1)基于数组的存储表示实现的栈称为顺序栈,顺序栈可以采用顺序表作为其存储表示,因此,可以在顺序栈原创 2016-05-12 22:38:59 · 808 阅读 · 0 评论 -
队列(Queue)
队列(Queue)1. 队列的概念1.1 队列的定义队列是一种特殊的线性表,是一种运算受限的线性表。队列是先进先出(FIFO,First In First Out)的线性表。1.2 队列的逻辑结构和存储表示队列的逻辑结构和线性表相同。队列的抽象数据类型有两种典型的存储表示:基于数组的存储表示和基于链表的存储表示。 (1)基于数组的存储表示实现的队列称为顺序队列,顺序队列可以采用顺序表作为其存储原创 2016-05-26 00:13:14 · 2023 阅读 · 0 评论 -
顺序队列(Sequential Queue)
顺序队列(Sequential Queue)1. 顺序队列的概念1.1 顺序队列的定义顺序队列是基于数组的存储表示实现的队列。1.2 顺序队列中各元素的逻辑及存储关系顺序队列可以采用顺序表作为其存储表示,因此,可以在顺序队列的声明中用顺序表定义它的存储空间。顺序队列可以使用一维数组作为队列的存储空间,存放队列元素的数组的头指针为*elements,该数组的最大允许存放元素个数为maxSize,当前原创 2016-05-26 19:05:47 · 7536 阅读 · 0 评论 -
循环队列(Circular Queue)
循环队列(Circular Queue)1. 循环队列的概念1.1 循环队列的定义为了能够充分地使用数组中的存储空间,克服”假溢出”现象,可以把数组的前端和后端连接起来,形成一个环形的表,即把存储队列元素的表从逻辑上看成一个环,成为循环队列(circular queue)。1.2 循环队列中各元素的逻辑及存储关系循环队列的首尾相接,当队头指针front和队尾指针rear进到maxSize-1后,再前原创 2016-05-28 18:09:41 · 11786 阅读 · 0 评论 -
链式队列(Linked Queue)
链式队列(Linked Queue)1. 链式队列的概念1.1 链式队列的定义链式队列是基于链表的存储表示实现的队列。1.2 链式队列中各元素的逻辑及存储关系链式队列可以采用单链表作为其存储表示,因此,可以在链式队列的声明中用单链表定义它的存储空间。链式队列的队头指针指向单链表的第一个结点,队尾指针指向单链表的最后一个结点。注:链式队列的队头元素存放在单链表的第一个结点内,若要从队列中退出一个元原创 2016-05-28 19:03:37 · 13902 阅读 · 0 评论 -
迷宫最短路径问题(ShortestPath)的求解——利用链式队列
迷宫最短路径问题(ShortestPath)的求解——利用链式队列注:借助于栈求解迷宫问题时,并不能保证找到一条从迷宫入口到迷宫出口的最短路径。而借助于队列,可以找到从迷宫入口到迷宫出口的最短路径(如果有的话)。在迷宫中寻找最短路径问题在其他领域也存在,例如,在解决电路布线问题时,一种很常用的方法是在布线区域叠上一个网格,该网格把布线区域划分成n*m个方格,就像迷宫一样。从一个方格a的中心点连接到另一个方格b的中原创 2016-06-05 12:09:15 · 13205 阅读 · 3 评论 -
打印杨辉三角形(Pascal's triangle)——利用链式队列
打印杨辉三角形(Pascal’s triangle)——利用链式队列1. 杨辉三角的概念杨辉三角,又称贾宪三角形,帕斯卡三角形,是二项式系数在三角形中的一种几何排列。将二项式(a+b)i展开,其系数构成杨辉三角形(国外称Pascal’s triangle),按行将展开式系数的前n行打印出来。从三角形的形状可知,除第1行以外,在打印第i行时,用到上一行(第i-1行)的数据,在打印第i+1行时,又用到第i行的数原创 2016-05-31 00:29:20 · 13595 阅读 · 8 评论 -
优先级队列(Priority Queue)
优先级队列(Priority Queue)注:队列是一种特征为FIFO的数据结构,每次从队列中取出的是最早加入队列中的元素。但是,许多应用需要另一种队列,每次从队列中取出的应是具有最高优先权的元素,这种队列就是优先级队列(Priority Queue),也称为优先权队列。1. 优先级队列的概念1.1 优先级队列的定义优先级队列是不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优先权的元素。原创 2016-06-05 17:14:45 · 30176 阅读 · 4 评论 -
双端队列(Double-ended Queue)
双端队列(Double-ended Queue)注:队列是一种只允许在一端删除而在另一端插入的数据结构。双端队列(Deque)是队列的一种拓展,它可以在队列的两端进行插入和删除。1. 双端队列(Deque)的概念1.1 双端队列的定义双端队列是限定插入和删除操作在表的两端进行的线性表,是一种具有队列和栈的性质的数据结构。1.2 双端队列的特点双端队列中的元素可以从两端入队和出队,其限定插入和删除原创 2016-06-12 22:43:40 · 18743 阅读 · 1 评论 -
字符串(String)
字符串(String)1. 字符串的概念1.1 字符串的定义字符串,是一串文字和符号的序列,是由零个或多个字符的顺序排列所组成的数据结构,其基本组成元素是单个字符(char),字符串的长度可变。字符串简称为串(String),是n(n≥0)个字符的一个有限序列。通常可记为S=”a0a1a2……an−1”,其中,S是串名,可以是串变量名,也可以是串常量名。用引号‘…’或“…”作为分界符括起来的叫做串值,原创 2016-09-05 00:50:53 · 6307 阅读 · 0 评论 -
树(Tree)
树(Tree)1. 树的概念树形结构是以分支关系定义的层次结构,是一类重要的非线性数据结构。树是包含n(n>0)个结点的有穷集,也就说树是由一个集合以及在该集合上定义的一种关系构成的。树可分为无根树(自由树、无序树)和有根树(系统树、有序树)。 (1)无根树(unrooted tree): 在离散数学中指无环连通无向图。 (2)有根树(rooted tree):指具有方向的系统发生树(phylogen原创 2016-10-11 22:33:25 · 10439 阅读 · 0 评论 -
广义表(Generalized List)
广义表(Generalized List)1. 广义表的概念1.1 广义表的定义广义表(Generalized List,又称列表,或表)是一种非线性的数据结构,是线性表的一种推广。广义表中放松对表元素的原子限制,容许它们具有其自身结构。即广义表的定义是递归的,因为在表的描述中又用到了表,允许表中有表,这种递归的定义能够很简洁地描述庞大而复杂的结构。一个广义表LS定义为n(n≥0)个元素a0,a1,a原创 2016-09-27 22:28:27 · 7725 阅读 · 2 评论 -
汉诺塔(Tower of Hanoi)问题的求解——利用栈与递归
汉诺塔(Tower of Hanoi)问题的求解——利用栈与递归1. 汉诺塔问题的提法汉诺塔问题是使用递归解决问题的经典范例。传说婆罗门庙里有一个塔台,台上有3根标号为A、B、C的用钻石做成的柱子,在A柱上放着64个金盘,每一个都比下面的略小一点。把A柱上的金盘全部移到C柱上的那一天就是世界末日。移动的条件是:一次只能移动一个金盘,移动过程中大金盘不能放在小金盘上面。庙里的僧人一直在移个不停,移动的最少总原创 2016-05-22 23:32:19 · 12614 阅读 · 4 评论 -
链式栈(Linked Stack)
链式栈(Linked Stack)1. 链式栈的概念1.1 链式栈的定义链式栈是基于链表的存储表示实现的栈。1.2 链式栈中各元素的逻辑及存储关系链式栈可以采用单链表作为其存储表示,因此,可以在链式栈的声明中用单链表定义它的存储空间。链式栈的栈顶在链表的表头,因此,新结点的插入和栈顶结点的删除都在链表的表头,即栈顶进行。1.3 链式栈的特点采用链式栈来表示一个栈,便于结点的插入与删除。在程原创 2016-05-14 17:49:56 · 7037 阅读 · 1 评论 -
双栈(Dual Stack)
双栈(Dual Stack)1. 双栈的概念1.1 双栈的定义双栈是指两个顺序栈,是一种特殊的顺序栈。1.2 双栈中各元素的逻辑及存储关系双栈共享一个地址连续的存储单元。即程序同时需要两个栈时,可以定义一个足够大的栈空间,该空间的两端分别设为两个栈的栈底,用bottom[0]=-1和bottom[1]=maxSize指示。压入数据时,让两个栈的栈顶top[0]和top[1]都向中间伸展,如果指示栈原创 2016-05-14 01:32:34 · 21477 阅读 · 2 评论 -
常用的数据结构
常用的数据结构1. 数组(Array)数组可以说是最基本的数据结构,在各种编程语言中都有对应。数组是一种聚合数据类型,它是将具有相同类型的若干变量有序地组织在一起的集合。一个数组可以分解为多个数组元素,按照数据元素的类型,数组可以分为整型数组、字符型数组、浮点型数组、指针数组和结构数组等。数组还可以有一维、二维以及多维等表现形式。2. 栈(Stack)栈是一种特殊的线性表,它只能在一个表的一个固定端原创 2016-03-04 19:19:53 · 875 阅读 · 0 评论 -
多维数组(Multi-dimensional Array)
多维数组(Multi-dimensional Array)1. 多维数组的概念多维数组是指二维及以上的数组。数组是下标(index)和值(value)组成的序对的集合。在数组中,每个有定义的下标都与一个值对应,这个值称作数组元素。 (1)二维数组:”数组元素为一维数组”的一维数组。 (2)三维数组:”数组元素为二维数组”的一维数组。 (3)四维数组:”数组元素为三维数组”的一维数组,如此类推。静态原创 2016-06-24 20:52:21 · 9016 阅读 · 0 评论 -
特殊矩阵——对称矩阵(Symmetric Matrix)
特殊矩阵——对称矩阵(Symmetric Matrix)注:压缩存储的矩阵可以分为特殊矩阵和稀疏矩阵。对于那些具有相同元素或零元素在矩阵中分布具有一定规律的矩阵,被称之为特殊矩阵。对于那些零元素数据远远多于非零元素数目,并且非零元素的分布没有规律的矩阵称之为稀疏矩阵。1. 对称矩阵的概念元素以主对角线为对称轴对应相等的矩阵。2. 对称矩阵的特性对角矩阵都是对称矩阵,对称矩阵必须是方形矩阵。设一个n原创 2016-06-26 14:58:59 · 28517 阅读 · 1 评论 -
特殊矩阵——三对角矩阵(Tridiagonal Matrix)
特殊矩阵——三对角矩阵(Tridiagonal Matrix)1. 三对角矩阵的概念三对角矩阵就是对角线、邻近对角线的上下次对角线上有元素,其他位置均为0的矩阵。三对角矩阵是一种特殊的上Hessenberg矩阵(这个就是上三角矩阵加上下三角部分的第一条次对角线有元素,其他都为0元素)。2. 三对角矩阵的特性设一个n*n的方阵A,对于矩阵A中的任一元素aij,当|i-j|>1时,有aij=0(0≤i≤n原创 2016-06-27 13:06:31 · 80465 阅读 · 4 评论 -
顺序表(Sequential List)
顺序表(Sequential List)1. 顺序表的概念1.1 顺序表的定义顺序表是线性表基于数组的顺序存储表示。1.2 顺序表中各元素的逻辑及存储关系顺序表是按照顺序存储方式存储的线性表, 把线性表中的所有表项按照其逻辑顺序依次存储到从计算机存储中指定存储位置开始的一块连续的存储空间中。顺序表各个表项的逻辑顺序与其存放的物理顺序一致,即第i个表项存储于第i个物理位置(1<=i<=n)。由于顺原创 2016-03-05 16:58:25 · 3715 阅读 · 0 评论 -
单链表(Singly Linked List)
单链表(Singly Linked List)1. 单链表的概念1.1 单链表的定义单链表是线性表的链式存储表示。1.2 单链表的结点结构单链表的结点包括两个部分:数据域和指针域。 (1)数据域(data),用于存储该结点的数据元素,数据元素类型由应用问题决定。 (2)指针域(link),用于存放一个指针,该指针指向下一个结点的开始存储地址。单链表的结点结构示意图: 1.3 单链表中各结点原创 2016-03-24 20:21:26 · 4104 阅读 · 0 评论 -
双向链表(Doubly Linked List)
双向链表(Doubly Linked List)1. 双向链表的概念1.1 双向链表的定义双向链表又称为双链表,是链表的一种。1.2 双向链表的结点结构双向链表的结点包括三个部分:前驱指针域、数据域和后继指针域。 (1)前驱指针域(lLink),又称为左链指针,用于存放一个指针,该指针指向上一个结点的开始存储地址。 (2)数据域(data),用于存储该结点的数据元素,数据元素类型由应用问题决定。原创 2016-05-03 23:42:56 · 16434 阅读 · 1 评论 -
循环链表(Circular Linked List)
循环链表(Circular Linked List)1. 循环链表的概念1.1 循环链表的定义循环链表是另一种形式的表示线性表的链表。1.2 循环链表的结点结构循环链表的结点包括两个部分:数据域和指针域。 (1)数据域(data),用于存储该结点的数据元素,数据元素类型由应用问题决定。 (2)指针域(link),用于存放一个指针,该指针指向下一个结点的开始存储地址。循环链表的结点结构示意图:原创 2016-05-03 00:42:13 · 7640 阅读 · 0 评论 -
约瑟夫(Josephus)问题的求解——利用循环链表
约瑟夫(Josephus)问题的求解——利用循环链表1. 约瑟夫问题的提法约瑟夫问题(约瑟夫环)是一个数学的应用问题。已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围,从编号为k的人开始报数,数到m的那个人出列,他的下一个人又从1开始报数,数到m的那个人又出列,依此规律重复下去,直到圆桌周围的人全部出列。通常解决这类问题时我们把编号从1~n,最后结果编号即为原问题的解。2. 求解约瑟夫问题的原创 2016-05-07 01:07:21 · 9112 阅读 · 0 评论 -
多项式(Polynomial)的运算——利用单链表
多项式(Polynomial)的运算——利用单链表1. 多项式的概念1.1 多项式的定义有限的单项式之和称为多项式,其中每个单项式叫做多项式的项,不含字母的项叫做常数项。多项式里,次数最高的项的次数叫做这个多项式的次数。多项式按某个字母降或升幂排序。单项式与多项式统称为整式。1.2 多项式的表示通常在数学中对一元n次多项式可表示成如下的形式,设多项式的最高可能阶数为maxDegree,当前的最原创 2016-05-11 16:39:11 · 9331 阅读 · 1 评论 -
线性表(Linear List)
线性表(Linear List)1. 线性表的概念线性表是最基本、最简单、也是最常用的一种数据结构。线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的(注意,这句话只适用大部分线性表,而不是全部。比如,循环链表逻辑层次上也是一种线性表(存储层次上属于链式存储),但是把最后一个数据元素的尾指针指向了哨位结点)。在数据结构逻辑层次上细分,线性表可分为一般线原创 2016-03-05 14:27:08 · 5662 阅读 · 0 评论 -
稀疏矩阵(Sparse Matrix)
稀疏矩阵(Sparse Matrix)注:压缩存储的矩阵可以分为特殊矩阵和稀疏矩阵。对于那些具有相同元素或零元素在矩阵中分布具有一定规律的矩阵,被称之为特殊矩阵。对于那些零元素数据远远多于非零元素数目,并且非零元素的分布没有规律的矩阵称之为稀疏矩阵。1. 稀疏矩阵的概念在矩阵中,若数值为0的元素数目远远多于非0元素的数目时,则称该矩阵为稀疏矩阵。与之相反,若非0元素数目占大多数时,则称该矩阵为稠密矩阵。原创 2016-06-29 21:12:08 · 26768 阅读 · 2 评论 -
顺序栈(Sequential Stack)
顺序栈(Sequential Stack)1. 顺序栈的概念1.1 顺序栈的定义顺序栈是基于一维数组的存储表示实现的栈。1.2 顺序栈中各元素的逻辑及存储关系顺序栈可以采用顺序表作为其存储表示,因此,可以在顺序栈的声明中用顺序表定义它的存储空间。顺序栈可以使用一维数组作为栈的存储空间,存放栈元素的数组的头指针为*elements,该数组的最大允许存放元素个数为maxSize,当前栈顶位置由数组下标原创 2016-05-13 20:20:57 · 2076 阅读 · 0 评论 -
二叉树(Binary Tree)
二叉树(Binary Tree)1. 二叉树的概念及其特点二叉树是树形结构的一种重要类型。二叉树是每个结点最多有两个子树的树结构,通常子树被称作“左子树(left subtree)“和“右子树(right subtree)”。二叉树的子树有左、右之分,其子树的次序不能颠倒。注:二叉树是递归定义的,分支数最大不超过2的有根有序树。2. 二叉树的五种不同形态空二叉树,一个结点也没有,如图(1)。只有原创 2017-03-26 22:22:20 · 1783 阅读 · 1 评论