- 博客(121)
- 收藏
- 关注
原创 【数据结构】:快速排序(c++实现)
一、快速排序的定义快速排序(Quicksort)是对冒泡排序的一种改进。快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。二、排序算法原理设要排序的数组是A[0]…...
2019-08-04 20:09:54
965
原创 【数据结构】:归并排序(c++实现)
一、归并排序的定义归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。二、归并排序的原理第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列;第二步:设定两个指针,最初位置分别为两个已经排序序列的起...
2019-08-04 19:12:30
1554
原创 【数据结构】:堆排序(c++实现)
一、堆排序的定义堆排序是一种树形选择排序,在排序过程中可以把元素看成是一颗完全二叉树,每个节点都大(小)于它的两个子节点,当每个节点都大于等于它的两个子节点时,就称为大顶堆,也叫堆有序; 当每个节点都小于等于它的两个子节点时,就称为小顶堆。二、堆排序算法1.将长度为n的待排序的数组进行堆有序化构造成一个大顶堆2.将根节点与尾节点交换并输出此时的尾节点3.将剩余的n -1个节点重新进行堆...
2019-08-04 18:53:17
514
原创 【数据结构】:希尔排序(c++实现)
一、希尔排序的定义 希尔排序是直接插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。二、希尔排序的基本思想 先取一个小于n的整数...
2019-08-04 16:30:12
3997
5
原创 【数据结构】:排序算法总结
参考:《大话数据结构》一、排序算法分类1、插入排序类: 直接插入排序,希尔排序;2、选择排序类:简单选择排序,堆排序;3、交换排序类:冒泡排序,快速排序;4、归并排序二、排序算法的指标...
2019-08-03 20:53:00
375
原创 【数据结构】:直接插入排序(c++实现)
一、直接插入排序的定义直接插入排序是一种最简单的排序方法,其基本操作是将一条记录插入到已排好的有序表中,从而得到一个新的、记录数量增1的有序表。二、排序思想直接插入排序的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表。开始时有序表中只包含1个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,将它插入到有序表中的适当位置,使之成为新的有序表,重复n-1...
2019-08-03 20:40:59
591
原创 【数据结构】:简单选择排序(c++实现)
一、简单选择排序的定义 设所排序序列的记录个数为n。i取1,2,…,n-1,从所有n-i+1个记录(Ri,Ri+1,…,Rn)中找出排序码最小的记录,与第i个记录交换。执行n-1趟 后就完成了记录序列的排序。二、排序思想 在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换;然后在剩下的数中再找最小(或者最大)的与第2个位置的数交换,以此类推,知道...
2019-08-03 20:17:14
3885
原创 【数据结构】:冒泡排序(c++实现)
一、冒泡排序定义: 两两比较相邻记录的关键字,如果反序则交换,直到没有反序的纪录为止。二、冒泡排序原理比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。三、排序过程如需要排序的元素...
2019-08-01 20:29:02
602
原创 【数据结构】:七种排序算法
目录:1、冒泡排序2、简单选择排序3、直接插入排序4、希尔排序5、堆排序6、归并排序7、快速排序8、排序算法总结补充:排序的定义排序的稳定性内部排序与外部排序排序算法的性能从时间、空间、复杂度三个方面来衡量。时间性能:高效率的排序算法需要尽可能少的关键字比较次数和尽可能少的的记录移动次数;辅助空间:算法执行时所需要的辅助空间;复杂度:算法本身的复杂度。...
2019-08-01 20:00:40
212
原创 【leetcode】56 Merge Intervals 合并区间
题目:Given a collection of intervals, merge all overlapping intervals.Example 1:Input: [[1,3],[2,6],[8,10],[15,18]]Output: [[1,6],[8,10],[15,18]]Explanation: Since intervals [1,3] and [2,6] overla...
2019-07-31 23:10:26
277
原创 【c/c++】修改字符串的首元素为'/0'
题目来源:https://www.nowcoder.com/questionTerminal/6ba5e61f344a413ea37a429f3c065efb下列程序的输出?#include<stdio.h>#include<string.h>int main(void){ int n; char y[10] = "ntse"; char *x = ...
2019-07-25 21:14:11
519
原创 【C/C++】sizeof一个指向字符串的指针
题目:32位机器中,const char *p="welcome";求sizeof(p)=?答案:sizeof(p)=4,sizeof一个指向字符串的指针只返回一个指针的大小,32下即4个字节。
2019-07-25 20:36:35
1799
原创 【C++】有关inline函数的几点说明
1、使用inline关键字的函数不一定会被编译器在调用处展开,编译器有权忽略这个请求,比如:若此函数体太大,则不会把它作为内联函数展开的;2、定义在Class声明内的成员函数默认是inline函数;3、inlin函数的定义和声明必须在头文件中进行。...
2019-07-25 20:31:54
449
原创 【C++】std::stack容器
stack(堆栈) 实现了一个先进后出(FILO)的数据结构。头文件:#include <stack>基本方法:操作、比较和分配堆栈empty() 堆栈为空则返回真pop() 移除栈顶元素push() 在栈顶增加元素size() 返回栈中元素数目top() 返回栈顶元素...
2019-07-21 12:13:36
218
原创 【C++】std::deque容器
头文件 #include <deque>deque容器类与vector类似,支持随机访问和快速插入删除,它在容器中某一位置上的操作所花费的是线性时间。与vector不同的是,deque还支持从开始端插入数据:push_front()。构造函数:deque<Elem> c 创建一个空的dequedeque<Elem> c1(c2) 复制一个dequ...
2019-07-21 12:07:45
381
原创 【C++】std::queue容器
头文件:#include <queue>与stack 模板类很相似,queue 模板类也需要两个模板参数,一个是元素类型,一个容器类型,元素类型是必要的,容器类型是可选的,默认为deque 类型。定义queue 对象的示例代码如下:queue<int> q1;queue<double> q2;queue 的基本操作有:入队,如例:q.push(x)...
2019-07-21 12:03:51
595
原创 【C++】unordered_map与map区别
1、内部实现机理map: map内部实现了一个红黑树,该结构具有自动排序的功能,因此map内部的所有元素都是有序的,红黑树的每一个节点都代表着map的一个元素,因此,对于map进行的查找,删除,添加等一系列的操作都相当于是对红黑树进行这样的操作,故红黑树的效率决定了map的效率。unordered_map: unordered_map内部实现了一个哈希表,因此其元素的排列顺序是杂乱的,无序...
2019-07-21 11:55:08
314
原创 【C++】std::unordered_map容器
简述:对于map,其内部数据结构为红黑树,因此所有元素插入到map里面都会排好序,而且搜索过程为平衡二叉树搜索,因此时间复杂度为O(logN)。我们知道还有一种快速的搜索方法,那边是哈希(又名散列),利用哈希函数,通过哈希值能快速的查找到所需元素。unordered_map便是采用这种数据结构实现,其为无序映射,unordered _map与map的使用基本一样,都是key/value之间的映...
2019-07-21 11:52:17
7012
原创 【C++】std::map容器
map是C++的一种关联容器,包含键值对,提供了一对一的关系。1、构造函数map<string,int >mapstring; map<int,string>mapint;map<sring,char>mapstring;map<char,string>mapchar;map<char,int...
2019-07-21 11:35:25
209
原创 【C++】std::list容器
定义:List是stl实现的双向链表,与向量(vectors)相比, 它允许快速的插入和删除,但是随机访问却比较慢。使用时需要添加头文件list<int> lst1; //创建空listlist<int> lst2(5); //创建含有5个元素的listlist<int> lst3(3,2); //创建含有3个...
2019-07-21 11:22:19
615
原创 【C++】std::vector容器
定义:向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。特性:1.顺序序列顺序容器中的元素按照严格的线性顺序排序。可以通过元素在序列中的位置访问对应的元素。2.动态数组支持对序列中的任意元素进行快速直接访问,甚至可以通过指针算述进行该操作...
2019-07-21 11:15:02
532
原创 【leetcode】1 两数之和
题目:给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]整个实现...
2019-07-18 22:54:48
102
转载 【面试】C语言面试题二
转载自:https://blog.youkuaiyun.com/Xiao_peng117/article/details/766514441 大致描述一个进程在内存中的分布情况1)代码区:储存程序代码2)data段:已初始化的全局变量和static变量以及常量字符串。程序结束后自动释放3)bss段:未初始化的全局变量和static变量4)栈区:局部变量5)堆区:程序中动态分配的内存代码区d...
2019-07-05 19:21:55
177
转载 【面试】C++面试题一
转载自:https://www.jianshu.com/p/2de5b739178a 信号的生命周期? 信号产生-》信号在进程中注册-》信号在进程中的注销-》执行信号处理函数 信号的产生方式? (1)当用户按某些终端键时产生信号(2)硬件异常产生信号【内存非法访问】(3)软件异常产生信号【某一个条件达到时】(4)调用kill函数产生信号...
2019-07-05 16:59:59
611
转载 【面试】数据结构面试题二
转载自:https://www.cnblogs.com/fundebug/p/data_structures_in_js_for_interview.html代码面试需要知道的8种数据结构(附面试题及答案链接)1976 年,一个瑞士计算机科学家写一本书《Algorithms + Data Structures = Programs》。即:算法 + 数据结构 = 程序。40 多年过去了,这个等式...
2019-07-05 16:57:34
470
转载 【面试】数据结构面试题一
转载自:https://www.cnblogs.com/yuxiaoba/p/8646169.html1、数组和链表的区别。从逻辑结构上来看,数组必须实现定于固定的长度,不能适应数据动态增减的情况,即数组的大小一旦定义就不能改变。当数据增加是,可能超过原先定义的元素的个数;当数据减少时,造成内存浪费;链表动态进行存储分配,可以适应数据动态地增减的情况,且可以方便地插入、删除数据项。从内存存储...
2019-07-05 16:54:12
194
转载 【面试】Linux面试题二
1 、如何自动创建设备文件?class_create device_create2、led驱动编写有几种方式?输入子系统 字符设备驱动 总线platform led子系统3、如何实现http服务器?tcp服务器:socket4、如何编写守护进程,简述syslog的作用?第一步:创建进程、杀死父进程第二步:创建新的会话第三步:改变工作路径路径第四步:修改文件掩码权限第五步:关闭...
2019-07-05 16:51:16
256
转载 【面试】Linux面试题 一
转载自:https://www.jianshu.com/p/9eff04cbbc0f请问uboot启动过程都做了些什么?1、cpu刚开始初始化的时候,还未设置栈,所以先使用汇编代码,构建异常项链表,然后设置cpu为svc(特权)模式,同时关闭FIQ和IRQ(防止突发中断程序跑飞了)注:在跳转到内核之前,要满足CPU出在SVC模式下。2、对cp15协处理器进行设置,这里主要是关闭MMU和ca...
2019-07-05 16:47:25
232
转载 【面试】C语言面试100题
1、请填写bool , float, 指针变量 与“零值”比较的if语句。提示:这里“零值”可以是0, 0.0 , FALSE 或者“空指针”。例如int 变量n 与“零值”比较的if 语句为:if ( n == 0 )if ( n != 0 )以此类推。(1)请写出bool flag 与“零值”比较的if 语句:【标准答案】if ( flag ) if ( !f...
2019-07-05 16:38:06
6959
转载 【C编程】C语言编程100例
https://www.runoob.com/cprogramming/c-exercise-example1.html
2019-06-30 22:04:44
279
原创 【Linux 多进程】IPC之有名管道FIFO
命名管道也被称为FIFO文件,是一种特殊的文件。由于linux所有的事物都可以被视为文件,所以对命名管道的使用也就变得与文件操作非常统一。(1)创建命名管道用如下两个函数中的其中一个,可以创建命名管道。#include <sys/types.h>#include <sys/stat.h>int mkfifo(const char *filename, mo...
2019-06-29 10:33:14
190
原创 【Linux 多进程】IPC之无名管道
管道概念管道是一种最基本的IPC机制,作用于有血缘关系的进程之间,完成数据传递。调用pipe系统函数即可创建一个管道。有如下特质:1. 其本质是一个伪文件(实为内核缓冲区)2. 由两个文件描述符引用,一个表示读端,一个表示写端。3. 规定数据从管道的写端流入管道,从读端流出。管道的原理: 管道实为内核使用环形队列机制,借助内核缓冲区(4k)实现。管道的局限性:1.数据自己读不能自己...
2019-06-29 10:21:47
290
原创 【Linux驱动】第一个驱动程序hello.ko
1.hello.c文件 -- 驱动主程序#include <linux/init.h> #include <linux/module.h> #include <linux/kernel.h> //指定license版本MODULE_LICENSE("GPL"); //设...
2019-06-20 16:48:48
837
1
原创 【Linux】/proc文件系统
/proc文件系统是一种特殊的、由软件创建的文件系统,内核使用它向外界导出信息,/proc系统只存在内存当中,而不占用外存空间。/proc下面的每个文件都绑定于一个内核函数,用户读取文件时,该函数动态地生成文件的内容。也可以通过写/proc文件修改内核参数/proc目录下的文件分析 /proc/$pid 关于进程$pid的信息目录。每个进程在/proc 下有一个名为其进程号的目录。例:$...
2019-06-20 16:40:12
244
原创 【C编程】比较计数法排序
分析:定义结构体存储数据及最后的排序,对数组中的元素逐个排序比较并用结构体中的con变量记录元素大于其他元素的次数,次数越大,变量值越大。代码:#include<stdio.h>#define N 5struct order/*定义结构体用来存储数据及它的排序*/{ int num; int con;}a[20];/*定义结构体数组a*/void m...
2019-06-20 15:41:28
2652
2
原创 【C编程】循环移位
循环移位分为循环左移和循环右移。1、循环左移如图,将x的左端n位先放到z中的低n位中,由语句z>>(32-n)实现,将x左移n位,其右边的低n位补0,由y=x<<n实现,将y与z按位或运算,由语句y=y|z实现2、循环右移如图,将x的右端n位先放到z中的高n位中,由语句z<<(32-n)实现,将x左移n位,其右边的高n位补0,由y=x&g...
2019-06-20 15:17:47
10441
原创 【C编程】将输入的数左移两位
题目:将屏幕输入的数利用移位运算左移两位,并输出分析:左移运算符 << ,原则:高位丢弃,低位补0代码:#include<stdio.h>void main(){ int a; printf("请输入a:"); scanf("%d",&a); a=a<<2; /*左移两位*/ ...
2019-06-20 15:00:58
3076
原创 【C编程】使二进制数特定位反转
题目:在屏幕输入一个数,使得其第四位反转分析:要使哪几位翻转,就将其进行异或运算的数的该位置设置为1即可。代码:#include<stdio.h>void main(){ unsigned result; /*定义无符号数*/ int a, b; printf("请输入a:"); scanf("%d",&a); /*输入...
2019-06-20 14:54:39
2046
原创 【Linux 多线程】自旋锁与互斥锁区别
POSIX threads(简称Pthreads)是在多核平台上进行并行编程的一套API。线程同步是并行编程中非常重要的通讯手段,其中最典型的应用就是用Pthreads提供的锁机制(lock)来对多个线程之间的共享临界区(Critical Section)进行保护(另一种常用的同步机制是barrier)。Pthreads提供了多种锁机制:Mutex(互斥量):pthread_mutex_t...
2019-06-20 11:29:47
5536
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人