
计组+网络+数据结构+操作系统
文章平均质量分 84
仰望星空的尘埃
https://github.com/a422478514
我未曾见过一个早起、勤奋、谨慎、诚实的人抱怨命运不好;良好的品格,优良的习惯,坚强的意志,是不会被假设所谓的命运击败的。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
TCP的异常终止与RST报文
TCP的异常终止是相对于正常终止而言的。在正常情况下,TCP的正常终止都要发送FIN报文,在发送缓冲区中的数据全部发送完经历四次挥手的过程。但在有些情况下,TCP双方在交互的时候可能出现一些意想不到的情况,导致TCP进行不能按正常的四次挥手来释放连接。如果此时不采取其他措施释放这个TCP连接的话,这个TCP连接就会一直存在,并且占用着系统的资源。于是我们就希望能够在有意向不到的情况发生的时候还可以释放我们的连接,TCP有专门针对这种情况的机制,就是RST报文机制。发送RST报文的几种情况(几种异常终转载 2021-07-09 14:45:46 · 1387 阅读 · 0 评论 -
关于LSM树
前言推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种排序等等几十篇的样子。关于LSM树LSM树,即日志结构合并树(Log-Structured Merge-Tree)。其实它并不属于一个具体的数据结构,它更多是一种数据结构的设计思想。大多NoSQL数据库核心思想都是基于LSM来做的,只是具体的实现不同。所以本来不打算列入该系列,但是有朋友留言了好几次让我讲LSM树,那么就说一下L转载 2020-07-09 09:37:30 · 509 阅读 · 0 评论 -
LSM树原理探究
前言B+树随着mysql Innodb引擎的广泛推广越来越被大家所熟知,而前不久我在研究Raft算法时,偶然发现了一种和B+树类似的数据结构——LSM树(Log-Structured-Merge-Tree 日志结构合并树),它是Google发表的论文Big Table中提到的一种很有趣的文件组织数据结构, 现如今已经被运用在很多工业界的产品之中了:HBase、Cassandra、Level...转载 2020-03-19 11:06:36 · 700 阅读 · 0 评论 -
计算某一天是星期几(C语言,可运行)
请编写C语言函数get_weekday,该函数用于计算某一天是星期几。函数接受三个整形参数,分别表示年、月、日,并返回一个整数标识星期几,用0,1-6分别表示星期日、星期一到星期6.#include<stdio.h>int get_weekday(int year,int month,int day){ int RUN_YEAR = 366; int NON_R...原创 2019-12-12 18:09:18 · 9749 阅读 · 5 评论 -
确定字符串中首次出现的某个字符在串中的位置并删除(c语言 可运行)
请编写一程序,该程序的功能是确定字符串中首次出现的某个字符在串中的位置(即该字符是字符串中的第几个字符),然后从字符串中删除该字符。要求:(1) 将确定字符位置以及删除该字符的过程编写为一个独立的函数。(注:函数中不考虑非首次出现的该字符的删除)(2)在主函数中通过键盘输入字符串和被确定的字符。若字符串中没有被确定的字符,程序给出相应信息,否则,输出该字符在字符串中首次出现的位置,并且显...原创 2019-09-02 15:38:49 · 1885 阅读 · 0 评论 -
层次遍历+打印祖先结点(c语言,不可运行)
#include <stdio.h>#include <stdlib.h>typedef struct node{ int data; struct node *lchild,*rchild;}Node,*BTree;typedef struct qnode{ BTree data; struct qnode *next;}...原创 2019-09-02 19:32:41 · 355 阅读 · 0 评论 -
忽略字符大小写,比较字符串(c语言,可运行)
题目:忽略字符大小写,比较字符串,相等返回0,s1大于s2返回正,s1小于s2返回负算法:#include <stdio.h>int strcmp_nc(char *s1,char *s2){ int i = 0; int j = 0; while( *(s1+i) && *(s2+j) && (*(s1+i) ...原创 2019-09-02 19:56:22 · 1760 阅读 · 0 评论 -
读文件并算出平均数&找出排名前3的成绩(c语言 可运行)
#include <stdio.h>int main(int argc, char const *argv[]){ float sutndetScore[100]={0.0},avg = 0.0; char sutndetName[100][100]={""}; int first = 0,second = 0, third = 0; int k...原创 2019-09-02 20:31:02 · 1128 阅读 · 0 评论 -
后序遍历+栈能记录路径
首先需要理解的是,前中后序遍历都是通过递归的方式,将后来需要用到的结点保存在栈中,比如下面这颗树:如果是前序遍历,根左右,过程是:根节点m入栈并输出,访问m的左孩子a,a入栈并输出,访问a的左孩子c,c入栈并输出,c没有左孩子,无元素入栈,c没有右孩子,无元素入栈,c出栈,此时栈顶元素为a,访问a元素的右孩子d,d入栈并输出,d没有左孩子,无元素入栈,d没有右孩子,无元素入栈,d出栈,a左...原创 2019-09-03 11:06:27 · 3124 阅读 · 2 评论 -
找出数组中具有最大 ASCII 码值的字符(c语言,可运行)
请编写一程序,该程序的功能是首先将用户通过键盘输入的若干字符(用 EOF 结束输入)存入一维数组 s 中,然后找出数组中具有最大 ASCII 码值的字符,并且输出该字符以及该字符对应的 ASCII 码。要求:程序中有关输入、输出以及查找等操作必须通过指针完成#include <stdio.h>int main(int argc, char const *argv[])...原创 2019-09-02 15:19:16 · 4342 阅读 · 0 评论 -
链表的选择排序(c语言可运行)
题目:选择排序法的基本原理是:每一趟排序从当前未排好序的那些元素中选择一个值最小的元素,将其与未排好序的那些元素的第一个元素交换位置。请根据该原理写出对一个带有头结点的单链表按数据域值从小到大进行选择排序的算法。每一个链结点的数据域中存放一个数据,但头结点数据域中不存放任何信息。要求:(1)算法中不得增加和使用新的链结点空间(2)不得改变链结点的数据域中原有的内容算法代码:...原创 2019-09-02 14:39:09 · 1523 阅读 · 1 评论 -
二、极大联通子图、极小联通子图
基于很多初学者被数据结构图中很多概念晕头转向,这里小编手写了一份三个概念的大致情况,希望对大家有所帮助O(∩_∩)O原创 2018-11-27 18:19:48 · 2217 阅读 · 3 评论 -
一、常见的树
平衡二叉查找树平衡二叉搜索树:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。常用算法有红黑树、AVL、Treap、伸展树等。在平衡二叉搜索树中,我们可以看到,其高度一般都良好地维持在O(log2n),大大降低了操作的时间复杂度。调整平衡的基本思想: 当在二叉排序树中插入一个节点时,首先检查是否因插入而破坏了平衡,若破坏,则找出其中的最小不平衡...原创 2018-03-25 18:24:09 · 545 阅读 · 0 评论 -
后缀(逆波兰)表达式
后缀(逆波兰)表达式的运算1、后缀(逆波兰)表达式是相对中缀表达式来定义的。2、中缀表达式就是常见的数学算式如: 9+(3-1)x3+10/2 结果等于20,是被人为接受的先括弧再乘除后加减,但是计算机觉得这他妈是人干的事?3、上述运算用后缀表达式表示 9 3 1 - 3 * + 10 2 / + 不含括号,计算机觉得这好办运算后也等于20,我看了这玩意只想说句MMP4、后...原创 2019-08-26 19:16:55 · 564 阅读 · 0 评论 -
对100G的外部(硬盘)数据进行排序
问题:机器内存100M,想对100G的外部(硬盘)数据进行排序思路:几乎所有人看到这个问题第一反应都是分割,先这样,然后那样,再那样,最后那样,懵懵懂懂的说不清楚。我提供两种方法:一、先拆分再归并100G数据分成20M一份(本来想分成30的,可惜数学不好),这样得到5000个分片(假装算对了)5000个分片分别叫s0-1 s0-2 s0-3 s0-4 ...........原创 2019-08-27 20:55:28 · 1732 阅读 · 0 评论 -
KMP算法理解
废话不多说,步入正题(貌似废话已经不少了):对于从主串找到子串的位置(也被称作模式匹配,当然不一定就是子串,这里就这么称呼吧):master_str = a b a b c d e a bsub_str = a b c d方法一(也叫朴素的模式匹配算法)这里也简单提下吧,开始时令i=0 j=0分别作为master_str和sub_str的起始搜索位置,逐个对比i++==sub...原创 2019-08-27 20:55:57 · 332 阅读 · 0 评论 -
关键路径算法
关键路径算法算法:一、先顺着找,求每个顶点的最早发生时间ve(j)=Max{ve(i) + dut(<i,j>)}1、v1到它的后继结点分别为:v1->v2 = 6v1->v3 = 4v1->v4 = 5则有表:{v1:0,v2:6,v3:4,v4:5}2、然后看v5v2->v5=v1->v2->v5=7v...原创 2019-08-27 20:58:50 · 5485 阅读 · 0 评论 -
弗洛伊德算法
弗洛伊德算法的核心本质还是动态规划:既然是动态规划肯定有一个逐步递进的过程,这里引入两个数组记录递进的过程,分别为D[3][3]用来记录引入某些顶点作为中转结点后的最短路径的路径长度P[3][3]用来记录记录引入某些顶点作为中转结点后的最短路径(经过的顶点)图中是分别记录引入(v0) (v0,v1) (v0,v1,v2)点后的最短距离,每次计算都是基于上一次的计算结果进行计...原创 2019-08-28 09:27:29 · 1643 阅读 · 0 评论 -
找出子串在主串中出现的次数(c语言-可运行)
#include <stdio.h>//找出子串在主串中出现的次数int STRCOUNT(char *str,char *substr){ if(str == NULL){ printf("主串不能为null\n"); return 0; } if(substr == NULL){ printf("子串不能为...原创 2019-08-30 18:19:15 · 2541 阅读 · 0 评论 -
三、关于mmap系统调用
对于mmap,您是否能从原理上解析以下三个问题:mmap比物理内存+swap空间大情况下,是否有问题? MAP_SHARED,MAP_PRIVATE,MAP_ANONYMOUS,MAP_NORESERVE到底有什么区别? 常听说mmap的读写比传统的系统调用(read, write)快,但真的是这样子吗?原因是什么?要解决这些疑问,可能还需要在操作系统层面多了解。本文将尝试通过这些问题深...原创 2018-12-06 18:47:58 · 1153 阅读 · 0 评论