- 博客(15)
- 收藏
- 关注
原创 树相关知识以及二叉树的介绍
4.双亲结点或父节点:若一个结点含有子节点,则这个节点称为其子节点的父节点,如上图,A是B的父节点。5.孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点,如上图,B是A的孩子节点。12.子孙:以某节点为根的子树中任一节点都称为该节点的子孙,如上图,所有节点都是A的子孙。2.叶节点或终端节点:度为0的节点称为叶节点,如图,B,C,H,L等节点为叶节点。3.非终端节点或分支节点:度不为0的节点,如上图,D,E,F,G等节点为分支节点。9.树的高度和深度:树中节点的最大层次,如上图:树的高度是4。
2024-05-09 01:49:38
844
原创 栈与队列的相关操作
栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,列表具有先进先出FIFO(First In First Out)入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。
2024-04-26 00:10:58
190
1
原创 顺序表,单链表,双向链表的增删改查
顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储,在数组上完成数据的增删查改。优点:物理空间连续,下标随机访问。缺点:空间不够,需要扩容。扩容有一定性能的消耗,且存在一些空间浪费;头部或者中间位置插入删除效率低下。
2024-04-21 11:14:51
243
1
原创 Protobuf的使用以及介绍
这行是真正调用 protoc.exe 的命令,它将当前 .proto 文件编译为 C# 代码,然后输出到指定路径。参数–proto_path 指定了 .proto 文件的搜索路径,–csharp_out 指定了生成的 C# 代码的输出路径。这两行分别设置了两个变量,WORK_DIR 指向了 ProtoFile 文件夹的路径CS_OUT_PATH 指向了 cs 文件夹的路径。这行设置了一个变量 PROTOC_EXE,它指向了 protoc.exe 的路径,该路径位于当前目录下的 tool 文件夹中。
2024-03-16 09:36:41
1818
1
原创 HTTP请求以及文件下载
HttpListener 是 .NET Framework 提供的用于创建 HTTP 服务器以侦听传入 HTTP请求的类。用法:HttpClientHttpClient 是 .NET Framework 提供的用于发送 HTTP 请求的类。它可以用于向服务器发送 GET、POST等类型的请求,并处理服务器的响应。
2024-03-15 00:01:06
3022
1
原创 UDP以及WebSoket网络通信
UDP (User Datagram Protocol) 是一种面向无连接的传输层协议,它是网络通信中常用的一种协议,与 TCP (Transmission Control Protocol) 一样,属于 Internet 协议套件的一部分。TCP 的头部包含比 UDP 更多的控制信息,如序列号、确认号、窗口大小等,使得 TCP 的头部相对较大,增加了数据包的开销。不提供可靠的数据传输,数据发送后不进行确认或重传,如果数据包丢失或损坏,UDP 不会重新发送,也不保证数据包的顺序。那样的可靠性和流控制。
2024-03-12 21:49:17
1214
1
原创 基于Unity客户端与服务端实现登录与注册以及多人在线聊天
当服务端接收到消息调用Handle函数对消息的数据进行处理,处理完之后根据Id判断它是聊天业务类型的消息,继续处理然后将响应发送给客户端,客户端收到服务端的响应之后,将消息拷贝到新数组,对数据进行处理再用Id判断是处理聊天业务类型的消息,如果返回的消息不为null,就会触发委托绑定的函数ChatHandle,这个函数中调用AddMessage函数,这个函数中,实例化一个文本框,将用户的Id以及接收来的消息赋值到Unity面板中。点击登录的时候会将用户输入的账号密码发送给服务端。
2024-03-12 12:23:00
2371
1
原创 粘包与拆包
先将消息的包体数据求出来,根据包体大小(存储空间占4个字节),再求出消息的总长度 = 8 + 包体数据的长度(这里的值8用于考虑接收到的数据包中占用的额外空间,即协议ID(4字节)和消息大小(4字节)),再根据消息的ID对其进行处理,拆包通常发生在数据发送方发送的数据较大,而接收方缓冲区较小,不能容纳整个数据包的情况下。在数据包中包含消息长度信息,接收方首先读取消息长度,然后根据长度读取相应字节数的数据。在数据包中使用特殊的分隔符标识消息的结束,接收方根据分隔符将数据包拆分成单独的消息。
2024-03-11 12:06:21
274
原创 使用LitJSON更好地组织网络数据
点击Vs菜单栏中的工具,找到NuGet包管理器中的程序包管理控制台,在控制台里面输入Install-Package LitJson -Version 0.19.0,按回车就可以下载这个包,引用里面就有LitJson包了。
2024-03-10 16:04:04
408
1
原创 客户端和服务器的消息收发
服务器返回响应消息给客户端的时候,必须返回给原来特定的客户端,所以在服务端接受客户端的请求连接的时候,在Accept()函数中要定义一个临时的Client对象,将正在连接的客户端赋值给它,然后在服务器返回响应数据的时候能够找到给它发送消息的特定客户端。在Unity创建一个名为Client项目,在Asset目录下创建一个Script文件夹专门来存放.cs文件,创建一个Client.cs文件。
2024-03-10 15:39:02
180
1
原创 TCP有关的API详细介绍与服务端编写
TcpClient是.NET Framework中的一个类,提供了与TCP/IP主机连接和进行数据交换的简单方法。它属于System.Net.Sockets命名空间,通常在C#中用于网络应用程序。TcpListeneTcpListener 是一个.NET Framework中的类,用于在TCP/IP网络上监听传入的连接请求。TcpListener.Create()创建一个监听器,侦听指定的端口。cpListener = TcpListener.Create(端口号);
2024-03-10 14:52:54
451
1
原创 字符串逆序---递归实现和非递归实现
非递归写法:递归写法:reverse_string(“abcdef”) = 交换a和f + reverse_string(“bcdef”)字符串的逆序不是简单的讲字符串倒着输出!!!我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:撤销:Ctrl/Command + Z重做:Ctrl/Command + Y加粗:Ctrl/Command + B斜体:Ctrl/Command + I标题:Ctrl/C
2023-05-01 21:57:20
118
1
原创 2021-09-28
//acwing第18场周赛*//第一题#include<bits/stdc++.h>using namespace std;const int N=1e5+10; int flag[N],c[N]; //flag数组标记,c数组存下标 int main(){ int n,k,cnt=0;//cnt计重复出现数的个数 cin>>n>>k; for(int i=1;i<=n;i++) { int a; cin>>a...
2021-09-28 20:08:49
102
原创 Educational Codeforces Round 114
A题思路:输出n个左括号,在输出n个右括号,中间在输出n-i个"()";#include<bits/stdc++.h>using namespace std;int main(){int t;cin>>t;while(t–){for(int i=1;i<=n;i++){int l=i,r=i,k=n-i;while(l–)cout<<"(";while(r–)cout<<")";while(k–)cout<<"(
2021-09-23 19:38:21
144
原创 2021-09-16
Codeforces Global Round 16A题要使数组中的元素的中位数尽可能大,那就得使中位数之前的数组元素都为0;由题意可知,如果数组个数n为偶数,则中位数 是第n/2个数;如果数组元素个数为奇数,则中位数是第n/2+1个数;拿n=7,s=17为例,则中位数是第n/2+1个数,则加上中位数还剩4个数,s/4则为中位数的最大值#include<bits/stdc++.h>using namespace std;int main(){ int t; cin>&g
2021-09-16 20:36:57
136
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人