- 博客(116)
- 收藏
- 关注
原创 3.23Code
【总结】这种要求O(1)空间复杂度的,需要有一个东西记录住头,还需要有一个穿针引线的指针,去按我们需要的顺序把结点重新穿起来。【思路】其实就是找较小的一半数组和较大的一半数组。【注】有时候的交换其实就是值的交换,不用捣腾指针,而且注意更改指针后,后移不要盲目的想成p=p->next。————————————华丽的分界线:以下是大重点——————————【总结】本题涉及了一个关于进位的事就是写成if 9XXX,不要害怕。【注意】真的mid下标是begin+我想的mid!二叉排序树的限定条件下的数据输出。
2024-03-23 22:27:51 272
原创 3.22Code
【总结】并没有定义额外的数据结构,而是巧妙地定义了一个Stack数组和top指针。每访问到一个点就入栈,然后出栈,找到最后一个邻接点,把那个点入栈。——————————以下是邻接表相关的题目————————————【一定要结合3.21的迪杰斯特拉熟练一点!【总结-----邻接矩阵的结构体】【总结-----邻接表的结构体】基于邻接矩阵的新顶点的增加。基于邻接矩阵的新边的增加。基于邻接矩阵的顶点的删除。基于邻接表的新结点的增加。基于邻接矩阵的边的删除。基于邻接表的深度遍历。最长的最短路径的求解。
2024-03-22 17:13:31 226
原创 3.21Code
【注意】最大高度应该用一个全局变量来维护,而每次遍历到的深度则用临时变量来存储和递归传参,在递归前nowd++了,在这一层最终还要nowd--,以便向上回溯!遍历的时候,每进入一层,k++,n[k]++,k维护层数。遇到叶子结点时输出整个数组内容,否则存入当前结点名称,进入左右孩子的递归。————————以下是图及应用相关习题————————————————————————————华丽的分界线————————————————基于二叉链表的二叉树叶子结点到根结点的路径的求解。基于二叉链表的二叉树高度的计算。
2024-03-21 21:26:52 572
原创 3.20Code
入队出队靠rear来操纵,创建新结点加入的时候,创建的是LinkList类型(这样直接获得了一个指向结点的指针,这样好操作)(在已经输入好的二维数组中,每个元素都扫描一遍,一旦找到就退出)最好不要动态分配数据..虽然节省空间但是指针引用开辟空间很乱。还是注意C++输出两位小数的情况。附加判定标志的循环队列的基本操作。基于循环链表的队列的基本操作。基于两端操作的循环队列的实现。递归求解单链表中的结点个数。基于栈的后缀算术表达式求值。递归求解单链表中的最大值。递归求解单链表中的平均值。二维数组中的元素查重。
2024-03-20 12:30:07 194
原创 3.19Code
如果是奇数长度,栈顶指针就往后移动一位。查找链表中倒数第k个结点(上一章做的不对(⊙_⊙))通过str.length()来获得字符串长度。基于栈的中缀表达式求值(我赌这个不考,,)栈中空间是base指针开辟的char数组。删除链表中绝对值相等的节点。求解两个升序序列的中位数。输入的是string类型。
2024-03-19 22:22:33 100
原创 3.17Code
(是等于头结点还是等于首个存数据的结点,想清楚!每次记得移动每一个指针!还有就是当其中一个链表遍历到表尾时,想一想是tmp指针就此截断,还是去接上另一个没完的链表?【今日的几个链表指针操作非常的经典~~清晰】(这个输出多个空格就会wa,毛病多多..)这些题都是递增的输入所以比较简单。删除顺序表中指定值的所有元素。基于链表的两个集合的交集。非常经典的遍历两个链表操作。删除链表中满足区间值的结点。基于链表的两个集合的差集。双向循环链表中结点的交换。查找链表中倒数第k个节点。这样输出为啥就不对呢。
2024-03-17 17:22:40 164
原创 3.15Code
涉及了一堆数学的问题,想清楚就可以。cur是应该插入的地方,pre指向的是ta的前一个位置。基于链表的两个一元多项式的基本运算。用头插法进行上面的过程,就是反过来滴。基于链表的两个递增有序序列的合并。基于链表的两个非递减有序序列的合并。
2024-03-15 18:55:55 151
原创 3.9Code
之后写LinkList L,L就是一个LinkList类型的指针,相当于一个指向链表结点的指针,包括在遍历时用到的辅助指针p等,都是这个类型的。(顺便,C中其实是没有string的,如果定义了string,再用printf输出的话,要.c_str() )查找最爱图书(同顺序表,用一个数组存储待查序列,代码写的比较乱功能封装的也不好,摆烂..)对于链表的冒泡排序:(在创建链表时顺便就得到了链表长度,不用再额外遍历一遍了)基于链式存储结构的图书信息表的逆序存储(链表逆序就用头插法实现即可,很简单)
2024-03-09 11:36:33 230
原创 3.7Code
这样就很容易用数组来存储待查喜爱书名表了(真的搞不清char* char[] string[]之间的赋值和比较TAT)基于顺序存储结构的图书信息表的最爱图书的查找(这个用了纯C++风格字符串)这和上一道类似,这两个都是用一个数组存储待查表,然后遍历,找到的就输出。基于顺序存储结构的图书信息表的最佳位置图书的查找。基于顺序存储结构的图书信息表的最贵图书的查找。基于顺序存储结构的图书信息表的逆序存储。基于顺序存储结构的图书信息表的修改。基于顺序存储结构的图书信息表的排序。
2024-03-07 14:07:06 106
原创 3.6Code
C++引入了ostringstream、istringstream、stringstream这三个类,要使用他们创建对象就必须包含这个头文件。我的问题:如何通过空格分割这些输入的字符串并分别保存!(C语言scanf好解决一点但我选择C++....)istringstream类用于执行C++风格的串流的输入操作。ostringstream类用于执行C风格的串流的输出操作。strstream类同时可以支持C风格的串流的输入输出操作。它的作用是从string对象str中读取字符。
2024-03-05 22:37:50 230
原创 JSP与MVC设计模式与三层架构综合案例
java服务端页面,动态的网页技术可以理解为jsp=html+javajsp本质上就是一个servletBut——————JSP有很多缺点这里用了EL表达式(获取数据)与JSTL标签库(这里介绍的是foreach和if标签)替换JSP中的Java代码${brands}就是获取域中存储的key为brands的数据。
2022-11-09 20:58:16 626
原创 TinyRenderer学习笔记
TinyRenderer项目用tga文件来查看渲染出的图片,引入tgaimage.h与.cpp有了以上的头文件支持,就可以输出到tga图片了!运行。此时,发现线段C并没有显示在图片里,为什么呢——其实它和A是一条线,但是现在的画线代码,只有x0,y0比x1,y1小时才管用,否则t算出来是1~~~解决方式是,把这条线转换成根据y=x对称的线,这样,这条线的k就
2022-10-12 17:59:27 1341 2
原创 Games101-Chapter15-Ray Tracing 3(光线传播+全局光照)
理解之前在布林冯光照模型中提到的:衰减的不是indensity而是irradiance。这个点在所有可能的入射方向反射到这个方向的规律:反射方程。BRDF-如何把一个方向收集到的能量辐射到另一个方向去。甚至可以简化为:所有光源辐射出的能量+被反射后的能量。渲染方程:有物体自身发光,有别的光线反射而来。存留一个问题:(这是一个递归的过程)这里要补充一些概率论知识(略)这样写的最终目的是解渲染方程。双向反射分布函数BRDF。
2022-10-01 18:24:21 138
原创 Games101-Chapter14-Ray Tracing 2
--------------------------本节课探讨AABB怎么加速光线与场景求交问题-----------------------Oct-Tree是八叉树,三维中砍三刀,这个图是二维,那就是两刀分成4块,然后再把切出来的每个小区域切分(高维会很复杂)----->形成Bounding Volume Hierarchy结构(BVH)另一个技术-----空间划分(Spatial Partitions)这种方法什么好用什么时候不好用。对物体而不是空间进行划分----格子不能太稀疏也不能太密集。
2022-09-29 18:13:56 241
原创 Games101-Chapter13-Ray Tracing 1
------------------------------------------以下是光线追踪的基础知识--------------------------------现在要解决点与平面是否有交点——求光线上一点p是否在平面上。“光线追踪”---实质上就是从相机发射光线,直到光源。为啥选AABB这样的表达形式:因为计算简单~~~光栅化最大的问题-不适合去表现全局的效果。求点在三角形内-----之前就讨论过这个问题。刚刚遗留的问题:把光线和每个三角形求交太慢了。(分别求三组对面光线进入和离开的时间)
2022-09-29 10:06:15 305
原创 【STL***关联式容器】
RB-Tree的源码太难了,先不学...红黑树有五个特性:以下四种都是适配器!set,map的底层实现均为红黑树multiset和multimap也是基于红黑树,区别就在于可以插入相同的键值什么时候需要用multiset?当然是需要用set,但是又允许重复key存在的时候了。什么时候用set?需要随时往容器中插入元素,随时对元素进行快速查找,又需要按某种顺序对元素进行遍历的时候.
2022-09-27 11:01:18 306
原创 【STL***stack配接器】
会发现stack的功能deque都已经实现了,因此只需要对deque的功能进行部分封装。比如,提取出pop_back,push_back等。严格来说stack不是容器,是一个底部容器完成它所有的工作,而它只修改了容器的接口,它叫做配接器。上一篇,分析了deque.deque是一个双端开口,存放在连续空间中。而stack是栈,仅允许在尾部操作。
2022-09-26 10:30:49 109
原创 【STL***deque容器一】
deque的构造析构等基本属性获取的方法分析了, 注意的 range_initialize函数是我们看不到的实现. 而它确实非常重要的, 有了它, deque就能够对非random_access_iterator_tag类型的迭代器起作用, 考虑到"向下兼容". 下一节再来分析deque的删除操作。
2022-09-23 17:16:47 86
原创 【STL***list容器三】
list是一个循环双向链表, 不是一个连续地址空间, 所以sort功能需要特殊的算法单独实现, 而不能用算法中的sort. 当然还可以将list的元素插入到vector中最后将vector排序好的数据拷贝回来, 不过这种做法很费时, 费效率先分析几个会被调用的函数。
2022-09-21 11:06:02 340
原创 【STL***list容器一】
vector容器在涉及高频率插入删除时效率太低了list是用链表进行实现的,链表删除插入时间复杂度为O(1),效率相当高,不过随机访问就会变成O(n).list在插入和删除操作后,迭代器不会失效。
2022-09-18 10:43:44 172
原创 【STL***vector容器三】
vector适合用来做随机访问很快, 也支持适合频率较低的插入和删除操作, 在每次插入和删除后迭代器都会失效, 因为不能保证操作之后迭代器的位置没有改变。
2022-09-17 21:00:09 208
原创 【STL***vector容器二】
本节将vector的删除, 交换, 重载等操作进行的分析. 学到关于交换数组可以修改头尾指针即可, 并不实际交换整个元素. 同时要注意erase清除是一个左闭右开的区间. 因为insert的代码很多,也有一点复杂, 所以我将插入操作放到下节进行分析。
2022-09-17 20:41:37 188
原创 【STL***vector容器一】
vector的迭代器是一个普通的指针构造函数的重载满足不同的用户需求vector因为是类, 所以在生命周期结束后会自动调用析构函数, 用户不再手动的释放内存, 也不会出现内存泄露的问题, 用户也可以主动调用析构函数释放内存finish是指向最后一个元素的后一位地址, 不是直接指向最后一个元素。
2022-09-15 15:36:25 504
原创 【C++MiNiSTL项目开发笔记】
GitHub 是一个用于版本控制和协作的代码托管平台,ta能够让你和任何地方的其他工作者一起做项目。Git是目前世界上最先进的分布式版本控制系统git clone用于从github上下载源码git init如果是自己新创建一个文件夹,就在里边git然后告诉git管理这个文件夹下的代码就是输入在工作区写完文件夹时,提交(如果不是提交这个文件夹下所有的,就把点改成要提交的文件名就行)此时,那个文件就会进入准备提交的状态(把文件加入暂存区)这样,git会以数据库的形式把代码保存在git仓库中。
2022-09-10 09:18:11 859
原创 【***二叉树***】
递归前序遍历:另外两个遍历只需要调整一下打印或者放入数组这条语句的位置!递归较简单,迭代怎么实现前中后序遍历呢?递归的实质是:每一次递归,会把当前各种信息压入栈中递归返回时,弹出,返回上一层因此我们可以用栈来实现!对于前序遍历,访问顺序和处理顺序是一致的,所以代码较为简洁但中序遍历不行后序遍历仅需要在前序遍历的基础上做些修改接下来是利用队列实现的二叉树层序遍历。......
2022-08-14 15:54:27 153
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人