自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 new与malloc的关系与区别

一. new与delete的用法int *p1=new int;//开辟的是四字节的内存空间int *p2=new int(100);//开辟的是四字节的内存空间并初始化为100int *p3=new int[100];//开辟的是400字节的内存空间int *p4=(int*)malloc(sizeof(int)*100);//开辟的是400字节的内存空间 delete ...

2018-04-16 17:55:33 432

原创 死锁的原因及处理方式

死锁的原因?死锁是指在俩个或多个并发的进程中,如果每个进程持有某种资源而又等待别的进程释放它们现保持着的资源,否则就不能向前推进。此时,每个进程都占用了一定的资源但是又不能向前推进,则称这一组进程产生了死锁。 简单的说:就是俩个或多个进程无止境的等候,永远不会成立的条件的一种系统状态。、 产生死锁的根本原因是系统能够提供的资源个数要求比该资源的进程数少,具体原因:系统资源不足,进程推进...

2018-07-17 10:27:22 4199

原创 进程和线程

进程与线程是操作系统进行任务调度时的单位。应用程序都是在运行在进程或者线程中。通过使用进程或者线程,应用程序可以实现并发控制等功能。操作系统的最小单位是什么?现代的操作系统包括了进程和线程这俩种调度单位。进程指在系统中正在运行的一个应用程序。线程是系统分配处理器时间资源的基本单元。对操作系统而言,其调度单元是线程。一个进程至少包含一个线程,通常将该线程称为主线程。 操作系统的最小...

2018-07-17 00:12:55 201

原创 求树的深度和判断是否为平衡二叉树

首先如何求树的深度?思想:1.求树的深度首先要判断这棵树是否为空树,如果为空树就返回0。2.定义俩个变量来记录左子树与右子树的大小。3.比较左子树与右子树的大小,返回大的值 加一。4.以上为递归遍历,约束条件为左子树或右子树是否为零。实现代码:int TreeDepth(BTnode* TreeNode){ if(TreeNode==NULL) ...

2018-06-26 20:59:40 336

原创 C程序的存储空间布局

C程序存储空间布局一般由以下几部分组成: 正文段:有CPU执行的机器指令构成。通常,正文段是共享的,所以同时启动一个程序的多个进程,在内存中只有一个正文段的副本。正文段是只读的防止程序意外修改。初始化数据段:常称为数据段,有程序里初始化过的静态变量构成,如:int num=123;该变量初始化赋初值为123存放在初始化数据段。非初始化数据段: BSS段,存储未初始化全...

2018-05-18 21:06:23 495

原创 进程总结

一.什么是进程:在用户角度看:进程就是程序的一次动态执行过程。 在系统内核角度看:①进程是分配资源的最小单位。②是操作系统分配内存,CPU时间片系统资源的基本单位。③每个进程都有自己的虚拟空间和进程状态。二.进程的特性:动态性:进程的实质就是程序的一次执行过程,进程是动态产生,动态消亡的。并发性:任何进程都可以和其他进程一同执行。独立性:进程能够独立运行,是系统分配...

2018-05-18 20:41:26 280

原创 Linux-简单的进度条实现

进度条的实现:首先我们需要知道进度条的实现需要哪些头文件的支持#include<stdio.h>#include<string.h>进度条的实现我们要了解进度条是每次增加一个内容,如何保存这个内存呢,这里我们用到了数组 buf[ ] 把增加的内容放到数组内,然后让屏幕打印出来。初始化buf数组我们可以使用memset函数进行初始化memset...

2018-05-10 16:23:31 158

原创 Linux--linux命令知识点总结

简单的Linux命令: 命令 作用 ls 查看当前目录的文件 pwd 当前目录的路径 ...

2018-05-09 16:32:28 176

原创 Linux-管道

总结这几天学习的知识点,管道。管道的作用就是在具有亲缘关系的进程间传递信息。所谓的亲缘关系,就是他们具有共同的祖先。所以,只要共同的祖先曾今调用调用了fork函数,打开的管道文件就会在fork函数之后。被各个后代进程所共享。管道是单向通信的,管道的生命周期是随进程的,管道依赖于文件流,管道是面向字节流的。管道是一种文件,可以调用read,write,close等操作文件的接口来...

2018-04-26 21:09:16 224

原创 数据结构思维导图

数据结构思维导图:

2018-04-25 21:29:28 428

原创 C语言--思维导图

C语言思维导图:

2018-04-25 21:27:16 718 1

原创 C++基础 String类的实现(完整版)

String类class String{public: String(const char *str="")//构造函数 :_str(new char[strlen(str)+1]) { _size=strlen(str); _capy=_size; strcpy(_str,str); } ...

2018-04-16 17:06:35 856

原创 C++ string类的简单实现(俩种写法)

首先是传统写法: (深拷贝)给要拷贝构造的对象重新分配空间。 (浅拷贝)是对对象的简单拷贝,让几个指针都指向同一块地址空间,在释放这段空间的时候会产生“对已释放的空间再次释放”,导致程序中断。所以String类的实现是用的深拷贝,如果用浅拷贝,当释放空间会把有用的空间释放掉,因为每次函数完成后会调用析构函数。传统写法:传统写法用的是strcpy函数需先创建一...

2018-04-01 18:45:59 642

原创 C++基础 Data类的实现

Data类:#include <iostream>#include <assert.h>#include <Windows.h>using namespace std;class Date{public: Date(int year=1990,int month=1,int day=1)//构造函数 :_year...

2018-04-01 15:26:10 2955

原创 C++类和对象及4个默认成员函数

什么是面向对象:把一组数据结构和处理它们的方法组成对象,把相同行为的对象归纳为类,通过类的封装隐藏内部细节,通过继承实现类的特化\泛化,通过多态实现基于对象类型的动态分派.。类的大小?为什么要内存对齐?内存对齐的计算?1..以空间换时间,访问内存,如果按4字节的整数倍读取内存,对齐只需读取一次,反之,将读取多次。提高程序运行速率。 2.每个对象的大小为类中所有成员变量的大...

2018-03-27 18:31:12 230

原创 C++引用与指针

引用的概念:引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。 引用的声明方法:类型标识符 &引用名=目标变量名; 引用必须引用一个存在的变量,而不能引用一个不存在为NULL的。引用作参数:1.在引用的使用中,单纯给某个变量取个别名是毫无意义的,引用的目的主要用于在函数参数传递中,解决大块数据或对象的传递效率和空间不如意的问题。 2.用...

2018-03-27 17:01:39 109

原创 C++的重载解释与命名空间

C++是什么:C++这个词在中国大陆的程序员圈子中通常被读做“C加加”,而西方的程序员通常读做“C plus plus”,“CPP”。 它是一种使用非常广泛的计算机编程语言。C++是一种静态数据类型检查的,支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、制作图标等等泛型程序设计等多种程序设计风格。C++支持重载,C语言为什么不支持重载:...

2018-03-27 16:29:03 840

转载 汉诺塔问题

问题来源:汉诺塔来源于印度传说的一个故事,上帝创造世界时作了三根金刚石柱子,在一根柱子上从上往下从小到大顺序摞着64片黄金圆盘。上帝命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一回只能移动一个圆盘,只能移动在最顶端的圆盘。有预言说,这件事完成时宇宙会在一瞬间闪电式毁灭。也有人相信婆罗门至今仍在一刻不停地搬动着圆盘。恩,当然这个传说并不...

2018-03-25 15:07:42 442

转载 CSDN-Markdown编辑器

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I...

2018-03-25 10:45:13 109

原创 排序算法--7大排序问题解决方法

排序分为:1.插入排序2.希尔排序3.选择排序4.冒泡排序5.堆排序6.快速排序7.归并排序具有稳定性的排序是:插入排序,归并排序,冒泡排序快速排序:是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短;当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序序。1. 插入排序-直接插入排序        升序(先将序列的...

2018-03-12 18:46:11 2428

原创 哈希——开放定址法

哈希函数:影响哈希冲突的原因:引起哈希冲突的一个原因可能是:哈希函数设计不够合理。    哈希函数设计原则: 哈希函数的定义域必须包括需要存储的全部关键码,而如果散列表允许有m个地址时,其值域必须在0到m-1之间  哈希函数计算出来的地址能均匀分布在整个空间中  哈希函数应该比较简单解决哈希冲突两种常见的方法是:闭散列和开散列闭散列闭散列:也叫开放地址法,当发生哈希冲突时,如果哈希表未被装满,说明...

2018-03-01 16:00:57 1069

原创 哈希——拉链法

首先写哈希——拉链法要知道哈希冲突。    哈希冲突: 对于两个数据元素的关键字 Ki  和 Kj  (i != j),有 Ki != J ,但有:   HashFun(Ki) == HashFun(Kj)   即不同关键字通过相同哈希哈数计算出相同的哈希地址,该种现象称为哈希冲突或哈希碰撞。把具有不同关键码而具有相同哈希地 址的数据元素称为“同义词”所以解决哈希冲突两种常见的方法是:闭散列和开散...

2018-03-01 15:25:06 3873

原创 堆的TopK问题,优先级序列,堆排序d

堆的概念:    如果有一个关键码的集合K = {k0,k1, k2,…,kn-1},把它的所有元 素按完全二叉树的顺序存储方式存储在一个一维数组中,并满足:   Ki <= K2*i+1 且 Ki<= K2*i+2 (Ki >= K2*i+1 且 Ki >= K2*i+2) i = 0,1,2…,则称为小堆(或大堆)。    小堆(大堆)中:任一结点的关键码均小于(大于)...

2018-02-26 20:34:28 224

原创 搜索二叉树的基本操作(增加,删除,查找)递归与非递归算法

二叉搜索树概念:二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树1.若它的左子树不为空,则左子树上所有节点的值都小于根节点的值2.若它的右子树不为空,则右子树上所有节点的值都大于根节点的值3。它的左右子树也分别为二叉搜索树建立结构体:typedef int Datatype;typedef struct BSTreeNode { st

2018-02-26 19:51:39 1688 1

原创 复杂链表的复制

复杂链表的复制。一个链表的每个节点,有一个指向next指针指向下一个节点,还有一个random指针指向这个链表中的一个随机节点或者NULL,现在要求实现复制这个链表,返回复制后的新链表。typedef struct SListNode{ int data;//值 struct SListNode *next;//下一节点的指针 struct SListNode *random;//

2018-02-09 09:32:19 131

原创 C语言链表面试题(增强版)

C语言诸多面试题,这里有常用的经典面试题,应用有多种算法,如替换法,快慢指针等等。注:含有的有关头文件引用上一篇博客单链表的插与删,本篇文章不在写出。面试题 一:从尾到头打印单链表。/////// 1.从尾到头打印单链表 //////////void SLitsPrintTailToHead(SListNode* pHead)//非递归算法(利用俩个指针一个定义到尾部p1,另一个

2018-02-07 11:28:32 2696 1

原创 单链表的插与删基本操作(C语言)

函数声明:#include #include #include typedef int DataType; typedef struct SListNode { struct SListNode* next; DataType data; }SListNode; SListNode* BuySListNode(DataType x);//创建节点void SLis

2018-01-31 12:09:21 270

原创 空格替换 C语言

题目:实现一个函数,把字符串中的每个空格替换成%20.例如,输入“We are happy”,则输出We%20are%20happy.主要的思想:思想:我们可以先遍历一次字符串。这样就可以统计出字符串中的空格总数,每替换一个空格,长度增加2,因此替换以后字符串的长度等于原来的长度加上2乘以空格数目。我们从字符串的后边开始复制替换,首先准备俩个指针,p1,p2p1指向原始字符串的末

2018-01-30 13:25:54 1101

原创 二维数组中查找

1.题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序, 每一列都按照从上到下递增的顺序排列。请完成一个函数, 输入这样的一个二维数组和一个整数, 判断数组中是否该整数。思想:首先选取数组中右上角的数字,如果该数字等于要查找的数字,则查找 过程结束;如果该数字大于要查找的数字,则要剔除这个数字所在的列 ;如果该数字小于要查找的数字,则提出这个数字所在的行。总的来

2018-01-28 09:50:34 163

原创 C语言通讯录管理系统 利用fwrite和fread进行文件存取

本通讯录管理系统采用 C语言编写,运行直接可以使用。由头文件 1.h 与源文件test.c构成。fread 是一个函数,它从文件流中读数据,最多读取count个项,每个项size个字节,如果调用成功返回实际读取到的项个数(小于或等于count),如果不成功或读到文件末尾返回 0。 本通讯录fread(&(MM),sizeof(struct People),1,fp);

2018-01-27 20:23:02 1483

原创 int *(p)[ ] 与 int *p[ ]的区别

int *(p)[ ]与int *p[ ]的比较前者表示 p是由俩个指向int值的指针构成的函数,这种声明会创建俩个指向单个int值的指针; 后者表示 p首先和*相结合,从而创建一个指向包含俩个int值的数组指针。例:int *(p[4])是指针数组,数组内存放的是四个指针int (*p)[4]是数组指针,数组内存放的整形,而p指向该数组...

2018-01-21 08:57:51 2827

原创 顺序表的实现(头插,头删尾插,尾删)

顺序表,头插,尾插,头删,头插等的实现

2017-12-18 18:17:34 3146

原创 实现二分查找算法的递归及非递归

什么是二分法算法:二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一

2017-12-08 16:28:37 354

原创 斐波那契数列递归与非递归的实现

斐波那契数列的递归与非递归实现

2017-12-08 16:06:18 252

原创 指针数组 ,数组指针 ,函数指针 ,函数指针数组 ,指向函数指针数组的指针 的理解

数组是具有相同数据类型放在一起的集合,不相同的数据类型是结构体指针与数组无关系,指针是指针数组是数组指针数组:本质:数组,他是一个存放指针的数组;指针数组中的每一个元素均为指针,由于数组元素均为指针,因此arr[i]是指第i+1个元素的指针如:int *arr[i]是指针数组数组指针:本质:指针,他是指向数组地址的指针:指的是数组名的指针,即数组首元

2017-11-20 21:53:05 242

原创 C语言strlen函数的3种实现方法

strlen函数的实现:strlen的定义:它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值(长度不包含'\0')。方法一:(普通的实现方法)int my_strlen(const char *str){ int ret=0; while (*str) { ret++; s

2017-11-20 20:47:06 1441 1

原创 C语言 宏的使用 让一个数的二进制奇数位与偶数位互换

C语言 宏的使用 宏定义是预处理的一种,宏有操作符来表示一个字符串宏的格式为:#define 宏名 字符串define是预处理命令  #也是一条预处理命令,所有的预处理命令都是由 # 开头。1.宏定义必须写在函数外部,不能写在函数里,它的作用域为宏定义命令的起始到程序结束,如果要提前终止可使用 #undef 命令结束。2.宏定义的字符串只是一个简单的替换

2017-11-02 21:13:48 923

原创 c语言扫雷(递归算法)

本扫雷程序,由c语言编写,应用二维数组,递归算法,函数调用。三个文件综合而生成扫雷程序。game.h //文件#ifndef __GAME_h__#define __GAME_h__#define ROW 10#define LOW 10#define ROWS ROW+2#define LOWS LOW+2#define COUNT 10#inclu

2017-10-28 13:51:31 4384 1

原创 c语言操作符总结(基础)

1.算术操作符:+  : 加法  - :减法* :乘法/ :除法   %:取模   ——操作数必须为整型乘法、除法的操作数中两个都为整型则为整数除法,只要有一个操作数为浮点数则为浮点数除法。例如:3/2   3*2  为整数运算           3/2.0 或3.0/2 或3.0/2.0 都为浮点数运算2.移位操作符(移位操作符的对象为二进制序列)

2017-10-16 21:57:46 370

空空如也

空空如也

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

TA关注的人

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