自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 问答 (1)
  • 收藏
  • 关注

原创 用数组模拟双向链表

【代码】用数组模拟双向链表。

2024-03-05 16:49:31 164

原创 用数组模拟单向链表

【代码】用数组模拟单向链表。

2024-03-05 16:08:24 162

原创 用数组模拟单向链表

【代码】用数组模拟单向链表。

2024-03-05 16:07:48 153

原创 C++ STL容器使用

在应对算法问题时,我想到了解决问题的思路,但发现实现起来有一定的难度。在查阅了相关资料后,发现C++封装了一些很有用的数据结构。hash中的一种,第一个参数代表key的类型,第二个参数代表value的类型。lower_bound(value): 找到小于或等于给定值的第一个元素。2.set<int> st,set是一个有序数据结构,按照大小排序。end():找到最后一个地址的后一个地址(虚拟位置,表示非法访问)find(value) ,返回指向该元素的指针(迭代器)begin ():找到第一个地址。

2023-10-13 23:33:35 152

原创 并发性编程——线程API

创建线程A→线程A创建完成→进入循环,完成加法,并且创建线程B→线程B创建完成,但此刻A循环的加法尚未完成,因此二者并发执行→在某一刻,循环终止。创建线程A→线程A创建完成→进入循环,完成加法,并且创建线程B→线程B创建完成→进入B循环,完成加法。在线程A完成num++操作时,线程B同样用这个被修改后的num来执行while比较。因此,两个线程共同执行这一个累加操作,它的结果一定小于等于一个线程执行的结果。并发编程一定会涉及到数据的共享,而一旦这二者结合,就会丢失许多重要的特性。

2023-08-05 18:46:14 125

原创 kernel mode和user mode

在使用trap指令从user mode进入kernel mode以后,在OS完成一系列操作的时候,同时也会生成对应的数据(PC寄存器,reg寄存器),将会以 return-from-trap 的形式返回数据,为了正确的返回这些数据,OS在内核开辟了一个新的stack来保存这些数据。当程序发出一些“敏感指令”时,例如:发出I/O请求,申请更多的内存资源orCPU资源,如果不加以限制,哪么一个简单的程序就有可能“吃掉”所有的计算机资源来使得其崩溃。一个简单的想法是,不加任何限制的允许用户态的程序调用资源。

2023-08-02 15:25:45 321

原创 LINUX进程接口测试

我们阅读该手册不难发现,wait和waitpid的区别同样在函数参数上面,waitpid可以传入一个pid作为实参,以pid所指向的哪个子进程的结束为flag来控制父进程。waitpid系统调用将会中止调用该指令的线程,直到一个被用pid作为waitpid函数实参来确认的子进程终止为止。至于为什么exec有一个六成员的函数族,我目前不知道为什么要如此,也许在这方面的细分是为了更好的应对复杂的环境。,子进程和父进程各自拥有独立的内存空间,因此在子进程中关闭标准输出,不影响父进程。execvp和execv。

2023-08-01 10:08:39 220

原创 OS学习——并发性编程初探

父进程修改x的值后,不影响子进程的x,充分体现了OS的virtualization的特性。由于子进程和父进程拥有独立的内存空间,因此当我们分别修改各自的x的值时,他们互不影响。而fork的另一个有趣的特性时,子进程几乎是父进程的“copy”。我猜测,子进程没有关掉父进程访问file权限的能力,即子进程关掉的仅仅只是子进程的fp,而不是父进程的fp,因为他们具有各自独立的内存空间。有两条,这验证了我的猜想,即在先抢到资源的进程关掉其他进程对资源的访问权限之前,其他进程可能已经完成了访问。

2023-07-31 16:16:38 85

原创 OS学习日志————1

问题8:Now run with some randomly generated processes: -s 1 -l 3:50,3:50 or -s 2 -l 3:50,3:50 or -s 3 -l 3:50,3:50. See if you can predict how the trace will turn out. What happens when you use the flag -I IO RUN IMMEDIATE vs. -I IO RUN LATER?这里我们测试 -S指令。

2023-07-29 12:07:31 84

原创 面向对象 C++ 01

内存条被分为四个不同的区 代码区的特点 全局区的特点 对于上述的验证,有代码:运行结果为: 多次运行后,观察结果可得,在内存中存储的地址明显不一样,且相差比较大。

2022-06-27 23:09:41 230

原创 C++实现排序的几个简单实验

1.使用直接插入排序算法对序列{49,38,65,97,76,13,27,49}进行从小到大排 序,并且输出每一趟排序的结果。2. 使用冒泡排序算法对序列{49,38,65,97,49,13,27,76}进行从小到大排序, 并且输出每一趟排序的结果。3. 使用快速排序算法对序列{49,38,65,97,49,13,27,76}进行从小到大排序, 并且输出每一趟排序的结果。4、使用折半插入排序算法对数据进行排序(根据分数进行排序),输出每一趟排序的结果。typedef struct{char name[5];

2022-06-09 20:03:41 996

原创 查找————C++实现两个小实验

题目要求:建立顺序表(有序表),分别对其进行顺序查找和折半查找,顺序查找实现的思路比较简单,从前到后遍历比较关键字即可(可以引入哨兵方便一些操作),折半查找的核心就是“分为区间块”,从中间往两头出发(需要注意一下下标,这里仔细一点就行),折半查找的前提和顺序查找不同,对于顺序查找而言,只需要顺序表,在物理上(内存中)满足线性关系即可完成遍历,但是对于折半查找而言,需要的不仅仅是顺序表,而要对顺序表按照大小进行排序形成有序表,因此在实现折半查找时,要先实现顺序表的排序算法(此处实验中没有要求,可以自己键入有顺

2022-06-07 21:23:36 135

原创 C++实现二叉树的构建和基本操作

#include <iostream>using namespace std;typedef struct BiNode { int data; //本次采用整数 struct BiNode* lchild, * rchild; //左孩子 右孩子} BiNode, * BiTree;//先序遍历void Xianxu(BiTree T){ if (T) { cout << T->data; Xianxu(T->lchild); X.

2022-05-25 20:14:17 1091

原创 C++ 实现串及相关操作

#include<iostream>#include<string>using namespace std;#define Maxsize 100 //串的最大长度typedef struct { string list[Maxsize]; int listsize;}Sqlist;//显示操作菜单void showmenu(){ cout<<"位置对应:0 1 2 3 4 5 . 。 。 。(输入) "<<endl; cout&l.

2022-05-18 22:24:34 476

原创 C++实现栈和队列

using namespace std;#include<iostream>#define Maxsize 100 //顺序栈初始分配量#define OK 1#define ERROR -1;typedef struct { int* base;//本题要求整数,可以更换为其他类型 int* top; int stacksize;}Sqtack;//顺序栈的初始化int InitStack(Sqtack& S){ S.base .

2022-05-18 14:44:29 211

原创 数据结构作业001

1、创建一个长度为n的顺序表,顺序表的长度以及元素由用户输入。对该顺序表进行插入和删除,并输出插入和删除后的顺序表。例:输入线性表la的元素个数n:5请输入线性表la的n个元素:1 2 3 4 5顺序表为0 11 22 33 44 5请输入要插入的元素的位置和插入的值3 7插入后的顺序表为0 11 22 73 34 45 5请输入要删除的元素的位置2the dele data is 2删除后的顺序表为0 ...

2022-05-06 19:53:35 807

原创 C++小作业001

#include<iostream>#include<string>using namespace std;#define MAX_SIZE 1000 typedef struct { string m_Name;//姓名 string m_Sex;//性别 int m_Age;//年龄 string m_Num;//电话号码 string m_Addr;//地址}Person;typedef struct { Pers.

2022-04-17 10:30:18 905

原创 C++day01

上学期进行了C语言的学习,但在深入的了解了程序及其算法以后,我发现仅用原本的知识是不足以解决更多复杂的问题,因此现在开启C++的学习,作为对C的一个补充。——第一个C++程序,输出一串字符#include<iostream>using namespace std;int main(){ cout<< "Hello,world." << endl; system("pause"); return 0;}与C当中使用printf...

2022-03-17 18:38:55 1374

原创 C++实现一个简单的线性表链式存储

使用C++实现一个简单的链式存储线性表,可以进行一些简单的测试。

2022-03-14 22:51:22 2067

原创 11.1结构类型之枚举

————常量符号化 实验11.1.1#include<stdio.h>const int blue = 0;const int yellow = 1;const int red = 2;int main(){ int color = -1; char* colorname = NULL; printf("请输入你最喜欢的颜色代码"); scanf_s("%d", &color); switch (color) { case ...

2021-12-26 21:13:06 277

原创 10.2字符串函数(第二回)

————strcpy函数char *strcpy(char *dest, const char *src) //函数的声明,这里所传递的参数是数组。因为我们是要把src的内容复制到dest,所以在此过程中src的内容是不需要也不应该改变的,加上const修饰。该函数的返回值是指向dest的指针(可以拿它来做些小事情)实验10.2.1 验证strcpy函数运行结果使用时要注意,如果目标数组不够大,而源字符串的长度又太长,可能会造成缓冲溢出的情况(程序会崩溃),因此在使用的时.

2021-12-23 19:53:07 535

原创 10.2字符串函数(第一回)

在上一节中介绍了字符串和字符数组的辨析,那么到底怎样对字符串进行处理呢?C的标准库给了我们答案,在下面的文章中我们会介绍在C语言中常用的针对字符串的函数。————标准库 string.h在string.h这个“工具箱”里装了很多的“工具”,如果想要使用这些“工具”,我们在前面的学习中就已经知道,要在代码的开头给出 #include<string.h> 来调用。——strlen函数strlen函数的作用,认为是计算得到某个字符串函数的长度,那么和我们之前所学到的sizeof相比有什

2021-12-20 20:27:10 87

原创 10.1 字符串

————字符数组和字符串char word[]={'A','B','C'}; //这不是一个字符串,它无法用字符串的方式做计算#include<stdio.h>int main(){ char word1[] = { 'a','b','c' }; printf("char1的长度=%d\n", sizeof(word1)); char word2[] = { "abc" }; printf("char2的长度=%d\n", sizeof(w...

2021-12-18 10:42:42 110

原创 9.2指针的计算(第二回)

————用指针做什么?

2021-12-18 09:34:02 264

原创 9.2指针的计算(第一回)

————指针变量和常数的运算前提条件:指针指向一片连续分配的空间,例如数组。分析:以数组为例#include<stdio.h>int main(){ int arr[9] = { 1,2,3,4,5,6,7,8,9 }; int* p = arr; printf("p=%d\n", *p); printf("p+5=%d\n", *(p + 5)); return 0;}打印出的结果应当是: p=1 ...

2021-12-13 20:48:50 615

原创 9.1指针

————运算符 & * ,两者进行的是互逆过程。 进行: int a=1;int *p; p=&a; 则有: *p==ap叫做指针变量,在c语言中,数据是储存在内存中的,p里面储存的是变量a的地址。地址是一个特殊的值,它既包括大小,也包括指针所指变量数据的类型,也就是说在不同编译器环境下,地址不一定是一个整数。————变量的值是内存的地址普通变量的值是实际的值,而指针变量的值是具有实际值变量的地址。如果要看某个变量的地址,可以采取:printf(...

2021-12-06 20:30:22 284 1

原创 学习日记 day2

1. 变量的作用域及其生命周期 变量分为局部变量和全局变量,其作用域和生命周期也有所不同。 局部变量的作用域:就是变量所在的局部范围。 全局变量的作用域:整个工程。 其中对于整个工程的理解是,在不同的.c文件中,一个.c文件中的全局变量可以在另一个.c文件中使用(目前学到的使用方法是打印)。但是需要声明。 声明的方法:使用声明函数, extern 变量的生命周期:变量的创建和销毁之间的时间段 局部变量的生命周期:入局部范围开始而出局部范围结束...

2021-10-10 22:20:40 76

原创 学习日记 day1

主函数(main函数)是入口,一个工程中可以有多个.c文件,但是多个.c文件中只有一个主函数,主函数是有且仅有一个的。 代码编写过程:声明要使用的“工具箱”,也就是头文件, 在主函数内部编写。 数据分为变量&常量 变量分为: 全局变量 局部变量 当局部变量与全局变量重名时,服从“局部优先”原则,但是在实际操作中要避免这种情况,因为这样没有意义。 加法计算器的编写: 其中的注意点: 1、在VS编译器中,scanf函数会被认为是不安全的,可以在第一行...

2021-10-05 09:47:05 176

空空如也

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

TA关注的人

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