自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 收藏
  • 关注

原创 数据结构-排序

减少的逆序 = 比A小的元素个数 + 比B大的元素个数 - 比A大的元素个数 - 比B小的元素的元素个数 + AB本身是否是一对逆序所导致的变化。在快速排序中,由于进行分块,比选定元素小的会被进行按顺序插入新的序列之中,不会进行两两元素分别比较,因此一般不会,但是局部也会出现这种情况。当一个比较大的元素位于更大的元素右侧,且二者在偏离自己位置的时候;交换对于B之后的元素没有影响,对于A之前的元素没有影响,仅仅对于介于AB之间的元素来说,,在这轮起泡中,8被向左移动了,相对于其位置[2],是相反的。

2024-01-03 18:59:52 748 1

原创 ics-Y86-64Simulator

跟据CSAPP中对Y86-64指令集的描述和讲解,以任意技术栈自行实现一个CPU模拟器。下载链接:PJ-handout.tar项目完成人数1~2人。其中单人完成的同学可以适当降低一些工作量的要求。多人组队的同学需要把参与项目的每个人的工作量和贡献度都写在报告中。支持CSAPP中Y86-64的基本指令程序输入输出满足基本格式,输出与标准答案一致需要提交项目报告和项目文件对技术栈不做限制,可以自由选择编程语言(python,c++,SystemVerilog等)

2024-01-03 18:42:38 824 1

原创 ics-cachelab

CSAPP第6章配套实验。本实验的目的是加深同学们对高速缓存cache认识。本次实验参考CMU CSAPP课程的。考虑到pj将至,助教将本次lab的难度相较于原版调低了一些(除了honor-part,但honor-part的分数很少),而且本次实验全程用c语言(可以不用和抽象的汇编打交道了)

2024-01-03 18:36:49 901 1

原创 ics-简单的携程实现

本次实验对应 CSAPP 第三章、第四章的内容。在本次实验中,我们将逐步迭代开发一个简易的协程库,从使用系统调用实现协程,到使用汇编实现协程,从有栈协程到C++ 20引入的无栈协程。这里并不是说无栈协程会比有栈协程更好,而是为了让大家了解协程的实现原理,以及不同实现方式的优缺点。两种实现方式没有优劣之分。本次实验开发语言为C++,由于在部分代码中使用到了C++ 20的新特性,因此要求g++版本大于等于11。Ubuntu 20.04 LTS自带的g++版本为9.3.0,因此需要手动升级g++版本。

2024-01-03 18:25:48 814 1

原创 ics-boomlab

你可能会好奇,我们为什么要学习逆向工程、学习汇编:作为科班CS学生,你需要知道自己写出来的程序到底会变成什么样子,到底如何运行,这样你才能知道如何写出更好的程序——正是这些底层的细节将科班程序员和培训班程序员区分开来。除了这些看起来很恶意的应用场景以外,逆向工程一个非常重要的作用就是帮助白帽黑客们找到程序的漏洞,发掘程序的安全问题。在学习C或C++的文件操作的时候,会发现一个很巧的事情——文件读写用到的API,和标准输入输出用的那些API其实都差不多,这是因为文件和标准输入输出本来就是一样的。

2024-01-03 18:08:57 976 1

原创 图、最小生成树、最短路径、AOV、AOE-数据结构

/ 对象:由一个顶点的非空集合和一个边集合构成,每条边由一个顶点对来表示public:Graph();// 建立一个空的图// 在图中插入一个顶点vertex,该顶点暂时没有边// 若构成边的两个顶点v1和v2是图中的顶点,则在图中插入一条边(v1,v2)// 若被删顶点是图中的顶点,则删除顶点v和所有关联到它的边// 若构成边的两个顶点v1和v2是图中的顶点,则在图中删除边(v1,v2)// 若图中没有边,则函数返回true,否则返回false。

2023-12-14 14:05:29 871 1

原创 数据结构-二叉搜索树、AVL树

K key;// 关键码E data;// 数据域// 左子女和右子女BSTNode() : left(NULL), right(NULL) {} // 构造函数BSTNode(K x, E d) : key(x), data(d), left(NULL), right(NULL) {} // 构造函数~BSTNode() {} // 析构函数public:BST() : root(NULL) {} // 构造函数~BST() {} // 析构函数// 搜索x// 赋值// 创建。

2023-11-30 23:56:07 1035

原创 数据结构-集合与散列表

这样,当我们要查找学号为 123456 的学生时,我们只需通过散列函数计算出散列值 456,然后直接访问散列表的索引 456 处,即可快速找到该学生的信息,而不需要遍历整个数据库。即使学号相对较小并适应散列表的大小,由于学号的分布不均匀或者散列函数的设计,可能会导致多个学生具有相同的散列值,即发生了冲突。总体来说,使用散列函数的目的是将关键字映射到散列表的索引,并希望这个映射是均匀的,减少冲突的可能性。如果散列表的大小是有限的,而学号可能会非常大,直接使用学号作为索引可能会导致索引超出散列表的范围。

2023-11-28 19:02:23 846

原创 ics-datalab

【代码】ics-datalab。

2023-11-28 16:55:38 377

原创 数据结构-数组、串与广义表

是一种扩展了线性表的数据结构,它允许元素可以是原子元素(单个数据项)或者子表(广义表本身)。广义表是一种递归定义的数据结构,其中每个元素可以是原子元素或者另一个广义表。空表(Empty List):空表是广义表中不包含任何元素的情况,用()表示。原子元素(Atom):原子元素是广义表中的基本单元,可以是任何数据类型的元素,如整数、字符、字符串等。广义表(GList):广义表是由若干元素组成的有限序列,每个元素可以是原子元素或者是另一个广义表。L = () // 空表| Atom // 原子元素。

2023-11-28 16:37:03 335

原创 数据结构-链表

/ 假设顺序表的最大容量是100private:// 用于存储元素的数组int size;// 当前顺序表中的元素个数public:// 构造函数// 获取顺序表的当前大小// 检查顺序表是否为空// 在顺序表末尾添加元素size++;} else {throw std::overflow_error("顺序表已满,无法添加元素");// 获取指定位置的元素} else {throw std::out_of_range("索引越界");// 在指定位置插入元素。

2023-11-28 16:26:56 377

原创 数据结构-栈与队列

若一个对象部分地包含它自己,或用它自己给自己定义,则称这个对象是递归的;若一个过程直接地或间接地调用自己,则称这个过程是递归的过程。return;return 0;递归过程改为非递归过程。

2023-11-28 16:23:02 908

原创 数据结构-树

森林是一种图的特殊类型,它由若干棵不相交的树(无环的连通图)组成。每一棵树称为森林的一颗树。在森林中,树与树之间没有边相连,即森林是由多棵树组成的非连通图。树的父指针表示方式它以一组连续的存储单元来存放树中的结点,每个结点有两个域:一个是data域,用来存放数据元素;另一个是parent域,用来存放指示其父结点位置的指针。树中结点的存放顺序一般不做特殊要求,但为了操作实现的方便,有时也会规定结点的存放顺序。例如,可以规定按树的前序次序存放树中的各个结点,或规定按树的层次次序安排所有结点。

2023-11-28 16:19:37 991

简单的携程实现,coroutinelab

简单携程实现 coroutinelab

2024-01-03

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除