c语言
文章平均质量分 75
helloworddm
这个作者很懒,什么都没留下…
展开
-
参数传递方式
参数传递方式教材上大都说有两种,一种是值传递,另一种是指针传递。而后者本质上依然是值传递。原创 2023-11-17 13:36:02 · 218 阅读 · 0 评论 -
JavaScript之QuickJs
JavaScript(简称“JS”) 是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。虽然它是作为开发Web页面的脚本语言而出名,但是它也被用到了很多非浏览器环境中,JavaScript 基于原型编程、多范式的动态脚本语言,并且支持面向对象、命令式、声明式、函数式编程范式。JavaScript和Java的区别在我刚开始学JavaScript的时候,总感觉Java和JavaScript差不多,所以就没怎么关注JavaScript,直到工作后才知道,两者没有啥关系。有说有,那就是JavaScrip原创 2021-08-02 14:39:40 · 1597 阅读 · 0 评论 -
Visual Studio快捷键介绍和高级玩法
既然使用IDE,我想更多的看重的是它的调试和定位功能。其他的快捷键需要自己慢慢探索。微软不太好的地方是vscode和studio的快捷方式不太一样。调试调试(启动):F5;调试(重新启动):使用组合键“Ctrl+Shift+F5”;调试(开始执行不调试):使用组合键“Ctrl+F5”;调试(逐语句,步入):F11;调试(逐过程,步过):F10;设置断点:F9。退出当前过程: Shift+F11编译: F7如果遇到库函数,想看看库函数的实现,怎么办? 举个例子memset函数,很常见的原创 2021-04-02 15:58:32 · 528 阅读 · 0 评论 -
elf格式原理介绍
基础机器执行的是机器指令,而机器指令就是一堆二进制的数字。高级语言编写的程序之所以可以在不同的机器上移植就因为有为不同机器设计的编译器的存在。高级语言的编译器就是把高级语言写的程序转换成某个机器能直接执行的二进制代码。以上的知识在我们学习CS(Computer Science)的初期,老师都会这么对我们讲。但是我就产生疑问了:既然机器都是执行的二进制代码,那么是不是说只要硬件相互兼容,不同操作系统下的可执行文件可以互相运行呢?答案肯定是不行。这就要谈到可执行文件的格式问题。每个操作系统都会有自己的可执行原创 2020-06-24 00:18:01 · 1170 阅读 · 0 评论 -
计算机最本质的功能-数据存储和计算
原码是什么?原码就是早期用来表示数字的一种方式: 一个正数,转换为二进制位就是这个正数的原码。负数的绝对值转换成二进制位然后在高位补1就是这个负数的原码举例说明:int类型的 3 的原码是 11B(B表示二进制位), 在32位机器上占四个字节,那么高位补零就得:00000000 00000000 00000000 00000011int类型的 -3 的绝对值的二进制位就是上面的 11B 展开后高位补零就得:10000000 00000000 00000000 00000011但是原码有几原创 2020-06-18 23:40:20 · 921 阅读 · 0 评论 -
C语言中 .h文件和.c文件的区别
要理解.c文件与.h文件有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程:1.预处理阶段2.词法与语法分析阶段3.编译阶段,首先编译成纯汇编语句,再将之汇编成跟CPU相关的二进制码,生成各个目标文件4.连接阶段,将各个目标文件中的各段代码进行绝对地址定位,生成跟特定平台相关的可执行文件,当然,最后还可以用objcopy生成纯二进制码,也就是去掉了文件格式信息...原创 2017-08-06 18:16:12 · 64928 阅读 · 3 评论 -
字符串的查找(1)
题目描述: 假设现在有这样一个问题:有一个文本串S和一个模式串P,要查找P在S中的位置。 解法一:蛮力解决 假设现在文本串S匹配呢到位置i,模式串P匹配到j位置,用蛮力匹配的思路,有: 1)如果当前字符串匹配成功,S[i] == P[j],则i++,j++,继续匹配下一个字符 2)如果匹配失败,S[i] != P[j],则令i = i-j+1,j =原创 2016-07-17 18:07:03 · 473 阅读 · 0 评论 -
动态规划(1)最大连续字数组乘积
问题描述: 给定一个浮点数数组,任意取出数组中的若干个连续的数相乘,请找出其中乘积最大的子数组。 动态规划: 概念:动态规划一般用来求解最优化问题,其适用的条件是要求待求解的最优化问题具备两个因素:最优子结构和子问题重叠。通过求解一个个最优子问题,将解存入一张表中,当后续子问题的求解需要用到之前子问题的解时直接查表,每次查表的代价为常数时间。 分析本题: 乘积子数组中可能有正数,负数,也可原创 2016-07-18 15:23:45 · 1625 阅读 · 0 评论 -
动态规划(2)字符串编辑距离
题目描述: 给定一个源串和目标串,能够对源串进行如下操作: 1)在任意位置插入一个字符 2)替换任意字符 3)删除任意字符 写一个程序,实现返回最小操作次数,使得对源串进行上述这些操作后等于目标串(源串和目标串的长度都小于2000),这就是字符串编辑距离问题: 百度百科定义: 编辑距离(Edit Distance),又称Leven原创 2016-07-19 08:57:03 · 595 阅读 · 0 评论 -
c语言链表初始化
#include<stdio.h>#include<stdlib.h>#include<malloc.h>typedef struct Node{ struct Node *pNext; int data;}NODE,*PNODE;PNODE init_list() { int len原创 2016-07-20 15:07:59 · 3318 阅读 · 3 评论 -
字符串的全排列与组合
题目描述: 输入一个字符串,打印出该字符串中字符的所有排列。 基本思路: 从字符串中选出一个字符作为排列的第一个字符,然后对剩余的字符进行全排列,如此递归,从而得到所有字符的全排列。以对字符”abc”进行全排列为例,可以按下述步骤执行: 将a固定在第一位,求后面bc的排列 将b固定在第一位,求后面ac的排列 将c固定在第一位,求后面ab的排列#in原创 2016-07-20 19:10:45 · 4383 阅读 · 0 评论 -
最近公共祖先(1)
最近公共祖先问题: 情况1:二叉树是个二叉查找树,且root和两个节点的值(a, b)已知。如果该二叉树是二叉查找树,那么求解LCA十分简单。基本思想为:从树根开始,该节点的值为t,如果t大于t1和t2,说明t1和t2都位于t的左侧,所以它们的共同祖先必定在t的左子树中,从t.left开始搜索;如果t小于t1和t2,说明t1和t2都位于t的右侧,那么从t.right开始搜索;如果t1<=t<= t原创 2016-07-14 15:04:22 · 304 阅读 · 0 评论 -
深入理解c语言的return
例(1)#include<stdio.h>#include<stdlib.h>int fun(){ int temp = 3; return temp;}int main(){ printf("%d\n",fun()); return 0;}运行结果如下: [root@localhost ~]# ./a.out 3 反汇编结果如下: (gdb)原创 2016-07-15 10:18:37 · 978 阅读 · 0 评论 -
出现次数超过一半的数
题目描述: 数组中有一个数出现的次数超过了数组长度的一半,找出这个数 各种思路: (1)排序,最容易想到的。如果某个数在数组中出现次数超过一半,那么在已经排序好的数组索引的n/2处就一定是要找的这个数。时间复杂度O(nlogn),快排 (2)散列表,空间复杂度O(n) (3)每次删除两个不同的树 (4)记录两个值。时间复杂度是O(n) 代码如下:#include原创 2016-07-16 23:53:38 · 649 阅读 · 0 评论 -
杨氏矩阵
行和列分别递增的矩阵有一个专有名词叫杨氏矩阵,是由剑桥大学数学家杨表在1900年提出的,而在这个矩阵的查找俗称杨氏矩阵的查找。 定位法:时间复杂度是O(m+n)#include<iostream>using namespace std;#define M 4#define N 4bool find(int a[][N],int value)//注意这里的参数传递,貌似只能这样写 int a原创 2016-07-16 20:40:08 · 491 阅读 · 0 评论 -
树(4)判断某个序列是否是二叉查找树的后序遍历结果
二叉搜索树: (1) 它或者是一棵空树; (2) 或者是具有下列性质的二叉树: <1> 若左子树不空,则左子树上所有结点的值均小于它的根结点的值; <2> 若右子树不空,则右子树上所有结点的值均大于它的根结点的值; <3> 左、右子树也分别为二查找序树 5 7 6 | 9 11 10|8 由后序遍历性质可知最后一个元素是根节点 然后根据搜索二叉树性质划分为: 根左子原创 2016-07-16 10:18:10 · 349 阅读 · 0 评论 -
红黑树
红黑树:一种特殊的二叉搜索树,满足如下性质: (1)根节点是黑的 (2)每个叶节点是黑的 (3)如果一个节点是红的,它的两个孩子节点是黑的 (4)每个节点要么是红的,要么是黑的 (5)对于任意节点而言,其到叶节点的每条路径到包含相同数目的黑节点原创 2016-07-11 08:33:06 · 330 阅读 · 0 评论 -
网易实习生笔试试题 求第K大的数
有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。 给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在。 代码如下:#include<stdio.h>#include<stdlib.h>#define swap(t,x,y) (t = (x),x = (y),y = (t))int partition(int *a,int lo,i原创 2016-07-22 15:29:34 · 743 阅读 · 0 评论 -
网易实习生笔试题:二叉树
题目描述: 有一棵二叉树,树上每个点标有权值,权值各不相同,请设计一个算法算出权值最大的叶节点到权值最小的叶节点的距离。二叉树每条边的距离为1,一个节点经过多少条边到达另一个节点为这两个节点之间的距离。 给定二叉树的根节点root,请返回所求距离。class Tree { void Inorder(TreeNode *root,vector<int>&v,int &small,int &原创 2016-07-23 09:00:59 · 453 阅读 · 0 评论 -
红黑树
作者:July 二零一一年一月九日本文参考: I、 The Art of Computer Programming Volume I II、 Introduction to Algorithms, Second Edition III、The Annotated STL Sources IV、 Wikipedia V、 Algorithms In C Third EditionVI转载 2016-07-11 09:29:50 · 319 阅读 · 0 评论 -
畅通工程(并查集)
首先在地图上给你若干个城镇,这些城镇都可以看作点,然后告诉你哪些对城镇之间是有道路直接相连的。最后要解决的是整幅图的连通性问题。比如随意给你两个点,让你判断它们是否连通,或者问你整幅图一共有几个连通分支,也就是被分成了几个互相独立的块。像畅通工程这题,问还需要修几条路,实质就是求有几个连通分支。如果是1个连通分支,说明整幅图上的点都连起来了,不用再修路了;如果是2个连通分支,则只要再修1条路,从两原创 2016-07-14 22:18:36 · 502 阅读 · 0 评论 -
最近公共祖先(2)
情况3:也是最普通的情况,二叉树是普通的二叉树,节点只有left/right,没有parent指针。 10 / / 6原创 2016-07-14 15:19:10 · 637 阅读 · 0 评论 -
哲学家就餐问题
信号量解决:伪代码:semaphore chopstick[5] = {1,1,1,1,1};semaphore room = 4;//房间4人void philosophere(int i){while (true){think();wait(room);wait(chopsticks[i]);//获取左手边筷子wait(chopsticks[(i+1原创 2016-06-18 21:27:15 · 928 阅读 · 0 评论 -
树(1)把二叉查找树转换成有序的双向链表
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不能创建任何新的结点,只调整指针的指向。10 / / 6 14 / / / / 4 8 12 16转换成双向链表 4=6=8=10=12=14=16。 基本思路:中序遍历 构造双向链表 c语言代码如下:#include<stdio.h>#include<stdlib.h原创 2016-07-15 16:32:39 · 585 阅读 · 0 评论 -
树(2)求二叉树结点最大距离
问题描述: 如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义”距离”为两节点之间边的个数。写一个程序求一棵二叉树中相距最远的两个节点之间的距离。 思路:相距最远的两个节点一定是两个叶子节点或者一个叶子节点到它的根节点 代码如下:#include<iostream>using namespace std;struct NODE{ NO原创 2016-07-15 21:24:19 · 409 阅读 · 0 评论 -
树(3)树的层次遍历
问题描述:输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。 例如输入 8 / / 6 10 / / / / 5 7 9 11 输出8 6 10 5 7 9 11。 代码如下:#include<iostream>#include<queue>using namespace std;struct bstNode{ bstNode原创 2016-07-16 09:27:14 · 507 阅读 · 0 评论 -
树(5)二叉树层次遍历的应用
#include "stdafx.h"#include <iostream>#include <fstream>#include <queue>#include <stack>#include <Windows.h>using namespace std;typedef struct _Node{ int data; struct _Node *left; st原创 2016-07-16 11:05:55 · 493 阅读 · 0 评论 -
有序数组的查找(个人感觉美到极致的一个算法)
对于包含n个元素的数组,整个查找过程大约要经过logn次比较。(二分查找算法) 代码如下: 非递归版本int BinarySearch(int array[],int n,int value){ int left = 0; int right = n-1; //如果上面这句是int right = n的话,则下面有两处需要改动 //while(left < r原创 2016-07-16 19:54:47 · 3643 阅读 · 2 评论 -
内核源码解读基础
module_init宏的定义第一段代码:typedef int (*initcall_t)(void);......#define __define_initcall(level,fn,id)\static initcall_t __initcall_##fn##id __attribute_used_ \__attribute__((__section__(".in原创 2016-03-16 19:13:30 · 477 阅读 · 0 评论