自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(114)
  • 资源 (24)
  • 问答 (4)
  • 收藏
  • 关注

原创 如何判断Linux是32位还是64位

如何判断Linux是32位还是64位方法一:getconf LONG_BIT在linux终端输入getconf LONG_BIT命令如果是32位机器,则结果为32[cpp]view plaincopy[root@localhost ~]# getconf LONG_BIT 32如果是64位机器,则结果为64[cpp]view plaincopy[root@l...

2017-11-05 19:05:32 67843 1

原创 链表及经典问题

链表及经典问题链表的基础知识链表的结构节点链状结构访问链表的时间复杂度几种经典的链表实现方法链表的典型应用场景经典面试题链表的访问链表的反转链表的节点删除链表的基础知识链表的结构节点数据域指针域链状结构通过指针域的值形成了一个线性结构访问链表的时间复杂度链表不适合快速的定位数据,适合动态的插入和删除数据的应用场景。查找节点 O(n)插入节点 O(1)删除节点 O(1)几种经典的链表实现方法传统方法 (节点 + 指针)使用数组模拟1)指针域与数据域分离2)利用数

2021-03-07 21:15:49 363

原创 用递归实现冒泡排序

用递归实现冒泡排序本文内容如标题所示,用递归实现冒泡排序,相信你对冒泡排序不陌生,也实现过,不知道你用递归实现过没?下面就看下其代码://用递归实现输出数组void output(int arr[], int n){ static int i = 1; if(i == n){ printf("%d\n",arr[n - 1]); //此处的i = 1不能省略,否则排序后第二次输出时,就会输出不全,自己可以试试. i = 1;

2020-11-19 10:24:25 7381

原创 快速排序及其优化和快速选择算法

快速排序及其优化和快速选择算法本文主要内容是快速排序的代码编写及其优化,还有快速选择算法(在无序的数中寻找第k大或小的元素)上代码:#include <iostream>#include <cstdio>#include <cstdlib>#include <queue>#include <stack>#include <algorithm>#include <string>#include &l

2020-11-16 15:54:35 289

原创 SBTree树实现

SBTree树实现SBTree与AVL树具有相同的概念,也具有相同的操作,类似自平衡,旋转操作和旋转触发。SBTree严格遵守下列公式,如有违反,则需要通过相应的转置操作来达到平衡.SIZE[right[t]]>=max(SIZE[left[left[t]]],SIZE[right[left[t]]]);SIZE[left[t]]>=max(SIZE[left[right[t]]],SIZE[right[right[t]]]);其中SIZE[t]表示t结点所在的子树个数,...

2020-11-12 10:31:05 380

原创 寻找二叉搜索树中给定节点的下一个节点

寻找二叉搜索树中给定节点的下一个节点题目:给定一个二叉搜索树,节点带有指向父节点的指针域,以中序遍历的方式排序该树,求给定节点的下一个节点。参考树:bool isLeftNode(TreeNode *node,TreeNode *parent){ return parent->left == node;}TreeNode *leftMostNode(TreeNode *node){ if(node == NULL) return NULL;

2020-11-04 21:49:32 381

原创 Path Sum

Path Sum题目:Get all the paths(always starts from the root) in a binary tree,whose sum would be equal to given value.void pathSumHelper(vector<int> &path,vector<vector<int>> &result,TreeNode *root,int sum){ if(root == NULL)

2020-10-30 16:16:23 129

原创 判断Tree2是否是Tree1的子树

判断Tree2是否是Tree1的子树题目:Tree1 and Tree2 are both binary trees nodes having value, determine if Tree2 is a subtree of tree1.bool matchTree(TreeNode *roo1,TreeNode *root2){ if(root1 == NULL && root2 == NULL) return true; if(root1 ==

2020-10-30 15:23:51 130

原创 如何判断一个树是否是二叉搜索树

如何判断一个树是否是二叉搜索树一个小技巧:可以同时传入最小/最大值,并且将初始值设为INT_MIN,INT_MAX,这样,其左子树所有节点的值必须在INT_MIN及根节点的值之间,其右子树所有节点的值必须在根节点的值以及INT_MAX之间。bool helper(TreeNode *root,int min,int max){ if(root == NULL) return true; if((root->val < max || (root->val ==

2020-10-30 15:00:28 595

原创 二叉树:判断一个树是否是平衡二叉树

判断一个树是否是平衡二叉树题目:给定一个二叉树,判断其是否是平衡二叉树。方法一:bool isBalancedTree(TreeNode* root){ if(root == NULL) return true; int Lh = getHeight(root->left); int Rh = getHeight(root->right); int h = Lh - Rh; if(h < -1 || h > 1)

2020-10-15 17:51:19 665

原创 栈和队列:用栈求解表达式的值

用栈求解给定表达式的值题目:求解给定表达式的值#include <iostream>#include <string>#include <stack>#include <stdlib.h>using namespace std;//栈外优先级 int icp(char c){ switch(c) { case'+':return 2; case'-':return 2; case'*':return

2020-09-18 15:25:32 293

原创 栈和队列:层序遍历二叉树

层序遍历二叉树题目:层序遍历二叉树。思路:用队列保存当前节点的非空子节点。void levelTravel(TreeNode *root){ if(root == NULL) { return; } queue<TreeNode*> q; q.push(root); while(!q.empty()) { root = q.front(); visit(root);

2020-09-17 10:45:44 257

原创 栈和队列:用栈实现二叉树的后序遍历

用栈实现二叉树的后序遍历题目:用栈实现二叉树的后序遍历//用两个栈,一个是辅助栈,一个用来存储结果void postOrder(TreeNode *root){ stack<TreeNode*> helper; stack<TreeNode*> output; if(root == NULL) return; while(root || !helper.empty()) { if(root)

2020-09-16 11:18:37 655

原创 栈和队列:二叉树的前序遍历

二叉树的前序遍历题目:用两种方式实现二叉树的前序遍历方法1:递归void preOrder(TreeNode *root){ if(root == NULL) return; visit(root); preOrder(root->left); preOrder(root->right);}方法2:用栈实现前序遍历vector<int> preOrder(TreeNode *root){ vecto

2020-09-14 16:21:29 686

原创 栈和队列:计算表达式

计算表达式题目:计算(4+5)*(7-2)思路:本文只介绍简单处理后的表达式,来简单的阐明栈在计算表达式中的应用,例如上面的表达式,要用栈的话,需要对表达式做转换,转成4 5 + 7 2 - *,然后利用栈做计算。int express(string input){ stack<int> st; int op1,op2; int i=0; while(i < input.size()) { if(input[i] =

2020-09-12 18:49:17 426

原创 栈和队列:中序遍历一个二叉树

中序遍历一个二叉树题目:两种方式遍历给定二叉树方法一:递归本方法代码很简单,可见算法的精髓就在于很巧妙的解决问题,并不需要很复杂的代码。void InOrder(TreeNode *root){ if(root == NULL) return; InOrder(root->left); visit(root); InOrder(root->right);}方法二:用stack临时存储前言:用stack解决Top-Dow

2020-09-11 17:40:34 234

原创 栈和队列:Validate Parenthesis

Validate Parenthesis前言:有一类问题有这样的特性:当前节点的解决依赖后驱节点。对于某个当前节点,如果不能获知后驱节点,就无法得到有意义的解。这类问题可以通过stack(或等同于stack的若干个临时变量)解决:先将当前节点入栈,然后看其后继节点的值,直到其依赖的所有节点都完备时,再从栈中弹出该节点求解。某些时候,甚至需要反复这个过程:将当前节点的计算结果再次入栈,直到其依赖的后继节点完备。看一个例子:Validate ParenthesisGiven

2020-09-10 22:31:57 84

原创 栈和队列:排序一个栈内的元素

排序一个栈内的元素题目:用一个额外的栈以升序的方式排序栈的元素,升序在这里指出栈的元素以升序排列。//整个思想类似于插入排序stack<int> sort(stack<int> &input){ stack<int> output; //非空 while(!input.empty()) { int val = input.top(); input.pop(); //不为空

2020-09-09 22:19:09 237

原创 栈和队列:用队列实现一个栈

用队列实现一个栈题目:用两个队列实现一个栈.思路:保持一个队列为空,一个队列有数据,插入数据时向有数的队列插,弹出数据时,将有数队列的最后一个留下,其余的挪动到空队列。class MyStack{ private: queue<int> q1; queue<int> q2; public: void push(int val); int pop();};//向不为空的队列插

2020-09-08 11:54:01 125

原创 栈和队列:用栈实现一个队列

用栈实现一个队列题目:用栈实现一个队列class QueueWithStack{ private: stack<int> input; stack<int> output; public: int pop(); void push(int);};void QueueWithStack::push(int value){ input.push(value);}int Queu

2020-09-07 21:12:42 141

原创 栈和队列:实现一个栈,O(1)时间复杂度获取栈内最大元素

实现一个栈,获取栈内最大元素题目:实现一个栈,使栈的Push、Pop Top和Max的时间复杂度为O(1),Max()将返回栈内最大的元素。思路:用两个栈,第一个是常规栈,第二个只存储到来的元素中比栈顶大的元素。复杂度分析:时间复杂度符合题目要求O(1)。空间复杂度最坏情况附加的stack中需要储存每个元素,故额外使用O(n)空间。class stackWithMax{ private: stack<int> valueStack;

2020-09-06 19:50:31 1314

原创 十大简单排序:基数排序

基数排序思想:先找出最大数,确定数据的位数,然后依次按个位数计数排序、十位数计数排序、百位数计数排序....直到按所有的位数排序。最后的结果就是排序好的数列。看一个示例:排序 123,211,321, 145按个位数排序:211,321,123,145按十位数排序:211,321,123,145按百位数排序:123,145,211,321上述示例是3位数的排序,我们看下比较通用的算法。void sort(int arr[],int len){ int max = ar

2020-09-05 10:43:43 218

原创 十大简单排序:桶排序

桶排序本次介绍的这个桶排序,用的比较少,下面分析其思想。思想:遍历数组,找到数组中的最大值和最小值,计算差值,然后选择桶的个数,有了差值和桶个数,进而可以确定每个桶的取值范围,之后再次遍历数组,将元素放入桶中,对每个桶内的元素排序,最后依次输出桶内值,如果桶用数组表示,那么数组的大小必须是原数组的大小,因为最坏情况下所有数在一个桶,这样的话,空间复杂度就高了,如果桶用链表的话,可以省空间,但是对桶内数据进行排序的时候,时间复杂度是O(N^2)。时间上又浪费,综上所述,省时间费空间,省空间费时间.所以

2020-09-04 18:18:26 278

原创 十大简单排序:计数排序

计数排序思想:用一个例子来说明计数排序的思想,对N个50-59之间的整数进行排序,N可能很大。虽然数据量很大,但是取值范围却很小,我们可以利用一个数组a[10],a[0].....a[9]对应50....59,也就是说,数据减去50作为数组的下标,例如56,那么对应的下标就是56-50=6,那么a[6]执行一次加1操作,代表出现了56这个数,对数组中的所有元素都是一个道理,最终a[0]的数值就是原数组中50的个数,同理a[1]...a[9]。最后遍历a[10]数组,输出相应的值即可。代码如下。in

2020-09-03 14:36:15 205

原创 十大简单排序:归并排序

归并排序思想:先把数组中的元素拆分成两部分,使这两部分都有序,然后再合并这两部分。其中拆分成的两部分,又可以继续拆分成两部分,如此递归下去,直到不能拆分。void merge(int arr[],int leftptr,int rightptr,int rightBound){ int mid = rightptr - 1; int i = leftptr; int j = rightptr; int k = 0; int *newArr = new in

2020-09-02 16:20:43 97

原创 fork和vfork那些事

fork和vfork那些事vfork:#include <stdio.h>#include <sched.h>#include <unistd.h>int data = 10;int child_process(){ printf("Child process %d, data1 %d\n",getpid(),data); data = 20; printf("Child process %d, data2 %d\n",getpid(),da

2020-09-01 16:59:00 88

原创 十大简单排序:快速排序

快速排序(分治思想)思想:选定一个元素做中轴,一般是数组最后一个元素,从两头遍历数组,左边比中轴大的元素和右边小于等于中轴的元素对换,当左游标大于等于右游标的时候,左游标处的值一定是大于中轴值的,将左游标处的值与末尾的中轴值交换,就完成了第一次的分割,接下来,对中轴两边的数组段再次进行上述相同的处理。最终就得到了排序好的数组。快速排序用了分而治之的思想,把大问题分割为小问题,小问题的求解方式与大问题是一样的,只是规模小,最终小问题的解集合起来就是大问题的解。int partition(int

2020-09-01 09:56:56 288

原创 十大排序:插入排序

插入排序及希尔排序插入排序的思想:插入排序的思想有点类似摸扑克牌,首先抽取第一张,当做已经排好序,然后第二张,插入到已经排好序的扑克牌中,依次类推,第三张...直到最后一张。void insertSort(int arr[],int len){ for(int i=1;i<len;i++) { //类似于倒着的冒泡排序 for(int j=0;j<i && arr[j] < arr[j-1];j++)

2020-08-31 17:46:46 112

原创 十大简单排序:冒泡排序

冒泡排序思想:从第一个位置开始,依次比较大小,若前面的值大,则将前值与后值交换,经过一轮的比较后,最大值就排在了末尾。由此而来,比较N轮,N是数组元素个数,那么整个数组就有序了。void swap(int arr[],int i,int j){ int tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp;}void BubbleSort(int arr[],int len){ for(int i=0;i<len;

2020-08-29 09:28:33 355

原创 十大简单排序:选择排序

选择排序思想:遍历一次数组,选择一个最小值,然后放到第一个位置,第二次遍历数组,再找到一个最小值,放入第二个位置,继续遍历数组,直到尾部,就把数组排好了。void swap(int arr[],int i,int j){ int tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp;}void selectionSort(int arr[],int len){ for(int i=0;i<len-1;i++)

2020-08-28 19:28:12 89

原创 链表--深度拷贝一个带有随机指针的链表

本文介绍两种解法。解法1:利用一个mapListNode *copyRandomList(ListNode *head){ if(head == NULL || head->next == NULL) return head; //定义一个map<ListNode*,ListNode*> hashMap用于存储旧节点和新节点的映射关系 map<ListNode*,ListNode*> hashMap; ..

2020-08-27 18:09:03 109

原创 链表--Reorder List

重排序一个链表Given a singly linked list L:L0->L1->...->Ln-1->Lnreorder it to :L0->Ln->L1->Ln-1->L2->Ln-2->...You must do this in-place without altering the node's values.Example:Given 1->2->3->4->null , reorder i

2020-08-27 16:31:29 161

原创 Linux进程--僵尸进程

僵尸进程和如何防止其产生。Zombie state: When a process is created in UNIX using fork() system call, the address space of the Parent process is replicated. If the parent process calls wait() system call, then the execution of parent is suspended until the child is te.

2020-08-26 17:01:21 190

原创 链表--逆序遍历链表

逆序遍历链表模式识别:如果对靠前节点的处理必须在靠后节点之后,即倒序访问问题,则用recursion(递归),或者等效地,stack来解决。例题:逆序遍历链表void traverse(ListNode *head){ if(head == NULL) return; traverse(head->next); visit(head);}...

2020-08-26 10:44:44 407

原创 链表--Merge Two  Sorted List

融合两个有序链表题目:Merge two sorted linked lists and return it as a new list.本文介绍两种方法.方法1:用递归ListNode *mergeTwoLists(ListNode *L1, ListNode *L2){ if(L1 == NULL) return L2; if(L2 == NULL) return L1; if(L1->val < L2->val)

2020-08-26 10:35:53 176

原创 链表--两个链表相加

两个链表相加题目:给定两个链表,链表中的每一个元素是一个整数,写一个函数返回一个新的链表,新链表是给定两个链表的和。例如:7->1->6 + 5->9->2 返回 2->1->9ListNode *sum(ListNode *L1, ListNode *L2){ if(L1 == NULL) return L2; if(L2 == NULL) return L1; int cn = 0; ListNode *d

2020-08-26 08:56:27 257

原创 链表--交换链表相邻的两个元素

交换链表相邻的两个元素题目:给定一个链表,交换每个相邻的元素,最后返回新的链表节点。ListNode *swapNodes(ListNode *head){ if(head == NULL || head->next == NULL) return head; ListNode *dummyNode = new ListNode(0); dummyNode->next = head; ListNode *tmpNode = dummy

2020-08-25 16:00:56 2645

原创 链表--两种方法逆序一个给定的链表

两种方法逆序一个给定的链表本文介绍两种实现链表逆序的方式,第一种是非递归的方式,第二种是递归的方式。方法一:非递归的方式ListNode *reverse(ListNode *head){ //为空或只有一个,直接返回即可 if(head == NULL || head->next == NULL) return head; ListNode *pre = NULL; while(head != NULL) {

2020-08-25 13:48:03 154

原创 链表--逆时针旋转一个链表

逆时针旋转一个链表题目:给定一个链表和一个位置k,k代表第几个元素。k位置之后的的元素逆时针旋转到前面,k位置之前的元素(包含k位置元素)旋转到后面。假定k小于链表的长度,如果k大于等于链表的长度,那么不对链表做改动。思路:先找到k位置处的节点,这个节点将是新链表的头,然后继续向后遍历链表找到尾部节点,使尾部节点指向原先链表的头节点。//因为要改变链表头,所以要传入头节点的引用void rotate(ListNode **head_ref,int k){ if(k <= 0)

2020-08-25 11:56:53 118

原创 链表--双指针--求链表倒数第k个元素

求链表倒数第k个元素思路:可以定义两个临时指针,一个快指针,一个慢指针,使快指针领先k步,然后慢指针再走,当快指针到末尾的时候,那么慢指针的位置就是倒数第k个指针了。ListNode *findKthtoLast(ListNode *head,int k){ if(head == NULL || k < 0) return head; ListNode *runner = head, *chaser = head; for(int i=0;i&lt

2020-08-25 11:02:38 194

基础算法+链表-队列-栈+面试必备+思维训练+编码能力训练

面试必备基础算法,涉及链表、队列、栈; 编码能力训练与算法思维训练的良好示例; 秋招选手的算法通关参考; 打算提高算法能力的职场小白修炼必备;

2023-08-07

stack_and_queue_with_max.cpp

本源码实现了两个类,一个是带有最大值的栈和一个是带有最大值的队列。栈利用了两个C++的stack,队列利用了C++的queue。

2020-08-27

yunsun.cpp

本源码利用栈实现了整数的加减乘除四则运算,支持多位数字的整数,支持括号。源码原理简单,重点是两个函数,一个函数是将中缀表达式转为后缀表达式,一个函数是对后缀表达式进行计算,求出结果。

2020-08-27

图片无失真放大.zip

本资源包含一个MyLabel.cpp和MyLabel.h,是一个继承自QLabel的自定义Label,实现的功能是使其上的图片可以无失真的缩放。

2020-05-13

QT实战项目-网络电子白板.zip

本资源是以PPT的形式讲述,附有源码,本项目是一步一步迭代完成,不仅适合初学者,对有一定QT基础的同学来说,也是提高QT实战技能的好选择。

2020-04-29

QT基础课程-共23节-详细讲述QT基础.zip

本教程是以PPT的形式讲述,且附有源码,对QT感兴趣的初学者很合适,快速入门QT的不二之选,用时18个小时。

2020-04-29

QT软键盘-支持中英切换.zip

本资源是一个QT实现的软键盘,共四个文件,很小巧,支持中文,支持界面换肤;支持字符字母转换、支持大小写

2020-04-29

程序员内功修炼-V1.0.pdf

本文档是由一入职鹅厂的大四学生整理而来的,整理了其四年的经验得失及所学,内含数据结构与算法,操作系统,计算机网络等计算机基础知识。

2020-04-05

Linux系统学习资料.ppt

本PPT适合Linux的初学者,内容如下: 1、Linux的登录模式 2、Linux主要目录及文件的说明 3、Linux常用的文件操作命令 4、VI的简单使用 6、Linux软件安装 感兴趣的来围观吧!

2020-03-25

嵌入式Linux工程师学习路线

嵌入式Linux工程师学习路线,本文档只是大概的描绘了学习的大框架,有志于从事嵌入式开发的人员可以看看。

2019-03-23

在线电子词典小项目

这是一个在线电子词典小项目,分为客户端和服务端,客户端可以查询单词,服务端操作文件将单词的意思通过网络传递给客户端显示。这是一个培训小项目。想练习网络编程,文件操作的同学可以下载参考。

2016-11-09

Linux下的网络配置

本文档详细介绍了Linux的网络配置,有命令行设置,有图形界面设置。 附有图片详解,欢迎下载。

2016-11-09

Wireshark抓包软件的使用

本文档详细介绍了抓包工具Wireshark的使用,初学者可以参考。

2016-11-09

memwatch-2.71源码(内存检测源码)

该源码是用来检测自己写的代码有哪些内存错误的,详细用法参考路径: http://blog.csdn.net/sessos

2016-11-07

Linux系统移植实验手册

本文档详细介绍了Linux系统移植的实验,主要有开发环境的搭建,u-boot的烧写,sd卡烧写u-boot,kernel的移植,网卡的移植,emmc的移植,根文件系统的制作。 该实验是基于三星exynos4412-fs4412开发板的,其他三星exynos4412系列开发板可以参考。

2016-11-07

BOOT与内核启动流程之图片详解

本资源详细讲解了Linux的U-boot及内核的启动流程。是图解,附注说明了代码在Linux内核源码中的位置。

2016-11-07

TCP_IP协议详解二

TCP_IP协议详解卷二

2016-11-07

UNIX高级环境编程

UNIX高级环境编程

2016-11-06

udp_chat聊天室

该资源是一个udp聊天室的服务端和客户端的实现。 也就是群聊。代码详细。

2016-11-06

ftp_server

该资源是一个简单的ftp服务器与客户端的实现,客户端可以列举出服务器中的文件,可以上传文件到服务器,可以从服务器上下载文件。

2016-11-06

Linux网络设备驱动开发

文档内有一个链接欸,通过该链接可以获取网络驱动开发视频资源。 该资源是我在网络上花30元钱买的。 欢迎需要的同学下载。

2016-11-04

Linux块设备驱动开发

该文档内有一个链接,通过该链接可以获取Linux块设备驱动的视频,这些视频存储在我的百度云盘中,这些视频是我花费30元钱从网络上购买的。 想学习Linux块设备驱动的同学或程序员适合下载。从事嵌入式的开发人员也适合学习下载。 欢迎下载学习。下载后请进行一下评价,谢谢。

2016-11-04

Exynos4412-fs4412开发板Linux驱动开发实例

这是一套基于Exynos4412-fs4412开发板的Linux驱动开发课程,该课程为期8天,本资源包括字符设备驱动开发实例,块设备驱动开发实例,虚拟网络设备开发实例,除此之外还包括每天的笔记。这是鄙人参加培训实训资料,值得下载,学习该资源可以掌握字符设备、块设备、虚拟网络设备驱动的开发框架。

2016-11-02

exynos4412-fs4412开发板Linux内核下的实验

该资源是一个关于三星exynos4412-fs4412开发板的一个实验资料。实验内容:1)在内核中添加定时器,在应用层中实现一个秒表定时器 2)按键key2按下后播放音乐1,按键Key3按下后音乐1停止播放 3)按键key4按下后播放音乐2,再按一次按键key4,音乐2停止播放 本实验中的驱动用分离思想实现,硬件信息在设备树文件中描述,设备树文件是exynos4412-fs4412.dts

2016-11-01

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

TA关注的人

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