自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 VFS(虚拟文件系统)

Linux文件系统在使用计算机的过程中,文件是经常被提到的概念,例如可执行文件、文本文件等,这里说的文件是一个抽象的概念,它是存放一切数据化信息的仓库。用户为了保存数据或信息,首先要创建-一个文件,然后把数据或信息写人该文件。最终这些数据被保存到文件的载体上,通常情况下是磁盘上,只要给出存放文件的路径和文件名,文件系统就可以在磁盘上找到该文件的物理位置,并把它调人内存供用户使用。在这个过程...

2020-04-26 19:37:55 2955

原创 平衡二叉树(AVLTree--c++)(二)

前言在上篇博客中我们主要讲了AVL树的四种旋转方法以及如何构建AVL树,这篇博客我们主要来看一下AVL树的删除与销毁操作.正文构建AVL树的过程是一个边插入边调整的过程,而删除某个节点的操作那么也是这样的(完成节点的删除后我们需要对AVL树进行判断,如果不再平衡我们需要进行调整).这里将其分为三种情况:删除叶子节点,删除有一颗子树的节点,删除左右子树都有的节点.一个思路:左子树上节点的删...

2020-04-02 10:22:11 152

原创 平衡二叉树(AVLTree--c++)(一)

二叉查找树在正式介绍AVL树之前,我们先来了解一下二叉查找树.二叉查找树(Binary Search Tree)(又称二叉搜索树,二叉排序树),它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。那么二叉查找树的引入有什么用呢...

2020-04-02 10:20:27 233

原创 图的应用——最短路径——Dijkstra算法

最短路径最短路径是一种思想不同于最小生成树的另一种图的应用,对网图来说,最短路径就是指两个顶点之间经过的边上权值和最小的路径,我们称第一个顶点为源点,最后一个顶点为终点(非网图边上没有权值,所说的最短路径就是两个顶点之间经过的边数最少的路径)。此篇博客围绕Dijkstra算法展开,也就是从某个源点到图中其余各顶点的最短路径问题。Dijkstra算法Dijkstra算法通常被用来解决单源最短...

2019-12-11 17:33:48 575

原创 图的应用——最小生成树——Kruskal算法

最小生成树一个连通图的生成树是一个极小的连通子图,它含有图中全部顶点,但只有n - 1条边,我们把构造连通图的最小代价生成树称为最小生成树。如上左图所示,这是一个无向带权图,而右图是它的生成树之一。显然,生成树不唯一,可能有多颗。此图才是上左图的最小生成树。构造最小生成树有多种算法,经典的有两种,Prim算法和Kruskal算法,此篇博客将围绕Kruskal算法展开。Kruskal算...

2019-12-04 11:27:59 573

原创 图的遍历——邻接表实现

此篇博客主要就图的储存结构——邻接表展开。邻接表图的一种最便于理解的储存结构就是邻接矩阵了(可以简单的把它视为一个二维数组),但是邻接矩阵在处理边数较少,但顶点较多的情况时会浪费不少的储存空间。因此便有了邻接表这种储存结构。图中顶点用一个一维数组存储, 当然,顶点也可以用单链表来存储,不过数组可以较容易地读取顶点信息,更加方便。另外,对于顶点数组中,每个数据元素还需要存储指向第一个邻接点的...

2019-12-03 21:01:51 3290

原创 三次握手与四次挥手

三次握手在握手正式开始之前,服务器必须准备好接收外来的连接。这通常通过调用socket, bind, listen这3个函数来完成,称之为被动打开。第一次握手:客户通过调用connect发起主动打开。这导致客户TCP发送一个 SYN(同步)分节,它告诉服务器客户将在(待建立的)连接中发送的数据的初始序列号(ISN)。此时客户处于SYN_SENT状态。第二次握手:服务器必须确认(ACK)客户...

2019-11-26 11:21:30 132

原创 c++—map

关联容器关联容器支持高效的关键字查找和访问,两个主要的关联容器类型就是map和set,此篇博客主要围绕map展开。标准库提供8个关联容器,这些容器间的不同体现在三个维度中:(1)或者是一个map,或者是一个set(2)或者要求不重复的关键字,或者允许重复关键字(3)按顺序保存元素,或无序保存允许重复关键字的容器的名字中都包含单词multi;不保持关键字按顺序存储的容器的名字都以unor...

2019-11-25 11:56:39 127

原创 系统调用的概念及原理

系统调用与内核函数内核函数与普通函数形式上没有什么区别,只不过前者在内核实现,因此要满足一些内核编程的要求。系统调用是用户进程进入内核的接口层,它本身并非内核函数,但它是由内核函数实现的,进入内核后,不同的系统调用会找到相应的内核函数,这些内核函数被称为系统调用的“服务例程”。比如系统调用getpid()实际调用的是服务例程sys_getpid(),也可以说,系统调用getpid()是服务例...

2019-11-01 20:34:22 15960 9

原创 初识Linux内核

引言在计算机中不管是CPU,内存,或者是一些外围设备,它们之所以能有条不紊的协同工作,是因为有一层软件不遗余力的管理着它们。这层软件就是操作系统。操作系统在整个计算机系统中的位置从这张图中可以看出用户界面是操作系统的外在表象,内核才是操作系统的内在核心,它真正完成用户程序所要求的操作。那么就可以说一方面操作系统是上层软件与硬件打交道的窗口和桥梁,另一方面操作系统是其他所有用户程序运行的基础...

2019-10-27 16:07:26 322

原创 马踏棋盘(从低效到高效)

题目描述将棋子“马”随机的放在国际象棋棋盘Board[8][8]的某个方格中,“马”按走棋规则进行移动,要求每个方格只进入一次,走遍棋盘上所有的64个方格。题目要求编写非递归程序,求出“马”的行走路线,并按求出的行走路线将数字1-64依次填入一个8x8的方阵并输出。分析 x 1一看题目说是8x8棋盘,要求走遍棋盘,首先想到的便是直接深搜即可,但是后面说到要求非递归程序,这也简单,自己把递...

2019-10-14 21:39:15 1421 2

原创 哈夫曼编码的理解以及简单实现

哈夫曼树在介绍哈夫曼编码前,我们先来了解一下哈夫曼树。美国科学家哈夫曼在1952年发现了哈夫曼编码,为了纪念他的成就,于是把他在编码中用到的特殊二叉树称之为哈夫曼树,这种编码方法称之为哈夫曼编码。那在介绍哈夫曼树之前在补充一些基础知识结点的路径长度:从根结点到该结点的路径上分支的数目。树的路径长度:树中每个结点的路径长度之和。结点的带权路径长度:该结点到根结点之间的路径长度与结点上权的...

2019-10-12 19:06:14 2606 3

原创 大一暑假留校总结

距离暑假留校结束已有一周时间了,而马上也就要开学了,在这里对自己在暑假中的学习情况做一个总结。在留校开始之前自己以为留校可能会很累很枯燥,因为每天要坐着大概十个小时,所以开始前还是有些害怕的…,但是留校开始后,我的精神居然比我上课期间好的多(上课基本都是迷迷糊糊的…,连我自己都有些奇怪),但是这是好事,我可以更加投入的去学习。暑假学习是分小组进行的,我们组总共六个人,有两名学长,一名学姐。留校...

2019-08-29 23:15:02 381

原创 linux网络编程——聊天室总结

说在前面暑假留校的主要任务是学习linux下的c语言编程,之前写了my_ls, my_shell这两个可以说是练手的小项目,而最后的项目聊天室也是花了自己快两周的时间,说实话第一次写这种(对自己而言)大项目,最深刻的体会就是整体的架构很重要,很重要,很重要…项目概述Linux 环境下的简易聊天室,采用C/S模型,实现多客户端之间的稳定数据传输。功能登陆注册账号,登陆时密码不会显好友管...

2019-08-19 21:54:12 4009 7

原创 线程实例(生产者消费者+哲学家问题+简易线程池)

生产者消费者生产者消费者模型的描述: 两个进程共享一个缓冲区,一个进程称为生产者向缓冲区中放数据,另一个称为消费者从缓冲取中取数据,当缓冲区中被放时,生产者进程就必须可进入挂起状态,直到消费者从缓冲中取走数据时,生产者才能继续向缓冲区中存放数据,同样当缓冲取中没有数据时,消费者进程就必须进入挂起休眠状态,直到生产者向缓冲区中放入数据时,消费者才能被唤醒继续从缓冲区中取走数据。基于互斥所和条件变...

2019-08-12 01:03:20 264

原创 进程小总结

今天晚上准备总结一下进程和线程,第一篇先总结一下进程的点。一. 那么首先,什么是进程呢?1.进程是程序的一次执行(也就是执行中的程序)。2.进程是一个程序及其数据在处理机上顺序执行时所发生的活动。3.进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。4.将进程当作一组元素的实体。进程的两个基本元素是程序代码和与之相关的数据集。二. 说进程是程序的一次执行,...

2019-08-11 23:51:39 125

原创 简单搜索(dfs/bfs)

走迷宫学习 dfs/bfs 应该都是从走迷宫开始的吧,今天讲一下 dfs/bfs 最简单的应用——走迷宫。dfs(深度优先搜索)dfs 一般都是通过递归来完成(非递归也可以,但是有些麻烦),由于是递归,所以理解 dfs 的关键就在于解决“当下如何做”,而“下一步如何做”则与“当下如何做”是一样的。下面给出 dfs 的基本模型:void dfs(int step){ 判断边界条件 尝...

2019-08-02 11:51:50 271

原创 二叉树基础操作总结

昨天的数据结构讲座,学长讲了二叉树这方面的知识,今天又复习了一下,赶紧记下来。二叉树的定义二叉树是n个结点的集合,可以为空,也可以由一个根结点和两棵互不相交的左,右子树组成。二叉树的特点1. 每个结点最多有两颗子树(是最多有)。2. 左右子树有顺序,不能随意颠倒(哪怕其中那个结点只有一颗子树,也要区分是左子树还是右子树)。现在让我们正式开始讲一下各种操作先来看一张整体的效果图ty...

2019-07-30 20:53:15 449

原创 约瑟夫(Josephus)问题

古代某法官要判决n个犯人死刑,他有一条荒唐的逻辑,将犯人首尾相接排成圆圈,然后从第s个人开始数起,每数到第m个犯人,就拉出来处决;然后又数m个,数到的犯人又拉出来处决,以此类推。剩下的最后一人可以赦免。编写程序,给出处决顺序,并给出哪一个人可以活下来。注:大体的思路以及需要注意的点都在注释中了,直接上代码了。//定义结点typedef struct _josephus{ int ...

2019-07-26 22:13:42 447

原创 实现myshell前的准备工作(缕一缕思路)

这篇博客主要讲一下实现myshell前的准备工作我们先从基础需求开始1. 1,2 ,3 要求支持重定向,管道命令以及后台运行,那么首先需要考虑的就是解析参数,输入输出重定向(<,>,>>),管道(|),后台运行(&)与一般命令需要区别开来。注:>与>> 的区别就是打开文件时的方式不同fd = open(file,O_RDWR|O_CREA...

2019-07-25 09:57:25 304

原创 实现自己的ls

相信在linux上最常用的命令之一应该就是ls了,因为我们可能随时都要知道文件或者目录的相关信息,而小组暑假留校的第一个小项目就是完成自己的ls,最终自己实现的ls具有-a,-l,-R,-r,-d以及染色输出不同权限的文件或是目录.自己觉得需要注意的1.在动手实现项目前自己要有一个大体的架构(我开始是依照书上的架构进行的,但越往后写自己会添加更多的功能,而且每个人的编程风格可能会存在一些差异,...

2019-07-23 17:32:47 230

原创 道一道c语言(PS:西邮Linux小组历年纳新题)

说在前面用了2-3周时间做了小组往年的纳新题之后,经过了同级小伙伴的共同讲解以及学长的拓展补充,感觉对c有了更深的认识,所以在这记录一下(恩…同时也是应小组任务)。开始先让我们来探索一下一个c程序如何从源代码到形成可执行文件...

2019-05-14 22:27:22 370

原创 浅谈网络基础

linux网络基础配置—前奏自己在学习linux网络基础配置的时候去了解了下网络基础,学习的比较浅显,但感觉还是比较有用的,所以在介绍linux网络基础配置之前先介绍一点简单的网络基础IP地址IP是英文Internet Protocol的缩写,意思是“网络之间互连的协议”,也就是为计算机网络相互连接进行通信而设计的协议。常见的IP编址分为两大类:IPv4和IPv6。IPv4地址为32位长...

2019-04-14 14:42:12 406

原创 c语言—指针交换两个数

指针交换两个数突然看到自己以前研究关于指针交换两个数的代码,当时自己还通过不断的printf来观察地址的变化,理解了之后发现不论几级指针,其核心是不变的。一级指针交换void swap(int *p, int *q){ int t; t = *p; *p = *q; *q = t;}void main(){ int a = 1,b = 2; ...

2019-03-27 20:24:26 4116

原创 c语言—链表总结

一.单链表自己总结了一下单向链表逆序,排序,查找倒数第n个结点的知识struct student{ char name[20]; int number; struct student *next;};排序—交换分为两步,先交换结点,后交换指针struct student *linksort(struct student *pHead){ struct...

2019-03-24 21:03:01 295

原创 c语言—学籍管理系统

c语言课程设计—学籍管理系统学校的课程设计,自己完成后整理了一下。自己用链表实现的一个较简单的学籍管理系统,都是通过一些链表以及文件的基本操作完成。功能实现1-录入学生信息。2-查询学生信息。3-修改学生信息 。4-删除学生信息。5-显示学生信息。6-统计信息报表。7-读盘,存盘。注:一些getchar()以及换行符是我为了让界面美观自己加的。#include&amp;amp;amp;lt;std...

2019-03-08 15:35:04 5218 2

空空如也

空空如也

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

TA关注的人

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