- 博客(112)
- 收藏
- 关注
原创 c/c++/vs2020/函数与指针形参
在函数定义时,将参数声明为指向指针的指针类型,并传递指针的地址作为实参。在函数定义时,将参数声明为引用类型,并将指针作为实参传递给函数。1. 传递指针作为参数:在函数定义时,将参数声明为指针类型,然后将指针作为实参传递给函数。在函数中使用指针作为参数传递可以让函数修改指针所指向的数据,或者通过指针返回额外的结果。// 将指针的地址传递给函数。// 将指针作为实参传递给函数。// 此时ptr指向一个新的内存空间,其中存储的值为10。// 修改指针所指向的值。// 此时num的值被修改为10。
2023-10-04 18:44:58 400
原创 C/C++/VS2022/指针/数组 调试出现debug
这个情况就很难受,编译没错,但是运行出现问题了,如果点击中止(重试、忽略)下一次运行还是会出现,看了显示的大致意思是在数组arry上出现了什么错误,经过检查发现,原来是数组在数入时,它的长度出现了问题,等于了MIN。将等于号取出后就无错了。
2023-10-04 16:31:28 489
原创 数据结构--7.2.1排序算法(冒泡、直接选择、直接插入)
假设含有n个记录的序列为{r1,r2,……,rn},其相应的关键字分别为{K1,K2,……,Kn},需确定1,2,3,……,n的一种排序p1,p2,p3,……,pn;使其相应的关键字满足kp1<=kp2<=kp3<=kp4<=……<=kpn非递减(或非递增)关系,即使得序列称为一个按关键字有序得序列{rp1,rp2,……,rpn},这样的操作就成为排序。在排序问题中,通常将数据元素称为记录。——显然我们输入得是一个记录集合,排序后输出的也是一个记录的集合。——所以我们可以将排序看成是线性表的一种操作。
2023-09-14 11:56:31 414
原创 数据结构--7.1散列表(哈希表)查找
我们要在a[ ] 中查找key关键字的记录:——顺序表查找:挨个儿查找——有序表查找:二分法查找——散列表查找记录的存储位置 = f(关键字)散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key)。这里我们把这种对应关系f称为散列函数,又成为哈希(Hash)函数。采用散列技术将记录存储在一块连续的存储空间中,这块连续存储空间称为散列表或哈希表(Hash table)。
2023-09-13 16:35:39 268
原创 数据结构--6.7多路查找树
一个结点拥有两个孩子和一个元素我们称之为2结点,它根二叉排序树类似,左子树包含的元素小于结点的元素,右子树包含的元素大于结点的元素。不过与二叉排序树不同的是,这个2结点要么没有孩子,要么孩子就应该有两个,不能只有一个孩子。——每一个非根的分支结点都有k-1个元素(关键字)和k个孩子,其中k满足:[m/2] < = k <= m。多路查找树的特点是每一个结点的孩子数可以多于两个,且每一个结点处可以存储多个元素。——Ai为指向子树根结点的指针。——如果根结点不是叶结点,则至少有两棵子树。
2023-09-13 14:56:51 57
原创 数据结构--6.5二叉排序树(插入,查找和删除)
二叉排序树(Binary Sort Tree)又称为二叉查找树,它或者是一棵空树,或者是具有下列性质的二叉树:——若它的左子树不为空,则左子树上所有结点的值均小于它的根结构的值;——若它的右子树不为空,则右子树上所有结点的值均大于它的根结构的值;——它的左、右子树也分为二叉排序树(递归)。
2023-09-10 18:26:12 298
原创 数据结构--6.3查找算法(静态、动态)(插值查找)
从第一个(或者最后一个)记录开始,逐个进行记录的关键字和给定值进行比较,若某个记录的关键字和给定值相等,则查找成功;对于静态查找来说,我们不妨可以用线性表结构组织数据,这样可以使用顺序查找算法,如果我们在对关键字进行排序,则可以使用折半查找算法或斐波那契查找算法来提高查找的效率。对于动态查找来说,我们则可以考虑使用二叉排序树的查找技术,另外我们还可以使用散列表结构来解决一些查找问题。动态查找:数据集合在查找的过程中需要同时添加或删除元素的查找操作。静态查找:数据集合稳定,不需要添加,删除元素的查找操作。
2023-09-05 23:05:25 545
原创 数据结构--6.2关键路径
在一个表示工程的带权有向图中,用顶点表示事件,用有向边上的权值表示活动表示持续时间,这种有向图的边表示活动的网,我们称为AOE网(Activity On Edge Network)。事件最晚发生时间,就是每个顶点对应的事件最晚需要开始的时间,如果超出此时间将会延误整个工期。我们把AOE网中没有入边的顶点称为始点或源点,没有出边的顶点称为终点或汇点。活动的最晚发生时间,就是不推迟工期的最晚开工时间。事件最早发生时间,就是顶点的最早发生时间。活动的最早开工时间,就是弧的最早发生时间。
2023-09-04 16:54:36 352
原创 数据结构--6.1拓扑排序
拓扑排序:设G=(V, E)是一个具有n个顶点的有向图,V中的顶点序列V1,V2,……,Vn满足若从顶点Vi到Vj有一条路径,则在顶点序列中顶点Vi必在顶点Vj之前。则我们称这样的顶点序列为一个拓扑序列。在一个表示工程的有向图中,用顶点表示活动,用弧表示活动之间的优先关系,这样的有向图为顶点表示活动的网,我们称之为AOV网(Active On Vertex Network)——从AOV网中选择一个没有前趋的顶点(该顶点的入读为0)并且输出它。——从网点删去该顶点,并且删去从该顶点出发的全部有向边。
2023-09-02 18:26:20 79
原创 数据结构--6.0最短路径
在网图和非网图中,最短路径的含义是不同的。——网图是两顶点经过的边上的权值之和最少的路径。——非网图是两顶点之间经过的边数最少的路径。我们把路径起始的第一个顶点称为源头,最后一个顶点称为终点。关于最短路径的算法:1、迪杰斯特拉算法(Dijkstra)2、弗洛伊德算法(Floyd)
2023-09-02 17:11:47 1545 2
原创 数据结构--5.3图的遍历(广度优先遍历)
广度优先遍历(BreadthFirstSearch),又称为广度优先搜索,简称BFS。要实现对图的广度遍历,我们可以利用队列来实现。(参考队列)(上述为结构)
2023-08-31 16:40:29 429 1
原创 数据结构--5.2马踏棋盘算法(骑士周游问题)
国际象棋的棋盘为8*8的方格棋盘,现将“马”放在任意指定的方格中,按照“马”走棋的规则将“马”进行移动。要求每个方格只能进入一次,最终使得“马”走遍棋盘64个方格。马踏棋盘问题(又称骑士周游问题或骑士漫游问题)是算法设计的经典问题之一。
2023-08-31 16:14:51 1412 1
原创 数据结构--5.1图的存储结构(十字链表、邻接多重表、边集数组)
边集数组是由两个一维数组构成的,一个是存储顶点的信息,另一个是存储边的信息,这个边数组每个数据元素由一条边的起点下标(begin),终点下标(end)和权(weight)组成。十字链表的好处就是因为把邻接表和逆邻接表整合在了一起,这样既容易找到Vi为尾的弧,也容易找到以Vi为头的弧,因而容易求得顶点的出度和入度。十字链表除了结构复杂一点外,其实创建图算法的时间复杂度是和邻接表相同的,因此,在有向图的应用中,十字链表也是非常好的数据结构模型。也就是说在邻接多重表里边,边表存放的是一条边,而不是一个顶点。
2023-08-31 14:54:39 1405
原创 数据结构--5.0.1图的存储结构
—图的存储结构相比较线性表与树来说就复杂很多——对于线性表来说,是一对一的关系,所以用数组或者链表均可简单存放。树结构是一对多的关系,所以我们要将数组和链表的特性结合在一起才能更好的存放。——我们的图,是多对多的情况,另外图上的任何一个顶点都可以被看作第一个顶点,任一顶点的邻接点之间不存在次序关系。——因为任意两个顶点之间都可能存在联系,因此无法以数据元素在内存中的物理位置来表示元素之间的关系(内存物理位置是线性的,图的元素关系是平面的)
2023-08-30 14:42:20 883
原创 数据结构体--5.0图
图(Graph)是由顶点的又穷非空集合合顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V表示图G中定点的集合,E是图G中边的集合。——线性表中我们把数据元素叫元素,树中叫结点,在图中数据元素我们则称之为定点(Vertex)。——线性表可以没有数据元素,称为空表,树中可以没有结点,叫做空树,而图中的定点集合是有穷非空的。(国外是允许空的)
2023-08-29 18:06:14 790
原创 数据结构--树4.2.5(赫夫曼(Huffman)编码)
根据字符出现的频率,利用赫夫曼编码可以构造出一中不等长的二进制,使编码后的电文长度最短,且保证不产生二义性。赫夫曼编码是首个实用的压缩编码方案,即使在今天的许多知名的压缩算法里,依然可以见到赫夫曼编码的影子。——WPL(Weighted Path Length)是树中所有叶子结点的带权路径长度之和。WPL的值越小,说明构造出来的二叉树性能越优。——从根结点到该结点的路径上的连接数。——树中每个叶子结点的路径长度之和。——结点的路径长度与结点权值的乘积。
2023-08-28 19:47:23 112 1
原创 数据结构--树4.2.4(树、森林即二叉树的相互转换(仅供参考))
判断一棵二叉树能够转换成一棵树还是森林,标准很简单,那就是只要看这颗二叉树的根结点有没有右孩子,有的话就是森林,没有的话就是一棵树。森林的遍历也分为前序遍历和后序遍历,其实就是按照树的先根遍历和后根遍历依次访问森林的每一棵树。2、对每个结点,除了保留与其长子(最左边)的连线外,去掉该结点与其他孩子的连线。1、若结点x是其双亲y的左孩子,则把x的右孩子,右孩子的右孩子,……2、将各二叉树的根结点视为兄弟从左至右连在一起,就形成了一棵二叉树。树、森林的前序遍历和二叉树的前序遍历结果相同。
2023-08-28 19:04:16 1056
原创 数据结构--树4.2.3(线索二叉树)
利用中序遍历可以解决二叉树中空出来的内存,以及前驱后继的问题。——ltag为0时指向该结点的左孩子,为1时指向该结点的前驱。——rtag为0时指向该结点的有孩子,为1时指向该结点的后继。
2023-08-28 16:27:03 705
原创 数据结构--树4.2.1(二叉树)
若树为空,则空操作返回,否则从根结点开始(注意:并不是先访问根结点),中序遍历根结点的左子树,然后是访问根结点,最后访问中序遍历右子树。若树为空,则空操作返回,否则从树的第一层,也就是根结点开始访问,从上而下逐层遍历,在同一层中,按从左到右的顺序对结点逐个访问。若树为空,则空操作返回,否则从左到右先从叶子后结点的方式遍历访问左右子树,最后访问根结点。若二叉树为空,则空操作返回,否则先访问根结点,然后前序遍历左子树,在前序遍历右子树。,在访问一个结点后,下一个被访问的结点面临着不同的选择。
2023-08-27 23:07:29 574
原创 数据结构--树4.2(二叉树)
二叉树(Binary Tree)是n(n>0)个结点的有限集合,该集合或者为空集(空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成。对一棵具有n个结点的二叉树按层序编号,如果编号为i(1
2023-08-27 21:00:28 845
原创 数据结构--树4.1
树(Tree)是n(n>=0)个结点的有限集。当n=0时称为空树,在任意一个非空树中:——有且仅有一个特定的称为根(Root)的结点;——当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1、T2、……,其中每一个集合本身又是一棵树,并且称为根的子树(SubTree)。——n>0时,根结点是唯一的,坚决不可能存在多个结点。——n>0时,子树的个数是没有限制的,但它们互相是一定不会相交的。
2023-08-27 20:03:49 1007
原创 数据结构--栈和队列 3.3队列
队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。与栈相反,队列是一种先进先出(First In First Out ,FIFO)的线性表。同时,队列也是一种重要的线性结构,实现一个队列同样需要顺序表或链表作为基础。
2023-08-15 20:11:45 337
原创 数据结构--栈和队列3.2(逆波兰)
在计算一个数学式子时,如计算(3-2)+6*(2+3)时,按照我们一般的思路会优先计算括号内的算式,在计算乘法(算的快的伙伴可以同时计算)最后在将+两边的结果相加得到一个新的数值。4、输入 + ,遇到 “ + ”,计算base 和base +1 所存储的数据,对他们进行相加,输出最终结果。1、3 2 -先输入3 2,遇到“-”就对 3 2 进行减计算,存储到base(栈的最底层);2、2 3 +输入2 3,遇到 “+”就对 2 3进行加计算,存储到base+1;(仅供参考,如有问题,可私信)
2023-08-13 22:52:48 394 1
原创 数据结构--栈和队列3.1(栈-顺序结构)
栈的插入操作叫做进栈(Push),或者称为压栈、入栈。栈的删除操作叫做出栈(Pop),或者称为弹栈。栈又称为先进后出(last in first out)的后进先出原则,称为后进先出的线性表(LIFO)。栈的本质上也是一个线性表,线性表有两种存储形式,那么栈也有分为栈的顺序存储结构和栈的链式存储结构。最开始栈中不含有任何数据,叫做空栈,此时栈定就是栈底。然后数据从栈顶进入,栈顶栈底分离,整个栈的当前容量变大。数据出栈时,从栈顶移出,栈顶下一,整个栈的当前容量变小。
2023-08-11 13:14:19 573
原创 数据结构--线性表2-2
/realloc(*p,newsize)函数的意思是:新开一片大小为newsize的连续空间,并把以*p为首地址的原空间数据都拷贝进去。例题2:设正整数a的前驱为PRIOR(a),后继NEXT(a),用递归算法计算a+b。if(L.length>=L.listsize)//若表长超过表尺寸则要增加尺寸。//增加1个数据元素,则表长+1。
2023-08-03 19:01:19 777
原创 数据结构--线性表2-1
若结构时非空有限集,则有且仅有一个开始结点和一个终端结点,并且所有结点都最多只有一个直接前驱和一个直接后继。可表示为:(a1,a2,a3,……,an)1,2,3,……,n:下标,即元素的序号,表示元素在表中的位置。n为元素总个数,即表长。n>=0。当n=0时,称为 空表。特点1、只有一个首结点和尾结点;特点2、除首尾结点外,其它结点只有一个直接前驱和一个直接后继。线性结构包括:线性表、堆栈、队列、字符串、数组等。其中最典型、最常用的是-----线性表。
2023-07-24 00:25:19 540
原创 简单的游戏设计----动画的基本原理
视觉暂留现象就是指光对视网膜所产生的视觉在光停止作用后仍然会保留一段时间,即在物体快速运动时,当人眼所看到的影响消失后,人眼仍能继续保留其影响0.1~0.4s之间的图像。在光栅扫描显示器中,电子束按照固定的扫描顺序,从上到下,从左至右,依次扫描整个屏幕,只有这个屏幕被扫描完毕才能显示一幅完整的图形,称为。对于图形显示方式,用水平和垂直方向能显示的像素数的乘积表示屏幕的显示分辨率,而对于文本显示方式,则用水平和垂直方向能显示的字符数的乘积表示屏幕的显示分辨率。每秒重绘屏幕图形的次数,称为刷新频率。
2023-07-17 09:32:54 304
原创 C语言--常用字符与ASCII码值对照表
第三部分:由128到255共128个字符,一般称为ASCII扩展坞,这128个扩展的ASCII字符是由IBM制定的,不是标准的ASCII码,ASCII扩展坞用来存放英文制表符、部分音标字符和其他欧洲非英语系的字符。第一部分:由0到31共32个,一般为通信专用字符或控制字符。第二部分:由32到127共96个,这96个字符是用来表示阿拉伯数字、英文字母大小写和下划线、括号等可显示字符。注意:对于无符号字符,ASCII码值为128~255,对于有符号字符型,ASCII码的值为-128~-1.
2023-07-13 21:37:05 3670
原创 C语言--C运算符的优先级与结合性
()[ ]->++ --圆括号、函数参数表数组元素下标指向结构体成员引用结构体成员后缀增1、后缀减1!++ --(类型标识符)sizeof逻辑非按位取反前缀增1、前缀减1取负间接寻址运算符取地址运算符强制类型转换运算符计算字节数运算符加、减< <=> >=小于、小于等于大于、大于等于=赋值运算符复合的复制运算符。
2023-07-13 17:05:39 291
原创 C语言---C关键字、GCC中基本数据类型的取值范围
特别的是,long long,unsigned long long 和long double都是C99标准新加上去的,一些老的编译器(如Visual C++ 6.0等)不支持该类型,虽然现在的编译器都支持C99标准,但很多默认编译器还是默认为C89标准,需要指定按C99标准编译。例如,在Code::Blocks的GCC编译器中,双精度型变量占8个字节,长双精度型变量则占12个字节。例如,一个程序逻辑中有一个很大的循环,循环中有几个变量要频繁进行操作,这些变量可以声明为register类型。
2023-07-13 16:48:38 407
原创 数据结构--栈
用栈计算逆波兰表达式的基本思路是:按顺序遍历整个表达式,若遇到操作数(假设都是二元运算符),则入栈,若遇到操作符,则连续弹出两个操作数并执行相应的运算,然后将其运算结果入栈。例如,对于表达式a*b+(c-d/e)*f,则其前缀表达式+ * ab-c/def,中缀表达式为a*b+(c-d/e)*f,后缀表达式为ab*cde/-f*+。以二元算术运算符为例,算术表达式的一般形式为s1+op+s2,则op+s1+s2为前缀表示法(也成为波兰表达式),s1+op+s2为中缀表示法,栈的一个典型应用是表达式求值。
2023-07-13 14:04:01 1120
原创 文件操作--文件的随机读写、标准输入输出重定向
为了实现文件的定位,在每一个打开的文件中,都有一个文件位置指针(File Location Pointer),也称文件位置标记,用来指向当前读写文件的位置,它保存了文件中的位置信息。当对文件进行顺序读写时,每读完一个字节后,该位置指针自动移到下一个字节的位置。不同于顺序读写的是,文件的随机访问(Random Access)允许在文件中的随机定位,并在文件的任何位置直接读写数据。其中,函数fseek()的功能是将fp的文件位置指针从fromwhere开始移动offset个字节,指示下一个要读取的数据的位置。
2023-07-13 00:08:56 892
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人