自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C#DataGridView修改行号排序

private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e) { if (e.ColumnIndex == 0) { DataTable temp = dt.Copy(); int index = e.RowIndex; //修改索引 ..

2020-11-03 09:21:34 539

原创 C#partial部分类

一个类可以由多个部分类构成语法访问修饰符 修饰符 partial class 类名{...}partial即为定义部分类的关键字。部分类主要用于类中内容较多时将类中内容拆分到不同的类中,并且部分类的名称必须相同。代码public partial class Course { public int Id { get; set; } public ...

2020-03-06 13:52:57 544

原创 C#Lambda表达式

语法形式访问修饰符 修饰符 返回值类型 方法名(参数列表) => 表达式;如果在方法定义中定义了返回值类型,在表达式中不必使用return关键字。代码 class LambdaClass { public static int Add(int a, int b) => a + b; public static void Add2...

2020-03-06 10:40:07 218

原创 C#引用参数和输出参数

在C#中,方法中的参数除了定义数据类型外,还可以定义引用参数和输出参数。引用参数使用ref关键字定义,输出参数使用out关键字定义。引用参数引用参数在方法中使用时必须为其赋值,并且必须是由变量赋予的值,不能是常量或表达式。如果需要将方法中的每一个参数都设置为ref类型参数,则需要在每一个参数前面加上ref关键字修饰。代码 class RefClass { p...

2020-03-06 10:17:20 2195

原创 C# get和set访问器

属性经常与字段连用,并提供了get访问器和set访问器,分别用于获取或设置字段的值。语法public 数据类型 属性名{ get { 获取属性的语句块; return 值; } set { 设置属性得到语句块; }}get{}get访问器,用于获取属性的值,需要在get语句最后使用return关键字返回一个与属性数据类型相兼容的值。若在属性定义中省略了该...

2020-03-06 09:18:25 628

原创 C#方法

语法定义方法的语法访问修饰符 修饰符 返回值类型 方法名(参数列表){ 语句块;}访问修饰符所有类成员访问修饰符都可以使用,如果省略访问修饰符,默认是private。修饰符在定义方法时修饰符包括 virtual (虚拟的) 、abstract(抽象的) 、override(重写的) 、static(静态的) 、 sealed(密封的)。返回值类型用于在调用方法后得到返回结...

2020-03-05 15:46:07 157

原创 C#类

语法形式类的访问修饰符 修饰符 类名{ 类的成员}类的访问修饰符:用于设定对类的访问限制,包括public、internal或者不写,用internal或者不写表示只能在当前项目中访问该类;public则表示可以在任何项目中访问该类。修饰符:修饰符是对类本身特点的描述,包括abstract、sealed和static。abstract是抽象的意思,使用它修饰符的类不能被实例化;se...

2020-03-05 15:23:10 250

原创 C#运算符

算术运算符运算符说明+对两个操作数做加法运算-对两个操作数做减法运算*对两个操作数做乘法运算/对两个操作数做除法运算%对两个操作数做取余运算tips:当有字符串类型的值参与 + 运算符,代表的是连接,例如"123" + 456的结果为"123456"。当使用 / 运算符时也要注意操作数的数据类型,如果两个操作数的数据类型都为整数...

2020-03-05 10:40:30 152

原创 C#数据类型

数据类型C#语言的数据类型分为值类型和引用类型。值类型 包括 整型、浮点型、字符型、布尔型、枚举型 等;引用类型 包括 类、接口、数组、委托、字符串 等。从内存存储空间的角度而言,值类型的值存放到栈中,每次存取值都会在该内存中操作;引用类型首先会在栈中创建一个引用变量,然后在堆中创建对象本身,再把这个对象所在内存的首地址赋给引用变量。...

2020-03-04 15:31:23 289

原创 并发服务器--I/O复用之select

之前简单介绍了多进程实现并发服务器的方法,多进程方法弊端不言而喻,用户的增多对于服务器资源有巨大压力。下面介绍并发服务器的另一种实现方法(只介绍基本思路)I/O复用select函数select函数使用方法步骤1. 设置文件描述符          指定监视范围          设置超时步骤2. 调用select函数步骤3. 查看调用结果设置文件描述符利用select函数可以同时监视多个文件描述符...

2018-03-02 15:35:23 820

原创 并发服务器--多进程实现

通过简单的socket可以实现一对一的c/s通信,当多个客户端同时进行服务器访问,那么服务器只能按序的一一进行处理,除了第一个客户端,其余客户端都会陷入等待。并且这样的程序只能实现半双工通信(数据能双向传输,但同一时刻只能单向传递,通过切换传输方向实现双工),而且实现方式繁琐,功能拘束,实用价值很低。那么要想实现一个服务器能同时接受多个客户端访问并且能够双工通信的并发服务器,其中一种实现方式---...

2018-03-01 21:58:17 2076

转载 socket--shutdown()函数

调用 close()/closesocket() 函数意味着完全断开连接,即不能发送数据也不能接收数据,这种“生硬”的方式有时候会显得不太“优雅”。图1:close()/closesocket() 断开连接上图演示了两台正在进行双向通信的主机。主机A发送完数据后,单方面调用 close()/closesocket() 断开连接,之后主机A、B都不能再接受对方传输的数据。实际上,

2017-09-15 14:09:38 9858 1

转载 TCP四次握手断开连接

建立连接非常重要,它是数据正确传输的前提;断开连接同样重要,它让计算机释放不再使用的资源。如果连接不能正常断开,不仅会造成数据传输错误,还会导致套接字不能关闭,持续占用资源,如果并发量高,服务器压力堪忧。建立连接需要三次握手,断开连接需要四次握手,可以形象的比喻为下面的对话:[Shake 1] 套接字A:“任务处理完毕,我希望断开连接。”[Shake 2] 套接字B:“哦,是吗?请

2017-09-15 09:47:09 367

转载 TCP数据传输过程

建立连接后,两台主机就可以相互传输数据了。如下图所示:图1:TCP 套接字的数据交换过程上图给出了主机A分2次(分2个数据包)向主机B传递200字节的过程。首先,主机A通过1个数据包发送100个字节的数据,数据包的 Seq 号设置为 1200。主机B为了确认这一点,向主机A发送 ACK 包,并将 Ack 号设置为 1301。为了保证数据准确到达,目标机器在收到数据包(包

2017-09-15 09:15:00 6949 2

转载 TCP连接三次握手

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的通信协议,数据在传输前要建立连接,传输完毕后还要断开连接。客户端在收发数据前要使用 connect() 函数和服务器建立连接。建立连接的目的是保证IP地址、端口、物理链路等正确无误,为数据的传输开辟通道。TCP建立连接时要传输三个数据包,俗称三次握手(Three-

2017-09-15 08:42:24 688 2

转载 TCP套接字--阻塞模式和粘包问题

阻塞模式对于TCP套接字(默认情况下),当使用 write()/send() 发送数据时:1) 首先会检查缓冲区,如果缓冲区的可用空间长度小于要发送的数据,那么 write()/send() 会被阻塞(暂停执行),直到缓冲区中的数据被发送到目标机器,腾出足够的空间,才唤醒 write()/send() 函数继续写入数据。2) 如果TCP协议正在向网络发送数据,那么输出缓冲区会被锁定

2017-09-14 20:20:39 1426

原创 Linux下Socket简单通信

socket是计算机之间通信的一种约定和方式,通过这种方式和约定,计算机可以与相同约定的计算机进行数据传输。c/s模式 服务端socket 1.创建套接字:int socket(int af,int type,int protocol);1)参数af: IP地址类型 AF_INET (ipv4),AF_INET6 (ipv6); 2)参数type: 数据传输方式 SOCK_STREA

2017-09-14 10:51:16 270

原创 C++继承方式

类成员访问属性 ①private:声明为 private 的类成员只能由类的成员函数和友元(类或函数)使用。②protected:声明为 protected 的类成员可由类的成员函数和友元(类或函数)使用。 此外,它们还可由派生自该类的类使用。③public:声明为 public 的类成员可由任意函数使用。继承方式有三种:public继承,protected继承,private继承 1.publ

2017-09-01 08:50:18 237

原创 链式队列

以单链表的存储方式构建队列,动态分配内存空间,不用考虑上溢。typedef struct node{ ElemType data; node * next;} ListNode;typedef struct{ ListNode * front; ListNode * rear;}LiQueue; 四要素: 空队列:rear = NULL 满队列:不考虑

2017-08-24 09:01:00 368

原创 环形队列

为解决顺序队列存在的严重问题,伟大的先驱们又发明了一种可以循环使用的队列以解决内存空间浪费的问题–环形队列。环形队列的物理存储结构与顺序队列并没有什么差别,但是逻辑存储结构的改变使之截然不同。 充分地使用数组中的存储空间,把数组的前端和后端连接起来,形成一个环形的顺序表,即把存储队列元素的表从逻辑上看成一个环。typedef struct{ ElemType data[MaxSize];

2017-08-23 21:24:07 2108 1

原创 顺序队列

队列也是一种运算受限的线性表,只允许在表的一端进行插入,另一端进行删除操作。进行插入的一端称作队尾,进行删除的一端称作队首或队头。队列的操作: 向队列中插入新元素称为进队或入队,新元素进队后就成为新的队尾元素。 从队列中删除元素称为出队或离队,元素出队后,其后继元素称为队首元素。 特点:先进先出(FIFO)队列的存储结构 队列描述: data 数据元素:具有同一类型 ElemType,上限

2017-08-23 19:59:43 577

原创 栈的应用Ⅱ--迷宫问题

利用栈解决迷宫问题如图,定义起点和终点,求出从起点到终点的路径。 首先迷宫分为两种格子,一种是空白格子视为可移动格子。一种黑色格子,视为墙壁,不可移动。接着考虑如何表示移动的方向,可以使用标识符标记移动的方向,这里可以使用0,1,2,3代表上右下左四个方向。走过的格子也要标记为已考察过。考察到终点视为成功。过程: ①将起点坐标入栈, ②根据栈顶元素0,1,2,3(上右下左)四个方向进行遍历

2017-08-22 21:06:59 407

原创 链栈

栈的另一种实现方法,链表。(不存在栈满上溢的情况) 1.栈的链式存储结构:typedef struct linknode{ ElemType data; struct linknode * next; }LiStack; 2.链栈四要素: ①栈空条件s->next = NULL;②进栈操作 头插法–将包含e的节点插入到头节点之后 尾插法也可实现,但是另需要一个指针指

2017-08-22 20:02:20 1813

原创 栈的应用Ⅰ--后缀表达式 括号匹配

一、后缀表达式   在我们日常生活中所见表达式都是中缀表达式,如 “5*(3+7)-4/2”,这中表达式符合我们的思维逻辑,可读性强,但是不利于计算机的解析。由波兰逻辑学家J.Lukasiewicz发明出后缀表达式,比如上式转变为后缀表达式”5 3 7 + * 4 2 / -“,这种人类难以适应的表达顺序,计算机却很受用。1.计算机应用后缀表达式的过程: 如后缀表达式:”5 3 7 + * 4

2017-08-22 17:16:59 1037

原创 顺序栈

一、定义:栈是一种只能在一段进行插入或删除的线性表,遵循FILO原则(先进后出)。  1.表中允许插入和删除的一端称为栈顶   栈顶的当前位置是动态的。   栈顶的当前位置由一个位置指示器指示。  2.表的另一端称为栈底。  3.栈的操作   插入操作:称为入栈或者压栈。   删除操作:称为出栈或者退栈。  4.当栈中没有数据元素时称为空栈。     二、栈的顺序存储结构type

2017-08-22 15:14:28 546

原创 单链表解析Ⅲ

定义:typedef char ListData;typedef struct node{ListData data;struct node * link;}ListNode;typedef ListNode * LinkList;LinkList first; //定义头指针LinkList last; //定义尾指针1.清空链表//删除除头结点外所有节点void EmptyL

2017-08-14 20:13:23 202

原创 单链表解析Ⅱ

定义: typedef char ListData;typedef struct node{ListData data;struct node * link;}ListNode;typedef ListNode * LinkList;LinkList first; //定义头指针LinkList last; //定义尾指针1.前插法建立单链表 LinkList creat

2017-08-14 19:42:23 252

原创 单链表解析Ⅰ

对链表某个节点的操作除第一个节点外,都需要找到该节点的前驱节点,这是关键。1.不带头结点单链表: ①定义typedef char ListData;typedef struct node{ ListData data; struct node * link;}ListNode;typedef ListNode * LinkList;LinkList first; //定义头

2017-08-14 18:56:58 308

原创 C语言字符串操作

①strcmp函数原型:int strcmp(const char *s1,const char *s2)  strcmp函数实际是从左到右逐个比较字符串对应位置的每个字符的ASCII码值,直到出现相差或者其中一个字符串遇到结束符’/0’为止.  当s1 < s2时,返回为负数;  当s1==s2时,返回值为0;  当s1 > s2时,返回正数。 注意点:引用数据类型”==”是比较左值和右

2017-08-10 08:12:22 280

原创 C语言scanf函数处理机制及getchar机制

函数 scanf() 是从标准输入流stdio (标准输入设备,一般指向键盘)中读内容的通用子程序,可以说明的格式读入多个字符,并保存在对应地址的变量中。 其调用格式为: scanf(“<格式化字符串>”,<地址表>); scanf()函数返回成功赋值的数据项数,出错时则返回EOF。 格式字符串包括三种字符“格式化符“,如”%d,%c,%s”等;”空白符”,如空格,制表符,新行符;”非空白符

2017-08-09 11:45:00 831

原创 C语言 输入输出字符串

gets()函数:输入字符串,并且能输入空格,现在被弃用 scanf(“%s”,buff):无法输入空格,遇到空格就终止 fgets()函数:可以输入空格,遇到回车就终止  原型:char *fgets(char *s, int size, FILE *stream);  参数:   s: 字符型指针,指向存储读入数据的缓冲区的地址。   size:从流中读入n-1个字符   stre

2017-08-08 16:25:27 340

原创 Linux 其他命令

终端翻页 Shift-pageup Shift-pagedown  输入输出重定向 标准输入的控制 语法:命令< 文件将文件做为命令的输入。 例如: mail -s “mail test” test@ahlinux.com < file1 将文件file1 当做信件的内容,主题名称为mail test,送给收信人。 标准输出的控制 如果不存在目标文件 则创建并输出 cmd >

2017-08-07 14:15:20 234

原创 Linux 网络管理

1.ifconfig | ifconfig:查看网卡信息 | sudo ifconfig eth0 down:关闭网卡 | sudo ifconfig eth0 up:开启网卡eth0 | sudo ifconfig eth0 IP:给eth0配置临时IP2.ping ping [选项] 主机名/IP 地址 查看网络上的主机是否在工作。它向该主机发送ICMP ECHO_REQUEST 包

2017-08-07 11:34:12 195

原创 Linux find/grep命令

find:查找文件或目录 命令格式:find path [-命令参数] (-type f|d|M) 命令参数: -name:文件名查询(可以正则表达式描述) -perm:以权限查询(如find . -perm 664) -prune:排除在给定目录下查找(如:find . -path ‘./dir’ -prune -o -name ‘*c’ 则在除当前目录的

2017-08-07 11:10:09 336

原创 Linux 进程管理

1.who:查看登录的用户,所用的终端,登录时间,从何处登录等 2.ps: 不使用参数:cao@ubuntu:~$ psPID TTY TIME CMD2388 pts/9 00:00:00 bash2578 pts/9 00:00:00 psPID:运行着的命令的进程编号 TTY:命令所用终端 TIME:运行命令cpu所用时间 CMD:该进程所用的命

2017-08-07 08:51:33 190

原创 Linux 压缩管理

1.tar 压缩命令:tar czvf filename.tar dirfilename 命令参数:  -c : 建立压缩档案  -x:解压  -t:查看内容  -r:向压缩归档文件末尾追加文件  -u:更新原压缩包中的文件 压缩:@ubuntu:~/Documents/test$ ls1.c a.out@ubuntu:~/Documents/test$ tar czvf t1

2017-08-06 22:36:40 473

转载 Linux grep命令

简介grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。Unix的grep家族包括grep、egrep和fgrep。egrep和fgrep的命令只跟grep有很小不同。egrep是grep的扩展,支持更

2017-08-06 09:31:02 582

原创 Linux的一些基本操作回顾

一、shellshell是命令语言解释器,俗称“壳”,是连接Linux内核与用户之间的接口程序,是文字操作系统与外部最主要的接口,也是操作系统最外面的一层。shell文件不需要编译。二 、目录和文件操作命令 1|pwd:查看当前目录路径; 2|which:查找并显示给定命令的决定路径; 3|touch:创建一个新文件,能够通过-a -m分别更变文件的访问时间和改动

2017-08-04 17:13:50 267

原创 C++ 函数重载

函数重载: 当定义多个函数名相同时,编译器通过函数的参数列表中的参数个数和参数类型进行识别。void fun(int a ,int b){ cout << a << ',' << b << endl;}void fun(double a ,double b){ cout << a << ',' << b << endl;}int main(){ fun(1,2); /

2017-07-31 16:57:06 212

原创 C/C++ 指向常量的指针和常量指针

const 修饰的变量,初始化后不允许被更新,也就是变量变为只读。是否是常量,以笔者现在的知识量无法验证。const int a = 1;变量a经过const修饰就不允许再进行修改,如果再进行赋值,如a = 3; 就会报错。const修饰符的重点是对指针变量的修饰。 1.int const *p = &a;int a = 1;int b = 2;const int *p = &a; //

2017-07-31 15:48:54 299

空空如也

空空如也

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

TA关注的人

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