自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 程序地址空间

我们在学习linux的时候,老师曾给我们画过这样的空间布局图。 由图我们并不能理解它所表达的意思,接下来用代码验证一下:代码结果:j结论:根据代码结果可知,当我们fork一个进程时,它的父子进程的地址以及数据都是相同的,因此我们可以的得出父子进程创建时共享代码段以及数据段。我们将代码稍加改动:结果如下:结论:从以上比较我们可以看出,代码改变之后他们的...

2018-12-17 13:18:04 287

原创 常见排序算法的整理

一直以来对排序算法没有深刻的理解,只能简单的代码编写,因此今天抽出一些时间对以前排序的不足加以修改。这里我们来探讨一下常用的比较排序算法,下表给出了常见比较排序算法的性能:稳定性的判别:如果说排序前两个相等的数位置是a,b,排序后两个数仍然是a,b,则说明这个排序是稳定的。通俗来讲就是说:排序前后两个相等的数相对位置不发生改变。冒泡排序:1.比较相邻的元素,如果前者大于后者,则...

2018-11-17 15:03:23 304 1

原创 解析const关键字的作用

一直以前被const和static所迷惑,每次都感觉自己知道,却每次被面试官问起时无话可说。希望以后的你我路路顺风!每次提及const我们都知道const可以修饰,并且被const修饰的不能更改,如果说我们每次这样回答面试官的问题,那么你就如我一样,可以回家了。const其实是contant的缩写,意思是不变的,永恒的,它的作用也就如它的字面意思一般。只要一个变量前面用const修饰,...

2018-11-15 17:23:51 1560 1

原创 解析static关键字的作用

在C语言中static的作用:1.)修饰局部变量:static修饰的静态局部变量只执行一次,而且延长了局部变量的生命周期,随程序的结束而结束。2.)修饰全局变量:被static修饰的全局变量只能在本文件中访问,不能再其它文件中访问。3.)修饰函数:修饰的函数只能在本文件中调用,不能被其它文件调用。static修饰的局部变量存放在全局数据区的静态变量区,初始化的时候自动初始化为0;...

2018-11-15 16:03:15 374 1

原创 Given a binary tree, determine if it is a valid binary search tree (BST).

思路:定义一个数组,按照中序输出的方式将值放入数组中,然后遍历比较,满足从小到大排列,则满足二叉搜索树。

2018-08-24 15:45:25 511

原创 c++日期类

没什么好说的,感觉除了日期加减之外,剩下的也就是函数模块#include<iostream>using namespace std;class Date{public: Date(int year = 2001, int month = 1,int day = 1) { _year = year; _month = month; _day = day;...

2018-08-21 09:50:05 262

原创 进程与线程的区别和联系以及优缺点

什么是线程?-在一个程序里的一个执行路线就叫做线程。更准确的定义是:线程是“一个进程内部的控制序列”。-一切进程至少都有一个执行线程-线程也被叫做轻量级进程什么是进程?-进程是程序的一个执行的实例。-进程是正在执行的程序。-进程是能分配处理器并由处理器执行的实体。进程和线程-进程是资源竞争的基本单位-线程是程序执行的最小单位联系:进程和线程都是操作系统所...

2018-08-19 21:59:10 2222

原创 模拟实现僵尸进程, 孤儿进程

僵尸进程什么是僵尸进程?-僵尸状态是一个比较特殊的状态。当进程退出并且父进程(使用wait()系统调用)没有读取到子进程退出的返回代码时就会产生僵尸进程。-僵尸进程会终止状态保持在进程表中,并且会一直在等待父进程读取退出状态代码。-所以,只要子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程进入Z状态。 1 #include<stdio.h> 2...

2018-08-17 22:37:25 241

原创 进程的调度算法以及task_struct结构各字段含义

首先,我们需要知道什么是进程?1.进程是程序的一个执行的实例。2.进程是正在执行的程序。3.进程是能分配处理器并由处理器执行的实体。按内核的观点来谈进程:它是担当分配系统资源(cpu时间,内存)的实体。-操作系统的调度分为三种:1.远程调度(创新进程)2.中程调度(交互功能的一部分)3.短程调度(下次执行哪个进程)-进程的三种状态:1.等待态:等待某个事件的...

2018-08-17 14:58:18 407

原创 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。

/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Sol...

2018-08-17 09:55:12 260

原创 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个节点并返回。

/*struct TreeLinkNode { int val; struct TreeLinkNode *left; struct TreeLinkNode *right; struct TreeLinkNode *next; TreeLinkNode(int x) :val(x), left(NULL), right(NULL), next(...

2018-08-17 09:52:21 1808

原创 封装fork/wait等操作, 编写函数 process_create

封装fork/wait等操作, 编写函数 process_create(pid_t* pid, void* func, void* arg), func回调函数就是子进程执行的入口函数, arg是传递给func回调函数的参数.  1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<unistd....

2018-08-15 16:46:06 270

原创 自主实现简单shell的编写

1.进程替换原理用fork创建子进程后执行的是父进程相同的程序,但实际期望中,我们希望子进程应该执行和父进程不同的代码。所以此时,子进程需要调用exec函数以执行另一个程序,当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,并从新的程序的启动例程开始执行。调用exec并不创建新进程,所以调用exec前后该进程的id并未改变。2.shell实现的功能我们打开一个终...

2018-08-15 15:43:03 876

原创 输入一个数组,判断该数组是不是二叉搜索树的后序遍历的结果。

解题思路:首先,我们应该对二叉搜索树有所了解。二叉搜索树:二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。本题是利用递归思想,判断根节点的左子树...

2018-08-15 11:41:19 1223

原创 操作给定的二叉树,将其变换为源二叉树的镜像

思路:首先,交换根节点的左右子树的位置,然后把左右子树的根节点作为下次循环的根节点,然后向下递归。

2018-08-14 11:10:33 826

原创 Given a linked list, determine if it has a cycle in it. Follow up: Can you solve it without using ex

题目为:Linked List CycleGiven a linked list, determine if it has a cycle in it.Follow up:Can you solve it without using extra space? 解法思想:算法思想就是设置一个快指针fp和一个慢指针sp,两个指针起始同时指向head节点,其中快指针每次走两步,慢指针...

2018-08-10 11:59:09 318

原创 数据结构——二叉树面试题(2)

#pragma once#include <stdlib.h>#include <stdio.h>#include <assert.h>typedef struct BSTreeNode { struct BSTreeNode * pLeft; // prev struct BSTreeNode * pRight; // next int d...

2018-08-07 15:21:16 885

原创 数据结构——二叉树面试题(1)

#pragma once#include <stdlib.h>#include <stdio.h>#include <assert.h>typedef char DataType;typedef struct BTreeNode { struct BTreeNode *pLeft; struct BTreeNode *pRight; D...

2018-08-07 15:20:10 206

原创 数据结构——堆

#pragma once#include <assert.h>#include <stdlib.h>#include <string.h>#include <stdio.h>typedef struct Heap { int array[100]; int size;} Heap;void HeapInit(Heap *pH...

2018-08-07 15:13:36 224

原创 数据结构——二叉树

#pragma once#include<stdio.h>#include<stdlib.h>#include<assert.h>#include<string.h>#include"Queue.h"typedef char DataType;typedef struct TreeNode{ struct TreeNode *ple...

2018-07-23 14:46:56 198

原创 数据结构——栈和队列及其面试题

1. 利用顺序表实现栈函数接口:typedef int SDataType;typedef struct Stack {SDataType array[100];int top;} Stack;// 初始化void StackInit(Stack *pStack);// 压栈void StackPush(Stack *pStack, SDataType data);// 出栈...

2018-07-10 16:37:46 255

原创 数据结构——栈

#pragma oncetypedef int SDataType;#include<stdio.h>#include<stdlib.h>#include<assert.h>typedef struct Stack { SDataType array[100]; int top;//表示个数} Stack;// 初始化 void Sta...

2018-06-29 22:46:47 174

原创 数据结构——链表面试题

#pragma once#include"slist.h"//从头到尾打印单链表void print_single(SListNode *pFirst){ assert(pFirst); SListNode *pNode = pFirst; SListNode *end = NULL; while (end != pFirst) { while (pNode->p...

2018-06-29 18:27:02 246

原创 数据结构——链表

#pragma once// 值类型 typedef int DataType;typedef struct SListNode { DataType data; // 值 struct SListNode *pNext; // 指向下一个结点 } SListNode;#include<stdio.h>#include<assert.h>#inc...

2018-06-29 18:07:22 203

原创 文件通讯录的实现

在写文件通讯录之前,大家应该对fread和fwrite函数有所了解,这篇博客有对fread和fwrite的介绍,希望大家在看文件通讯录之前了解一下:https://blog.csdn.net/cdatreides/article/details/80763141#ifndef __CONTACT_H__ #define __CONTACT_H__ #include <std...

2018-06-24 12:16:10 404

原创 研究 sscanf sprintf 2.研究 fread fwrite

1.sscanf函数     sscanf函数原型为int  sscanf(const char  *str,const  char *format,.........)     将参数str的字符串根据参数format字符串转换并格式化数据,转换后的结果存在对应的参数内。具体功能如下:(1)根据格式从字符串中提取数据。如从字符串中取出整数,浮点数和字符串等。(2)取指定长度的...

2018-06-22 17:42:09 215

原创 查找资料, 了解以下Linux下的重要目录/proc, /sys, /SElinux, /bin, /usr/lib, /usr/local, /var, /tmp

linux结构图如图所示:     1./proc    目录存放了进程和系统的消息,可以在这个目录下获取系统的信息,这些信息是在内存中,由系统自己产生的。这个目录是一个虚拟的目录,也就是说,这个目录的内容不在硬盘上而是在内存里。     2./sys    /sys目录是可写的,可以通过它来访问或修改内核的参数。它在proc的目录下,是一个设备管理的文件它整理了设备驱动相关文...

2018-06-17 10:52:25 252

原创 动态通讯录的实现

大家在编写动态通讯录之前,我希望大家能够了解malloc和realloc的用法:https://blog.csdn.net/cdatreides/article/details/80522095希望大家能够通过我的这篇博客了解malloc和realloc头文件:#ifndef __CONTACT_H__ //防止头文件的重复引用#define __CONTACT_H__#end...

2018-06-16 22:36:13 475

原创 静态数据表的实现

代码实现顺序表的操作函数// 值类型typedef int DataType;typedef struct SeqList {DataType data; // 值int size; // 数量} SeqList;// 初始化void SeqListInit(SeqList *pSL);// 尾部插入void SeqListPushBack(SeqList *pSL, Data...

2018-06-16 15:18:36 957

原创 了解以下重要命令. du, df, top, free, pstack, su, sudo(sudo -, sudo -s), adduser, password

1.du命令:[选项]文件    (1)功能该命令是显示指定文件以及下的所有文件占用系统数据块的情况,如果没有文件,默认是当前目录       -a   显示所有文件对系统数据块的使用情况       -b   显示数据块大小时以字节为基本单位       -c   除了显示文件对系统数据块的使用情况外还显示出文件的总和       -s   只显示文件数据块总大小,不显示文件...

2018-06-11 17:50:00 276

原创 进入目录需要哪些权限, 在目录中执行增删查(cd, touch, ls, rm, mv等)改文件动作, 需要哪些权限.

linux学习之前,有些指令是必须掌握的,今天我就为大家介绍几种常见的命令权限。1.cd大家请看上面代码,通过ll展示day01的权限,第一步我们看出无法进入day01目录,第二步添加w权限,仍然无法进入day01,第三步添加x指令,能够进入day01文件,因此我们发现x指令控制用户进入文件或目录2.touch接上面代码。我们可以看出,当我们去掉w指令时,无法创建文件,当添...

2018-06-10 19:22:15 217

原创 动态内存开辟 malloc calloc realloc free 函数

动态内存函数的介绍malloc和free1.void* malloc (size_t size)这个函数向内存申请一块连续可用的空间,并返回指向这块空间的指针。-如果开辟成功,则返回一个指向开辟好的空间指针。-如果开辟失败,则返回一个NULL指针,因此malloc的返回值一定要做检查。-返回值的类型是void*,所以malloc函数并不知道开辟空间的类型,具体在使用的时候使...

2018-05-31 12:16:00 249

原创 静态通讯录的实现

实现一个通讯录;通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址提供方法:1. 添加联系人信息2. 删除指定联系人信息3. 查找指定联系人信息4. 修改指定联系人信息5. 显示所有联系人信息6. 清空所有联系人7. 以名字排序所有联系人                    经过多次调试,代码初成:#ifndef CONTACT_...

2018-05-30 22:15:52 214

原创 自定义类型:结构体,枚举,联合

结构体类型的创建:结构体的声明:结构是一些值的集合,这些值称为成员变量,结构的每个成员可以是不同类型的变量。struct stu//stu结构体名称{ char name[20];//定义类型,没有创建空间 int age;};int main(){ struct stu s;//定义结构体变量,包含(name,age) system("pause"); retur...

2018-05-30 17:48:39 205

原创 回调函数的理解及qsort函数各种类型的排序

什么是回调函数?回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。接下来让我们运用qsort函数来加深对回调函数的理解; qsort是编译器函数库自带的快速排序函数。...

2018-05-24 19:33:31 800 5

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

1.函数指针什么是函数指针:是指针,有能力指向一个函数,既可以通过指针调用函数,亦可通过函数名直接表示。接下来我们看张图:在这里,你肯定会想函数名怎么会有地址,存在于哪里?接下来,我们看两段代码:(1). char *(*fun1)(char *p1,char *p2)(2).(2) char * *fun2(char p1,char p2)第一个看起来更像函数第一题看起来...

2018-05-23 22:05:05 203

原创 对指针数组 数组指针 函数指针 函数指针数组 指向函数指针数组的指针的简易理解

在介绍指针定义之前,首先声明一些概念:指针和数组无关:1.指针和数组是两种不同的类型。2.数组名不能整体赋值,数组名不能作为左值。数组名单独使用时代表整个数组,数组名在被取地址时,代表整个数组的地址。下来,我来介绍一些常见的指针名词:指针数组:是数组,是一个存放指针的数组。比如:int *arr[10].数组指针:是指针,有能力指向一个数组。比如:int (*p)[10];//...

2018-05-23 11:42:00 257

原创 C语言:有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student".

在做这个题之前,我们先对此分析:首先我们将字符串全都逆置:student a am i-->i ma a tneduts,然后我们在将每个单词逆置得到:i am a student.有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student".要求:不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)#inclu...

2018-05-18 17:28:15 183

原创 C语言:main函数参数的使用和指针数组的理解结合实例

对于main函数。我想不论什么一个接触到C语言的都不会陌生,可是说起main()函数有參数,你可能会产生非常多疑问了。 在这里,我们能够看到main()函数事实上是含有三个參数的,各自是int argc, char *argv[ ], char *envp[ ]这三个參数事实上就是main函数的參数。在c的编译器中。通常是同意main函数是没有參数的。1.argc (arg...

2018-05-17 20:40:53 416

原创 C语言:一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。 找出这两个数字,编程实现。

 #include<stdio.h>#include<windows.h>void reverse_twoNumber(int a[],int len){int res=0;int num=0;int num2=0;int k=0;int i=0;for(i=0;i<len ;i++)//找出两个数的异或{res^=a...

2018-05-17 18:43:06 288

空空如也

空空如也

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

TA关注的人

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