摘要:
广义表是非线性结构,其定义是递归的。 以下给出几种简单的广义表模型: 由上图我们可以看到,广义表的节点类型无非head、value、sub三种,这里设置枚举类型,利用枚举变量来记录每个节点的类型: 每个节点都有自己的类型以及next指针,除此之外,如果该节点是VALUE类型还要分配空间存储该节点的有 阅读全文
摘要:
没有经过处理的稀疏矩阵其实就是一个特殊的二维数组,数组中的大部分元素是0或者其他类型的非法值,只有少数几个非零元素。 为了实现压缩存储,可以只存储稀疏矩阵的非0元素。在存储稀疏矩阵中的非0元素时,必须要存储该元素的行列号以及元素值。 我们可以封装一个三元组类来存储这些元素。 创建稀疏矩阵。利用容器, 阅读全文
摘要:
设一个N*N的方阵A,A中任意元素A[i][j],当且仅当A[i][j] == A[j][i](0 <= i <= N-1 && 0 <= j <= N-1),则矩阵A是对称矩阵。 以矩阵的对角线为分隔,分为上三角和下三角。 如上图,对称矩阵压缩存储存储时只需要存储上三角/下三角的数据,一般情况下用 阅读全文
摘要:
迷宫地形我们可以通过读文件的形式,通过已知入口逐个遍历坐标寻找通路。 文件如图: 每个坐标的位置用结构体来记录: 定义行列范围: 初始化迷宫数组:将通过读文件的方式获取的字符转成整型数据,保存在M行N列的数组中。 回溯查找通路: 利用栈来存储通路,通过上下左右四个方向依次遍历,如果该位置满足条件,就 阅读全文
摘要:
斐波那契数列:1,1,2,3,5,8,13,21……这个数列从第三项开始,每一项都等于前两项之和。 如果设F(n)为该数列的第n项(n∈N+)。那么菲波那切数列可以概括成如下形式: 简单的递归写法: 非递归循环方法: 这个方法只设置了三个变量,依次循环替换将结果放到数组的第三个变量中。这种方法虽然可 阅读全文
摘要:
今天敲代码的时候发现了一个BUG和大家分享一下,希望大家下次不要犯和我一样的错误。 如果犯了和我一样的错,也能知道自己错在哪里! <(^-^)> 函数如下:(斐波那契数列的实现) 上面的程序有BUG,如果传给函数的参数是0,程序就会因为触发一个断点而崩溃。 单步调试,根据内存窗口就会发现问题所在! 阅读全文
摘要:
本文旨在通过对 写时拷贝 的四个方案(Copy On Write)分析,让大家明白写时拷贝的实现及原理。 关于浅拷贝与深拷贝,我在之前的博客中已经阐述过了 浅拷贝容易出现指针悬挂的问题,深拷贝效率低,但是我们可以应用引用计数来解决浅拷贝中多次析构的问题,写时拷贝也就应运而生了。 首先要清楚写时拷贝是 阅读全文
摘要:
深拷贝的现代写法相比传统写法更加简单。也就是建立一个中间对象tmp,它的_str指针指向的内容是s._str的一份拷贝,交换tmp._str和_str后,_str就指向了s._str那份拷贝,出了作用域tmp会自动调用它的析构函数,也就把原先_str指向的内存释放了,同样达到了我们要的效果。 如下图 阅读全文
摘要:
浅拷贝会造成指针悬挂的问题。 举个例子:两个对象是s1和s2的指针_str都指向new开辟的同一块空间,如下图,主程序结束时,对象逐个撤销,先撤销对象s2,会调用析构函数释放动态分配的内存;再撤销对象s1时,s1._str所指向的内存空间已经是无法访问了,而s2._str原先指向的那块内存却无法释放 阅读全文
摘要:
这里建立两个类,一个节点类和一个List类,与单链表不同的是双向链表的节点要多一个前驱指针,相应的,双向链表函数实现要与单链表实现有所差异 阅读全文
摘要:
单链表的结构有多种 这里介绍的链表有头结点、有尾节点并且尾节点指向头结点 单链表的每个结点的地址存放在其直接前驱结点的指针域中。其中第一个结点没有前驱结点,因此需要一个头指针指向第一个节点,便于我们对整个链表进行操作;这里的单链表的最后一个节点的指针域存放的是头结点的地址。 单链表不能随意存取,必要 阅读全文
摘要:
顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。 这样的存储方式使得线性表逻辑上相邻的元素,其在物理存储单元中也是相邻的。只要知道了第一个元素的存储地址,就可以知道线性表中任何一个元素的存储地址。因此,线性表中的任何一个元素, 本文利用C++语 阅读全文
摘要:
一.目的 1.通过这次实验,加深对动态分区分配的理解,进一步掌握首次适应算法和最佳适应算法的理解。了 解动态分区分配方式中使用的数据结构和分配算法,进一步加深对动态分区存储管理方式及其实现 过程的理解。提高学生设计实验、发现问题、分析问题和解决问题的能力。 2.学会可变式分区管理的原理是在处理作业过 阅读全文
摘要:
功能:实现日期的简单操作
基本的成员函数:构造函数,拷贝构造函数,析构函数,赋值运算符重载,操作符重载(两个日期间比较大小)
日期类功能函数: 1:计算一个日期加上多少天数后的日期 2:把该日期改为加上指定数目的天数后的日期
3:一个日期减上多少天数后的日期 4:把该日期改为减去指定数目的天数后的日期 5:该日期加1(前置++)(后置++)
6:该日期减1(前置--)(后置--) 7:计算某日期到未来某日期间隔的天数 By :Lynn-Zhang 阅读全文
摘要:
在新版编程器的编译过程中我们常常会遇到一些过时或者不安全的函数 举一个简单的例子: 很多带"_s"后缀的函数是为了让原版函数更安全,传入一个和参数有关的大小值,避免引用到不存在的元素,因为有时候黑客可以利用原版的不安全性黑掉系统。 而往往大家会觉得麻烦,如果不想用新的安全函数,这里提供两种简单的方法 阅读全文