自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Python学习(turtle、print()、随机数与if语句、input()、for循环的注意事项)

turtle:from turtle import * #库的导入Screen().bgpic("***.png") #图片选择t = Turtle() #画笔的选择t.shape("turtle") #默认的箭头t.forward() #括号内填入前进数字 默认向右侧直走t.left()t.right() # 括号内填入对应角度注意事项:1....

2019-12-20 18:18:07 922

原创 SMTP发送邮件流程

2019-07-19 16:57:01 1032

转载 curl_easy_setopt的基本选项解析

CURLcodecurl_easy_setopt(CURL *handle, CURLoption option, parameter);网络选项(NETWORK OPTIONS):1. CURLOPT_URL这个选项后面接实际要放访问Http服务器的URL地址 ,这个 URL 是一个以 '\0' 结尾的字符串;2. CURLOPT_POSTFIELDSIZE该选项是指向一个向 H...

2019-07-17 17:12:04 2961

原创 字符串和字符函数

1.如果字符串文字之间没有间隔或者是间隔是空格符,ANSI C 会将它串联起来。如: char str[50] = "I ""am ""a " "student"; char str1[50] = "I am a student";它们是相等的。2.如果想在字符串之前加一个双引号的话,可以在双引号之前加一个反斜线进行转义。3.字符串常量属于静态存储类,静态存储是...

2019-03-18 18:03:22 272

原创 ctype.h系列的字符判断函数

   

2019-02-26 16:21:04 240

原创 for()循环以及逗号表达式注意事项

for()循环:for(; ;)第一个表达式不必初始化一个变量,同时,它也可以是某种类型的printf()语句,要记住第一个表达式只在执行循环的其他部分之前被求值或执行一次。举个例子:#include<stdio.h>int main(){ int n = 1; for(printf("welcome to hello world\n");n != ...

2019-02-25 18:20:54 2487

转载 详解:struct sockaddr_in, struct sockaddr,struct in_addr

一、结构体 struct sockaddr_in,  struct sockaddr,  struct in_addrstruct sockaddr_in,  struct sockaddr,struct in_addr,这是网络编程中常用的结构体,每次都记不住它们各自的成员是啥,需要临时查,为方便以后的查看,在这里总结下。struct sockaddr {unsigned short ...

2019-02-22 16:58:30 1077

原创 scanf()函数的使用

1.如果使用scanf()来读取函数中定义的基本变量类型的值,请在变量名之前加一个&。2.如果受用scanf()把一个字符串读进一个字符数组中,则不需要使用&.以下为简单的测试程序:#include<stdio.h>int main(){ int num1 = 0; float num2 = 0.0; char arr[20...

2019-02-22 14:42:55 10243

原创 printf() 函数

请求printf()打印变量的指令取决于变量的类型。下图来自C Primer Puls. 以下为简单的测试代码:#include<stdio.h>#define PI 3.1415923int main(){ int num = 5; int cost = 3100; float exp = 13.5; printf("the n...

2019-02-22 11:03:22 408

原创 模拟实现atoi 函数

1.跳过前面的空白字符(例如空格,tab缩进)等,可以通过isspace( )函数来检测; 2.遇上数字或正负符号才开始转换,而在遇到非数字或’\0’才结束转换,并将结果返回。 3.如果 ptr不能转换成 int 或者 ptr为空字符串,那么将返回 0。 4.该函数要求被转换的字符串是按十进制数理解的。#include<iostream>using namespace s...

2018-08-28 16:37:25 231

原创 数据结构——快速排序

1.首先定义一个基准值:tmp =  arr[i],且让j--;当arr[j] > tmp;时 j 不动,开始i++;当arr[i] >tmp;时    交换arr[i]和arr[j]; 当i,j相遇时,交换tmp 与 arr[i] 此时相遇点左边都小于基准值,右边的都大于基准值,递归操作就行。#include<stdio.h>...

2018-08-22 15:19:52 685

原创 排序算法——归并排序

 #include<stdio.h>#include<windows.h>void MergeArray(int* arr, int left, int mid, int right, int* tmp){ int index_left = left; int index_right = mid; int tmp_left = left; while...

2018-08-22 14:57:00 162

原创 数据结构——复杂链表的复制

题目:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。对于复杂链表,一般会在next域的基础上再增加一个random域,这个指针会指向任意节点或者是一个NULL。                                                在对复杂链表进行复制时,也要对ran...

2018-08-22 14:56:01 263

原创 模拟实现strlen字符串长度(递归,非递归),strcpy字符串拷贝、strncpy(指定长度拷贝)、strcat(字符串拼接),strcmp(字符串比较)

strlen:#include<stdio.h>#include<windows.h>//模拟实现strlen 非递归int mystrlen1(const char* str){ if (str == NULL) { return -1; } int count = 0; char*p = str; while (*p != '\0') ...

2018-08-15 17:51:37 893

原创 宏定义

宏定义:1.数值宏常量:宏定义可以出现在代码的任何地方。从本行宏定义开始,之后的代码就都认识这个宏了,而且也可以把任何东西定义成宏。#define PI 3.141592654在之后的代码可以直接使用PI来代替这一串数字,而且最好这么做,要不然当代码中有多个这串数字,而我现在要更改它的精度,这可就太麻烦了。所以只需要在宏定义中直接修改它的值就行。#define ERROR_...

2018-08-13 15:01:39 307

原创 位运算符、++、--操作符

位运算符:$:按位与    |:按位或    ~:取反    ^:按位异或按位异或可以实现两个变量值的交换,但是并不推荐。(a ^= b;b ^= a ;a ^= b;).左移和右移:<<、>>都是双目运算符,“<<”将二进制向左移动指定位,高位丢弃,低位补0.“>>”当为负数时,根据编译系统的规定补0,或者1.例:0x0...

2018-08-13 14:22:04 322

原创 C语言关键字——static、sizeof、volatile

static:(2个作用)1、static:修饰变量:变量又分为局部变量和全局变量,但是它们都存储在内存的静态区。静态全局变量:作用域仅限于变量被定义的文件当中,其他文件即使使用extern声明也没有办法使用。或者说是从被定义的地方开始,一直到文件结尾都不能使用,并且在定义之前的代码行也不能使用。如果想使用的话必须加上extern,或者简单一点,直接定义在文件顶部就行。静态局部变量...

2018-08-13 01:58:55 320

原创 C语言——排序(冒泡、选择、插入)

typedef int(*Compare)(int a,int b);//回调函数//从大到小(从小到大)int Greater(int a,int b){ return a > b ? 1:0;}int Less(int a,int b){ return a < b ? 1:0;}void Swap(int* a,int* b){ ...

2018-07-26 13:11:17 244

原创 搜索二叉树的基本操作(递归与非递归)

搜索二叉树:    在搜索二叉树中,根节点大于所有左子树节点的值,小于所有右子树节点的值。本博客中涉及到的基本操作有:1.递归与非递归的插入2.递归与非递归的删除3.递归与非递归的查找#include<stdio.h>#include<stdlib.h>typedef char SearchTreeType; typedef struct ...

2018-07-25 13:48:03 387

原创 实现简单的日期类:Date

Date.h#pragma once #include<iostream>using namespace std;class Date{public: Date(int year = 2018,int month = 7,int day = 19) :_year(year) ,_month(month) ,_day(day) ...

2018-07-25 11:18:54 288

原创 网络——TCP协议

TCP    TCP是一种面向有连接的传输层协议,它可以保证两端通信主机之间的通信可达。TCP能够正确处理在传输过程中丢包、传输顺序乱掉等异常情况。此外TCP还能够有效的利用带宽,缓解网络拥堵。    然而,为了建立于断开连接,有时它至少需要7次的发包和收包(三次握手、四次挥手),导致网络流量的浪费。TCP报头格式:32位序列号:是指发送数据的位置,每发送一次数据,就累加一次数据字节数的大小。序列...

2018-07-06 11:12:54 268

原创 网络——IP协议

TCP/IP的心脏是互联网层。这一层主要是IP和ICMP两个协议组成。IP相当于OSI参考模型中的第三层——网络层。网络层的主要作用是:“实现终端节点之间的通信”,点对点通信。            ...

2018-06-21 13:49:34 217

原创 Web协议(二)

ICMP协议:ICMP协议是一个网络层协议。                                            ICMP功能:1.确认IP包是否成功到达目标地址。2.通知在发送过程中IP包被丢弃的原因。3.ICPM是基于IP协议工作的,但并不是传输层的功能。4.ICMP只能搭配IPv4使用。IPv6 对应使用ICMPv6.ping命令:[dyt@iz2ze2wt8nsnj7uk...

2018-06-20 19:14:20 263

原创 Web协议(一)

以太网帧格式:            1.源地址和目的地址值得是网卡的硬件地址(MAC地址),出厂时固化。2.帧协议类型字段有三种值:IP、ARP、RARP。3.帧末尾是CRC效验码。认识MAC地址1.MAC地址用来标识数据链路层中相邻的节点2.在网卡出厂时就确定,基本不能修改。3.长度位48位,一般用16进制加冒号表示...

2018-06-20 18:05:22 5568

原创 C语言: 数组元素循环右移

思路:                           因为一串数字右移自身长度后还是其本身,所以需要 右移动位数 M% 数字个数N 。也就是 M= M % N,这样就保证了M<N.在得到新的M后,可以直接输出序列从N-M号元素到N-1 号元素,然后在输出0号到N-M-1号元素就行。注意:1.处理最后一个数字不输出空格可以使用count计数,只要count< N ,就输出空格。#i...

2018-06-15 14:55:24 6259

原创 TCP协议通讯流程

服务器初始化:调用socket,创建文件描述符调用bind,将当前文件描述符和ip/port绑定在一起,如果这个端口已经被其他进程占用,便会绑定失败。调用listen,声明这个文件描述符作为服务器的文件描述符,为后面的accept做准备。调用accept,并阻塞,等待有客户链接。建立连接的过程:三次握手调用socket,创建文件描述符调用connect,向服务器发起连接请求;(第一次):conne...

2018-06-08 16:41:59 1094

原创 二叉树的基本操作

tree.h#pragma once typedef char TreeNodeType; typedef struct TreeNode { TreeNodeType data; struct TreeNode* lchild; struct TreeNode* rchild; } TreeNode; void TreeInit(TreeNode** root); void...

2018-06-01 16:59:05 248

原创 比较进程和多线程TCP网络编程套接字

//服务器#include<stdio.h>#include<sys/types.h>#include<sys/socket.h>#include<stdlib.h>#include<stdlib.h>#include <arpa/inet.h>#include<unistd.h>#include

2018-06-01 16:58:30 217

原创 TCP网络编程套接字(多进程)

//服务器#include<stdio.h>#include<sys/types.h>#include<sys/socket.h>#include<stdlib.h>#include<stdlib.h>#include <arpa/inet.h>#include<unistd.h>#include

2018-06-01 16:49:58 377

原创 TCP网络编程套接字(单进程)

//服务器#include<stdio.h>#include<sys/types.h>#include<sys/socket.h>#include<stdlib.h>#include<stdlib.h>#include <arpa/inet.h>#include<unistd.h>#include

2018-06-01 15:52:57 218

原创 UDP网络编程套接字

//服务器#include<stdio.h>#include<sys/types.h>#include<sys/socket.h>#include<stdlib.h>#include<unistd.h>#include<arpa/inet.h>#include<netinet/in.h>#incl

2018-06-01 15:30:04 218

原创 迷宫求解 :1) 求简单迷宫是否存在路径 ; 2) 求多出口迷宫的最短路径 ;3) 求带环的多出口迷宫的最短路径

迷宫求解的非递归算法应用了之前的栈结构https://blog.csdn.net/DuckyLoser/article/details/79914855点击打开链接#include<stdio.h>#include"seqstack.h"#define ROW 6 //行#define COL 6 //列typedef struct Maze{ int...

2018-05-26 12:31:27 301

原创 堆的基本操作

heap.h// 1. 堆是一个完全二叉树 // 2. 堆有两种, 一种叫小堆(小根堆, 最小堆), // 一种叫大堆(大根堆, 最大堆). // 3. 以小堆为例, 这个树的根节点是这个树中的最小的元素 // 对于任意一个子树来说, 子树的根节点, 小于左右孩子节点的值. // 4. 以大堆为例, 这个树的根节点是这个树种的最大元素 // 对于任意一个子树来说, 子树...

2018-05-26 11:49:47 207

原创 数据结构-栈和队列笔试题

最小栈(两种方法) 两个栈实现一个队列 两个队列实现一个栈 判定字符串是否按照出栈顺序 共享栈(一个数组实现两个栈)#pragma once#include<stdio.h>#include<stdlib.h>typedef char StackType;typedef struct Stack{ StackType data; struc...

2018-05-18 17:22:19 255

原创 生产者消费者模型

生产者消费者模型在日常生活中,我们大多数人都扮演着消费者的角色,比如在食堂吃饭、超市购物等。那那些食品还有原材料的供应商则扮演着生产者的角色,当然肯定需要一个场所来为我们提供服务了。但是生产、消费者和场所理解了,那他们之间又存在着什么关系呢?生产者和生产者:在植物生长过程中呢,为了更好的接受光照进行光合作用,所以它们之间都在进行竞争的进行光照。供货商也是,会争取一个场所的代理权。所以生产者和生产者...

2018-05-04 17:19:12 193

原创 进程间关系和守护进程

进程组:每一个进程除了有一个进程ID外,还属于一个进程组。进程组是一个或是多个进程的集合。每一个进程组有一个唯一的组ID。每一个进程组都有一个组长进程。组长进程的标识是:其进程组ID就等于其进程ID。组长进程可以创建一个一个进程组,创建该组之间的进程,然后终止。只要某个进程组中用进程存在,那么进程组就存在,与组长进程是否终止无关。[root@localhost linux]# sleep 100|...

2018-05-04 17:16:13 140

原创 死锁

什么是死锁?    死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。或者说“集合中的每一个进程都在等待只能由本集合中的其他进程才能引发的事件,那么该组进程是死锁的”。产生条件:虽然进程在运行过程中,可能发生死锁,但死锁的发生也必须具备一定的...

2018-05-03 11:23:53 155

原创 线程的同步与互斥

互斥:情况:大多数线程试图修改临界资源,这时就可以申请锁,保证临界资源的安全性。mutex(互斥量)如果多个线程一同操作共享变量,会造成一些问题。一个售票系统,多个线程一起进行购票操作。#include<stdio.h>#include<pthread.h>#include<unistd.h>#include<stdlib.h>int ti...

2018-04-27 18:11:11 150

原创 初识线程

线程:Linux下并没有真正意义上的线程,线程是模拟进程的,所以人们就自己写了一个库(pthread.h).因此,使用这些函数库大家都知道应该怎么做。同时链接这些线程函数库时,要使用编译器命令: -lphread 选项创建线程#include<pthread.h> int pthread_create(pthread_t *thread,const pthread_attr_t *...

2018-04-27 15:22:13 127

原创 初识进程

fork函数:    在Linux中fork函数非常重要,它从已经存在的进程中创建一个新进程。新进程为子进程原进程为父进程。#include<unistd.h>pid_t fork(void);返回值:子进程返回0,父进程返回子进程id,错误-1。进程调用fork,当控制转移到内核中的fork代码后,内核做:1.分配新的内存块和内存数据结构给子进程2.将父进程部分数据结构内容拷贝至...

2018-04-27 13:10:20 133

空空如也

空空如也

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

TA关注的人

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