自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 双链表的基本操作

头文件pragma once#include <malloc.h>#include <assert.h>#include <stdio.h>typedef int DataType;typedef struct DCLNode{ struct DCLNode* _pNext; struct DCLNode* _pPre;...

2018-08-23 19:25:36 202

原创 单链表的基本操作

头文件#include"stdio.h"#include"assert.h"#include"windows.h"#ifndef _LINKLIST_H__#define _LINKLIST_H__//链表类型在头文件中的定义typedef int DataType;typedef struct SListNode{ DataType _data; ...

2018-08-23 19:23:22 265

原创 动态顺序表的基本操作

头文件#pragma once#include <assert.h>#include <malloc.h>#include <stdio.h>#include <stdlib.h>#include <string.h>typedef int DataType;// typedef struct SeqListD/...

2018-08-23 19:18:23 260

原创 静态顺序表的基本操作

头文件#include"stdio.h"#include "assert.h"#include "malloc.h"#include"string.h"#include "windows.h"#ifndef _SEQLIST_H__#define _SEQLIST_H__#define max_size 10typedef int DataType;//将int型重新定...

2018-08-23 19:16:56 210

原创 二叉树的线索化以及线索二叉树的遍历

头文件#include"stdio.h"#include"assert.h"#include"malloc.h"typedef char DataType;typedef enum{ LINK, THREAD }PointFlag;typedef struct BinTreeNode{ struct BinTreeNode* _pLeft; struc...

2018-08-19 17:33:57 331

原创 堆的基本操作

头文件#include"stdio.h"#include"malloc.h"#include "assert.h"typedef int DataType;typedef struct Heap{ DataType* _hp; int _capacity; // 空间的大小 int _size; // 堆中有效元素的个数 }Heap;void C...

2018-08-19 17:29:26 160

原创 操作系统概念以及进程的深入了解

冯诺依曼体系我们平时使用的计算机,服务器大部分都遵守冯诺依曼体系而我们平时所认识的计算机,都是由一个个硬件组成的:输入单元,输出单元,中央处理器(cpu)CPU能并且只能对内存(存储器)进行读写,不能访问外设(即输入和输出设备)外设如果需要输入或者输出数据,只能写入内存之后在进行读写所以,总而言之,所有的设备若想进行读写等操作,必须要在内存中处理。例:在我们进行QQ发送消息时,消息...

2018-08-18 09:13:40 238

原创 二叉树面试题(上)

头文件typedef char BTDataType;typedef struct BinTreeNode{ struct BinTreeNode* _pLeft; struct BinTreeNode* _pRight; BTDataType _data;}BTNode, *PBTNode;//////////////////////////////...

2018-08-17 21:15:04 190

原创 常见的排序算法

头文件#include"stdio.h"//实现以下各种排序,并分析其时间、空间复杂度,稳定性和适用场景// 插入排序 // 直接插入排序 void InsertSort(int* array, int size);// 插入排序使用二分进行优化 void InsertSort_OP(int* array, int size);// 希尔排序 void ShellSor...

2018-08-17 11:02:29 126

原创 二叉树的基本操作之增删查改

基本操作之头文件#include <assert.h>#include <malloc.h>#include <stdio.h>typedef int DataType;typedef struct BSTreeNode{ struct BSTreeNode* _pLeft; struct BSTreeNode* _pRight...

2018-08-17 10:46:32 537

原创 日期的完善之运算符重载

导语:利用运算符重载可以做很多的小项目,今天我们主要来做一点关于完善日期的方法,在原来的日期上加上一定的天数,或者自身加减,而引起的年的后移,还有两个日期之间相差的天数,都可通过运算符重载来实现。#include"date.h"class date{friend int getdaysmonth(int year, int month); friend int leap(i...

2018-08-09 17:33:42 292

原创 线程的同步互斥

线程间的互斥为什么会出现互斥?线程是在线程栈上开辟的,而一个进程的线程是共享该进程的地址空间。而在线程中使用的变量的地址空间都在线程栈的空间内,这个时候,变量归属于单个线程,而其他的变量无法获得这个变量。但是很多时候需要线程间的变量的共享,这样的变量称为共享变量,可以通过数据的共享,完后多个进程之间的交互。但是多个线程并发操作共享变量,会带来一些问题,这时候就引出了互斥量。...

2018-08-04 17:56:03 191

原创 线程的概念以及控制

线程的相关基础知识线程的概念在一个程序里执行路线,一个程序内部的控制序列。一切进程至少有一个线程线程与进程进程是资源竞争的基本单位线程是进程执行的最小单位线程被包括在进程之中如果定义一个函数,在各线程中都可以调用,如果定义一个全局变量,在各线程中都可以访问到。两者一般的关系为:单线程进程,单进程多线程,多线程单进程,多进程多线程(一般而言,多进程多线程不处理,因为会造...

2018-08-03 15:57:51 298

原创 信号

概念在linux下执行以下 的命令,会出现如下的结果://以下显示的是系统定义的信号列表@localhost ~]$ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 6) SIGABRT 7) SIGBUS 8) SIGFPE 11) SIGSEGV 12) SIGUSR2 13...

2018-08-02 10:55:50 154

原创 进程间的通信之共享内存与信号量

共享内存本质:同一块物理内存映射到不同的虚拟地址空间,访问的时候和访问普通内存没什么差别。但是共享内存是进程间通信的最快的形式。内存映射到共享它的进程的地址空间,那么数据间的传递不再涉及到内核。共享内存函数的介绍:https://blog.youkuaiyun.com/guoping16/article/details/6584058共享内存没有进行同步与互斥共享内存用于任意进程之间双向通信,...

2018-08-02 08:48:25 420

原创 进程间的通信之消息队列

消息队列本质:内核中提供的一种链表,提供了一个进程向另一个进程发送一块数据块的方法消息队列的常见函数以及解析,参考以下这个博主的博客,有相关的总结 -https://blog.youkuaiyun.com/xiaohuima_dong/article/details/44773815用消息队列实现进程间的通信include"comm.h"int main(){ int msg...

2018-08-02 08:45:31 351

原创 进程间的通信之管道

管道本质:连接一个进程和另一个进程之间的数据流,是内核提供的一段内存,通过文件描述符来管理管道。fd[0]读数据,fd[1]写数据。而管道又可分为匿名管道和命名管道两种。匿名管道 int pipe(int pipefd[2])这个是匿名管道的创建,用pipe来实现。匿名管道只能用于具有亲缘关系的进程之间进行通信。一般的时候,一个进程会创建一个管道,然后fork出一个子进...

2018-08-02 08:42:33 169

原创 进程通信

进程通信的背景进程之间具有独立性,但是一个进程需要将数据发送给另一个进程,直接交互不方便内核提供一个公共资源,多个进程通过这个公共资源来进行交互。进程之间通信的主要分类1 进程之间的通信主要分为3大类 . 管道 . System V 进程间通信 . POSIX 进程间通信 接下来开始对着三类进行分析管道本质:连接一个进程和另一个进程之间的数据流,...

2018-08-01 21:34:42 165

原创 进程的创建,等待,终止与程序替换

进程的创建进程的创建用的是fork函数 4 int main(void){ 5 pid_t pid; 6 7 printf("before :pid is %d\n",getpid()); 8 if((pid=fork())==-1){ 9 perror("fork()"); 5 pid_t

2018-07-30 21:42:34 195

原创 网络套接字

注;·从标准输入读数据,读取了之后,发给缓存区,由服务器处理之后,收到了响应。简单的TCP 网络程序--TCP 服务器·服务器端得作用是接收client 的请求,并进行简单的数据通信IP地址,端口号,网络字节序等网络编程中的基本概念--IP地址·IP地址实在IP协议中,用来标识不同主机的地址·IP协议默认为IPv4,ip地址是4个字节,32位的整数。·通常使用点分十进制的字符串表示IP地址,例...

2018-07-05 16:32:24 298

原创 进程间的通信相关的基础知识

进程间的通信1. 互斥和同步--互斥:各个进程之间共享资源,这些资源要排他使用,因此要竞争资源--同步:各个进程之间为了完成同一个任务而相互协作。2. 通信的目的--数据传递--资源共享--通知事件3. 发展历史--管道--system IPC  消息队列  共享内存  信息量--POSIX IPC  互斥量  读写锁  4. 死锁:多个进程之间相互等待对方的资源,在等待对方时,不会释放自己的资源...

2018-06-05 20:36:51 369

原创 Linux 多线程

·线程的基本操作1. 概念·在一个程序里执行路线,一个程序内部的控制序列。·一切进程至少有一个线程2. 线程与进程·进程是资源竞争的基本单位·线程是进程执行的最小单位·线程被包括在进程之中·如果定义一个函数,在各线程中都可以调用,如果定义一个全局变量,在各线程中都可以访问到。·两者一般的关系为:单线程进程,单进程多线程,多线程单进程,多进程多线程(一般而言,多进程多线程不处理,因为会造成很多问题)...

2018-05-29 20:31:50 230

转载 如何知道一个函数的运行时间

头文件ctime里面提供了一个函数:  clock_t clock(); 该函数返回的是从程序开始运行到调用clock函数时所打的点数,即clock tick(时钟打点);2)有一个常数CLK_TCK,是机器时钟每秒所走的时钟打点数,是这样定义的#define CLK_TCK  CLOCKS_PER_SEC # define CLOCKS_PER_SEC 10003) 所以,定义两个clock的变...

2018-05-29 16:39:43 971

原创 string类

c++中字符串的拷贝1. 在c语言中, ·char string[] = "abcdef";//一般时候是以数组的形式进行字符串的定义 ·strcpy(arr, array);//调用库函数进行拷贝2. 而在c++中,利用类和对象可以进行字符串的定义与拷贝  ·先来看一个例子,判断它的封装性 class string{public:string(const char *pstr = ""):_ps...

2018-05-29 16:34:25 142

原创 运算符重载练习完善日期

运算符重载练习完善日期导语:利用运算符重载可以做很多的小项目,今天我们主要来做一点关于完善日期的方法,在原来的日期上加上一定的天数,或者自身加减,而引起的年的后移,还有两个日期之间相差的天数,都可通过运算符重载来实现。#include"date.h" class date{friend int getdaysmonth(int year, int month);friend int leap(in...

2018-05-29 16:31:41 241

原创 类和对象相关知识点

1. 结构体在引入类时,先回顾结构体定义以及对齐等相关知识(1)结构体的定义  struct student{int age;char sex;char name;};(2)结构体的对齐宗旨为:先内部对齐,再整体对齐  struct student{int age;//对齐参数为4,对齐为4个字节char sex;//对齐参数为1,因为4是1的倍数,所以为5double b;//对齐参数为4,5不...

2018-05-08 18:41:49 410

原创 c++动态内存管理

在讨论c++内存管理之前,先来回忆一下c中的动态内存管理方式1. c中动态内存管理方式--堆上  c语言中使用malloc/calloc/realloc/free进行动态内存管理  malloc/calloc/realloc来在堆上开辟空间,free将申请的空间释放掉·堆上的内存需要用户自己来管理,开辟的空间最后必须free掉,否则会造成内存泄漏。--栈上 使用_alloca在栈上动态开辟内存,栈...

2018-05-08 16:16:31 170

原创 进程控制

1. 学习进程创建, 等待, 终止. 使用代码实现. (1)进程创建fork:在已经存在的进程中创建一个新的进程,新进程为子进程,原来的进程为父进程--子进程返回的值为0,父进程返回的值为子进程的pid运行结果为vfork:也是用来创建子进程的运行结果与上边相同-不拷贝内存空间,和父进程共享地址空间(定义变量之后,值相同),--并且能保证子进程先运行,子进程先运行之后父进程才开始运行-- 必须调用...

2018-04-10 18:01:52 120

原创 进程的概念

1. 调研进程的调度算法. (1)先来先服务 在所有调度算法中,最简单的是非抢占式的FCFS算法。 算法原理:进程按照它们请求CPU的顺序使用CPU.就像你买东西去排队,谁第一个排,谁就先被执行,在它执行的过程中,不会中断它。当其他人也想进入内存被执行,就要排队等着,如果在执行过程中出现一些事,他现在不想排队了,下一个排队的就补上。此时如果他又想排队了,只能站到队尾去。 算法优点:易于理解且实现简...

2018-04-04 10:25:33 321

原创 堆的基本操作

头文件#include"stdio.h"#include"malloc.h"#include "assert.h" typedef int DataType; typedef struct Heap{DataType* _hp;int _capacity; // 空间的大小 int _size; // 堆中有效元素的个数 }Heap; void CreateHeap(Heap* pHp, Data...

2018-04-03 16:36:26 157

原创 指令

1.Linux下有两种用户:超级用户(root):在系统下可以做任何事。普通用户:做有限的事情普通用户受超级用户的限制。1. 系统的基本权限(1)r(读):对于文件而言,具有读文件的权限,对目录而言,具有浏览目录的权限(2)w(写):对文件而言,具有修改文件的权限,对目录而言,具有删除,移动目录的权限。(3)x(执行):execute对文件而言,具有执行文件的权限,对于目录而言,具有进入目录3.文...

2018-03-30 16:39:03 137

原创 linux的一些开发工具

在linux下常用的编辑器1. Vimvi编辑器是Unix及Linux系统下标准的编辑器,以下是它的用法和一小部分指令。Vim test.c//进入到命令模式(1)命令模式中可以编辑,按“i”进入insert模式,可编辑1. gg=G可调整格式2.  按esc 退出编辑模式(2)1. 输入“:” 进入另一个模式,在低端  ,然后输“w”表示已经写入显示已经保存后:1     光标定位到第一行2. ...

2018-03-30 15:58:10 3915

原创 动态哈希表

动态哈希表的基本操作 函数实现部分 void InitHashBucket(HT* ht, int capacity)//初始化哈希表{if (ht == NULL){return;}// 获取容量capacity = GetPrime(capacity);ht->table = (PNode*)malloc(sizeof(Node)*capacity);//哈希表的初始化for (int ...

2018-03-16 16:48:04 620

原创 哈希表之闭散列

动态哈希表的基本操作 函数实现部分 #include"HT.h" 1. 在进行初始化之前,先确定它的容量,必须为素数2. 然后申请内存空间,初始的空间的状态默认为EMPTY3. 更新容量和元素个数void InitHt(HT *ht, int capcity)//初始化哈希表{if (ht == NULL){return;}capcity = GetPrime(capcity);//获取容量Ele...

2018-03-03 15:13:01 267

原创 二叉搜索树

二叉搜索树的概念二叉搜索树又称为二叉排序树,因为它的特点是1.在根左边的树的每个节点都小于根              2.在根右边的树的每个节点都于大根二叉搜索树的操作1. 查找  PNode FindBST(PNode pRoot, DataType data){assert(pRoot);PNode pcur = pRoot;while (pcur){if (pcur->_data =...

2018-02-28 22:52:11 127

原创 二叉树的线索化

二叉树的线索化头文件#include"stdio.h"typedef char DataType;typedef enum{ LINK, THREAD }PointFlag;typedef struct BinTreeNode{struct BinTreeNode* _pLeft;struct BinTreeNode* _pRight;struct BinTreeNode* _pParent;Da...

2018-02-27 22:35:00 152

原创 单链表以及其基本操作

链表以及基本操作1. 链表是一种链式存储的线性表,每个存储单元称为结点链表是相互连接起来的存储单元,一个存储单元包含两部分一部分表示的是指向下一个存储单元的指针,另一部分表示的是的存储单元中的数据元素。2. 接下来就进行一些基本的链表操作(1)链表的建立//链表类型在头文件中的定义 typedef int DataType;typedef struct SL

2018-02-02 22:00:57 218

原创 动态顺序表

1.头文件#include"stdio.h"#include "windows.h"#include"assert.h"#include "malloc.h"#ifndef _SEQLISTD_H__#define _SEQLISTD_H__typedef int DataType;struct seqlistd{DataTy

2018-01-23 18:24:31 189

原创 静态顺序表

线性表:n个数据元素组成的一个有效序列,可以在任意位置进行插入和删除。 顺序表:用一段地址连续的存储单元一次存储数据元素。一般分为静态顺序表与动态顺序表。 以下是关于静态顺序表的一些插入与删除  头文件 #include"stdio.h"#include "assert.h"#include "malloc.h" #ifndef _SEQLI

2017-12-07 19:28:53 183

转载 输入输出函数

1.sscanf函数的用法int sscanf( string str, string fmt, mixed var1, mixed var2 ... );sscanf与scanf较为类似,都是用于输入的,Scanf输入源为屏幕,sscanf以固定字符串为输入源。1. 常见用法。char buffer[50] = ;sscanf("3456", "%s", buffer);

2017-11-27 23:03:46 318

空空如也

空空如也

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

TA关注的人

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