
C与C++语言精选
文章平均质量分 73
正义飞
大数据专业分享技术公众号:bigdatatip
展开
-
线性链表的逻辑结构
线性表是最简单、最基本、也是最常用的一种线性结构。它有两种存储方法:顺序存储和链式存储,它的主要基本操作是插入、删除和检索等。2.1.1 线性表的定义线性表是一种线性结构。线性结构的特点是数据元素之间是一种线性关系,数据元素“一个接一个的排列”。在一个线性表中数据元素的类型是相同的,或者说线性表是由同一类型的数据元素构成的线性结构。在实际问题中线性表的例子是很多的,如学生情况信息表转载 2013-11-18 20:02:30 · 2636 阅读 · 0 评论 -
main函数带参数
这个是带参数的main,你要在控制台下边,输入生成的可执行文件,然后在后边输入参数或建个快捷,在快捷上添加参数也可以!的函数的参数用来在函数调用时,往被调用函数传递数据,而main函数在C程序中,不被任何函数所调用,那main函数的参数从何处得到数据呢?每一个C程序的执行都是在系统的支持下进行的,main函数是系统执行相就的程序得到“调用”,从系统命令行中得到相应的参数。main函数有两个原创 2013-11-19 15:42:05 · 1065 阅读 · 0 评论 -
用C语言描述女人
有的女人就像Windows 虽然很优秀,但是安全隐患太大有的女人就像UNIX 她条件很好,然而不是谁都能玩的起有的女人就像C# 长的很漂亮,但是家务活不行。有的女人就像C++,她会默默的为你做很多的事情。 有的女人就像JAVA,只需一点付出她就会为你到处服务。 有的女人就像JAVA script,虽然对她处处小心但最终还是没有结果。 有的女人就像汇编 虽然很麻烦,但是有的原创 2013-11-20 11:04:14 · 1378 阅读 · 0 评论 -
静态查找
顺序表的查找 记录的逻辑顺序与其在计算机存贮器中存储顺序一致的表,称为顺序表。顺序查找的基本思想: 从表的一端开始,顺序扫描线性表,依次将扫描到的结点关键宇和给定值K相比较。若当前扫描到的结点关键字与K相等,则查找成功;若扫描结束后,仍未找到关键字等于K的结点,则查找失败。a(1)类型说明int maxsize = 100 ; //数据表的最大长度typ转载 2013-11-23 01:35:26 · 1033 阅读 · 0 评论 -
linux进程之间通讯常用信号
1)SIGHUP 本信号在用户终端连接(正常或非正常)结束时发出, 通常是在终端的控 制进程结束时, 通知同一session内的各个作业, 这时它们与控制终端 不再关联. 2)SIGINT 程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl-C)时发出 3)SIGQUIT 和SIGINT类似, 但由QUIT字符(通常是Ctrl-\)来控制. 进程在因收到 SI原创 2013-11-23 01:36:59 · 1056 阅读 · 0 评论 -
查找的基本概念
查找的基本概念 1.定义 简单地说,查找 (Search) 就是确定一个已给的数据是否出现在某个数据元素集合中。 查找(Searching)的定义是:给定一个值K,在含有n个结点的表中找出关键字等于给定值K的结点。若找到,则查找成功,返回该结点的信息或该结点在表中的位置;否则查找失败,返回相关的指示信息。2.查找的结果 一种是查到该记录,即查找成功,此时查找的结果为给出整转载 2013-11-23 01:36:02 · 1219 阅读 · 0 评论 -
创建一个论坛注意事项
建设论坛运营论坛的一些注意事项: 一。明确论坛定位 首先在我们有念头想创建一个论坛的时候,那么我们要对论坛进行定位,应该说所有成功的网站,比如百度,好123网址导航,我们经常使用的YY工具,一个好的论坛也是一样,先想好定位,分析我们所定位的领域竞争情况,结合自身的实际情况,做好定位一般地域性某一个领域相对容易发展一些。 二。好定位配合好转载 2014-01-03 12:52:39 · 1360 阅读 · 0 评论 -
fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "stdafx.h
错误描述:fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "stdafx.h"”?错误分析: 此错误发生的原因是编译器在寻找预编译指示头文件(默认#include "stdafx.h")时,文件未预期结束。没有找到预编译指示信息的头文件"stdafx.h"。 (因为工程中的每个cpp文件属性默转载 2013-12-20 23:32:08 · 755 阅读 · 0 评论 -
数据结构之图
图(graph)是一种比线性表、树更为复杂的数据结构。在线性表中,数据元素之间呈线性关系,即每个元素只有一个直接前驱和一个直接后继。在树型结构中,数据元素之间有明显的的层次关系,即每个结点只有一个直接前驱,但可有多个直接后继,而在图结构中,每个结点即可有多个直接前驱,也可有多个直接后继,因此,树结构是图结构的一种特殊情形。当一个树结构中允许同一结点出现在不同分支上时,该树结构实际上就是一个图结构。原创 2014-01-12 01:22:23 · 1673 阅读 · 1 评论 -
C++编译器与链接器工作原理
要明白的几个概念: 1、编译:编译器对源文件进行编译,就是把源文件中的文本形式存在的源代码翻译成机器语言形式的目标文件的过程,在这个过程中,编译器会进行一系列的语法检查。如果编译通过,就会把对应的CPP转换成OBJ文件。 2、编译单元:根据C++标准,每一个CPP文件就是一个编译单元。每个编译单元之间是相互独立并且互相不可知。 3、目标文件:由编译所生成的转载 2014-04-17 11:41:59 · 768 阅读 · 0 评论 -
程序的四种错误
程序四种错误需要区分开来: 编译错误, 链接错误, 运行错误, 逻辑错误 编译错误, 就是语法错误, 比如句尾没有分号, 宏, 关键字重定义等等 链接错误, 程序本身一般(注意是一般)没有什么问题. 比如引用的外部变量, 函数等等没有定义或者重复定义. 比如申明了函数, 类, 类成员, 但是没有实现. 都会导致链接错误. 编译错误是由编译器原创 2013-11-23 01:36:19 · 3300 阅读 · 1 评论 -
可重入和不可重入
重入一般可以理解为一个函数在同时多次调用,例如操作系统在进程调度过程中,或者单片机、处理器等的中断的时候会发生重入的现象。一般浮点运算都是由专门的硬件来完成,举个例子假设有个硬件寄存器名字叫做FLOAT,用来计算和存放浮点数的中间运算结果假设有这么个函数void fun(){//...这个函数对FLOAT寄存器进行操作}假如第一次执行,有个对浮点数操作运算的结果临时存在FLOAT寄存转载 2014-05-15 11:15:48 · 763 阅读 · 0 评论 -
KMP算法
KMP算法 在介绍KMP算法之前,先介绍一下BF算法。一.BF算法 BF算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串P的第一个字符进行匹配,若相等,则继续比较S的第二个字符和P的第二个字符;若不相等,则比较S的第二个字符和P的第一个字符,依次比较下去,直到得出最后的匹配结果。 举例说明: S: ababcababa转载 2014-05-28 11:19:01 · 735 阅读 · 0 评论 -
赫夫曼编码的应用
2,哈夫曼编码的应用2.1设计要求 本设计要求是对输入的一串电文字符实现赫夫曼编码,再对赫夫曼生成的代码串进行译码,输出电文字符串。2.2设计分析利用赫夫曼树求得的用于通信的二进制编码称为赫夫曼编码。树中从根到每个叶子都有一条路径,对路径上的各分支约定:指向左子树的分支表示“0”码,指向右子树的分支表示“1”码,取每条路径上的“0”或“1”的序列作为和各个叶子转载 2014-05-28 14:55:42 · 3404 阅读 · 0 评论 -
哈夫曼树和哈夫曼树编码
在一般的数据结构的书中,树的那章后面,著者一般都会介绍一下哈夫曼(HUFFMAN)树和哈夫曼编码。哈夫曼编码是哈夫曼树的一个应用。哈夫曼编码应用广泛,如JPEG中就应用了哈夫曼编码。 首先介绍什么是哈夫曼树。哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的 路径长度(若根结点为0层,叶结点到根结转载 2014-05-28 14:50:01 · 2310 阅读 · 1 评论 -
结构体自身字节对齐
在用sizeof运算符求算某结构体所占空间时,并不是简单地将结构体中所有元素各自占的空间相加,这里涉及到内存字节对齐的问题。从理论上讲,对于任何变量的访问都可以从任何地址开始访问,但是事实上不是如此,实际上访问特定类型的变量只能在特定的地址访问,这就需要各个变量在空间上按一定的规则排列,而不是简单地顺序排列,这就是内存对齐。 内存对齐的原因: 1)某些平台只能在转载 2014-09-08 11:25:44 · 852 阅读 · 0 评论 -
最小生成树(普利姆算法、克鲁斯卡尔算法)
算法给定一个带权的无向连通图,如何选取一棵生成树,使树上所有边上权的总和为最小,这叫最小生成树.求最小生成树的算法(1) 克鲁斯卡尔算法图的存贮结构采用边集数组,且权值相等的边在数组中排列次序可以是任意的.该方法对于边相对比较多的不是很实用,浪费时间.(2) 普里姆算法图的存贮结构采用邻接矩阵.此方法是按各个顶点连通的步骤进行,需要用一个顶点集合,开始为空集,以后将以连转载 2015-04-20 10:34:37 · 735 阅读 · 0 评论 -
银行家算法
我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。为保证资金的安全,银行家规定:(1) 当一个顾客对资金的最大需求量不超过银行家现有的资金时就可接纳该顾客;(2) 顾客可以分期贷款,但贷款的总数不能超过最大需求量;(3) 当银行家现有的资金不能满足顾客尚需的贷款数额时,对顾客的贷款可推迟支付,但总能使顾客在有转载 2015-04-09 16:52:41 · 825 阅读 · 0 评论 -
插入排序
直接插入排序 1.定义 直接插入排序( straight insertion sort )是一种最简单的排序方法。它的基本操作是将一个记录插入到一个长度为 m (假设)的有序表中,使之仍保持有序,从而得到一个新的长度为 m + 1 的有序表。2.算法思路 设有一组关键字{ K 1 , K 2 ,…, K n };排序开始就认为 K 1 是一个有序序列;让 K 2 插入上述表转载 2013-11-18 20:53:43 · 857 阅读 · 0 评论 -
静态链表
以前学习的各种链表都是由指针实现的,链表中结点的分配和回收(即释放)都是由系统提供的标准函数malloc和free动态实现的,故称之为动态链表。但是有的高级语言,如BASIC、FORTRAN等,没有提供”指针”这种数据类型,此时若想采用链表做存储结构,就必须使用”游标”来模拟指针,由程序员自己编写”分配结点”和”回收结点”的过程。 用游标实现链表,其方法是:定义一个较大的结构数组作为备用转载 2013-11-18 19:54:28 · 890 阅读 · 0 评论 -
c语言之栈
栈的定义及其运算1、栈的定义 堆栈(Stack)可以看成是一种“特殊的”线性表,这种线性表上的插入和删除运算限定在表的某一端进行的。 (1)通常称插入、删除的这一端为栈顶(Top),另一端称为栈底(Bottom)。 (2)当表中没有元素时称为空栈。 (3)栈为后进先出(Last In First Out)的线性表,简称为LIFO表。 栈的修改是按后转载 2013-11-18 20:20:46 · 1542 阅读 · 0 评论 -
C语言之队列
队列的定义及其运算1、定义 队列(Queue)是只允许在一端进行插入,而在另一端进行删除的运算受限的线性表。 (1)允许删除的一端称为队头(Front)。 (2)允许插入的一端称为队尾(Rear)。 (3)当队列中没有元素时称为空队列。 (4)队列亦称作先进先出(First In First Out)的线性表,简称为FIFO表。转载 2013-11-18 20:26:14 · 1419 阅读 · 0 评论 -
C语言之树
树 树型结构是以分支关系定义的层次结构,它是一种重要的非线性结构。 树形结构在客观世界中广泛存在,例如人类的家庭族谱以及各种社会组织机构都可以用树形结构来表示,又如在计算机文件管理和信息组织方面也用到树形结构。树的概念 树( tree )是由一个或多个结点组成的有限集合 T 。 其中:( 1 )一个特定的结点称为该树的根( root )结点 ; ( 2 )结点之转载 2013-11-18 20:30:53 · 1647 阅读 · 0 评论 -
树的存储结构
树的存储结构 树的存贮结构有多种表示方法,比较典型的乃是顺序结构和链表结构两类。 顺序存贮结构即向量,一般将树结点按自上而下,自左至右的顺序一一存放。如前文所介绍的完全二叉树就可以采用顺序存贮结构。1.双亲链表表示法 顺序存储结构常用的有双亲表示法,这种方法在每个数组元素中存放某个结点信息和该结点的双亲下标值。(1)双亲链表表示法的实现 方法① 用动态链表实转载 2013-11-18 20:49:15 · 1660 阅读 · 0 评论 -
交换排序
交换排序 交换排序主要是根据记录的关键字的大小,将记录交换来进行排序的。交换排序的特点是:将关键字值较大的记录向序列的后部移动,关键字较小的记录向前移动。这里介绍两种交换排序方法,它们是冒泡排序和快速排序。冒泡排序 将被排序的记录数组R[1..n]垂直排列,每个记录R[i]看作是重量为R[i].key的气泡。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R:凡扫描到违反转载 2013-11-18 20:59:47 · 1131 阅读 · 0 评论 -
单链表
单链表 为了将存储表元素的所有单元用指针串联起来,我们让每个单元包含一个元素域和一个指针域,其中的指针指向表中下一个元素所在的单元。例如,如果表是a1,a2,…,an ,那么含有元素ai的那个单元中的指针应指向含有元素ai+1的单元(i=1,2,…,n-1)。含有an的那个单元中的指针是空指针null。此外,通常我们还为每一个表设置一个表头单元head,其中的指针指向开始元素中所在的单元,但转载 2013-11-18 19:42:53 · 1050 阅读 · 0 评论 -
双向链表
以上讨论的单链表的结点中只有一个指向其后继结点的指针域next,因此若已知某结点的指针为p,其后继结点的指针则为p->next ,而找其前驱则只能从该链表的头指针开始,顺着各结点的next 域进行,也就是说找后继的时间性能是O(1),找前驱的时间性能是O(n),如果也希望找前驱的时间性能达到O(1),则只能付出空间的代价:每个结点再加一个指向前驱的指针域,结点的结构为如图2.18 所示,用这种转载 2013-11-18 20:10:37 · 1527 阅读 · 0 评论 -
二叉树的定义与性质
二叉树的定义 二叉树是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树的形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。 二叉树(BinaryTree)是n(n≥0)个结点的有限集,它或者是空集(n=0),或者由一个根结点及两棵互不相交的、分别称作这个根的左子树和右子树的二叉树组成。 这个定义是转载 2013-11-18 20:33:56 · 1357 阅读 · 0 评论 -
二叉树的遍历
二叉树的遍历对于二叉树来讲最主要、最基本的运算是遍历。 遍历二叉树 是指以一定的次序访问二叉树中的每个结点,并且每个结点仅被访问一次见图 6.8 。所谓 访问结点 是指对结点进行各种操作的简称。例如,查询结点数据域的内容,或输出它的值,或找出结点位置,或是执行对结点的其他操作。遍历二叉树的过程实质是把二叉树的结点进行线性排列的过程。假设遍历二叉树时访问结点的操作就是输出结点数据域的值,那转载 2013-11-18 20:37:50 · 1065 阅读 · 0 评论 -
线索二叉树
线索二叉树 定义: n个结点的二叉链表中含有n+1个空指针域。利用二叉链表中的空指针域,存放指向结点在某种遍历次序下的前趋和后继结点的指针(这种附加的指针称为"线索")。 这种加上了线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树(Threaded BinaryTree)。根据线索性质的不同,线索二叉树可分为前序线索二叉树、中序线索二叉树和后序线索二叉树三种。转载 2013-11-18 20:43:55 · 1068 阅读 · 0 评论 -
排序的基本概念
排序的基本概念 所谓排序,就是要整理文件中的记录,使之按关键字递增(或递减)次序排列起来。其确切定义如下: 输入:n个记录R1,R2,…,Rn,其相应的关键字分别为K1,K2,…,Kn。 输出:Ril,Ri2,…,Rin,使得Ki1≤Ki2≤…≤Kin。(或Ki1≥Ki2≥…≥Kin)。(1)排序的分类1.按是否涉及数据的内、外存交换分 在排序过程转载 2013-11-18 20:52:30 · 1225 阅读 · 0 评论 -
选择排序
选择排序排序 选择排序(Selection Sort)的基本思想是:每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的子文件的最后,直到全部记录排序完毕。 常用的选择排序方法有简单选择排序和堆排序。简单选择排序 简单选择排序(simple selection sort)也是直接选择排序。此方法在一些高级语言课程中做过介绍,是一种较为容易理解的方法。1.算转载 2013-11-18 21:02:03 · 1006 阅读 · 0 评论 -
归并排序
归并排序 归并排序 (merge sort) 是一类与插入排序、交换排序、选择排序不同的另一种排序方法。归并的含义是将两个或两个以上的有序表合并成一个新的有序表。归并排序有多路归并排序、两路归并排序 , 可用于内排序,也可以用于外排序。这里仅对内排序的两路归并方法进行讨论。 1.两路归并排序算法思路①把 n 个记录看成 n 个长度为 l 的有序子表;②进行两两归并使记录关键字有转载 2013-11-18 21:02:52 · 874 阅读 · 0 评论 -
顺序表
顺序表的定义 用把线性表的结点按逻辑次序依次存放在一组地址连续的存储单元里的方法存储的线性表简称为顺序表。 顺序表是用向量实现的线性表,向量的下标可以看作结点的相对地址。因此顺序表的的特点是逻辑上相邻的结点其物理位置亦相邻。顺序表存储结构 在计算机内,可以用不同的方法来存储数据信息,最常用的方法是顺序存储。顺序存储结构也称为向量存储。 假设每个元素占用的空转载 2013-11-18 19:32:04 · 1408 阅读 · 0 评论 -
顺序表与链表的比较
在本章介绍了线性表的逻辑结构及它的两种存储结构:顺序表和链表。通过对它们的讨论可知它们各有优缺点,顺序存储有三个优点:(1) 方法简单,各种高级语言中都有数组,容易实现。(2) 不用为表示结点间的逻辑关系而增加额外的存储开销。(3) 顺序表具有按元素序号随机访问的特点。但它也有两个缺点:(1) 在顺序表中做插入删除操作时,平均移动大约表中一半的元素,因此对n较大的顺转载 2013-11-18 19:45:29 · 2167 阅读 · 0 评论 -
顺序表的应用举例
例2.1 将顺序表(a1,a2,... ,an) 重新排列为以a1 为界的两部分:a1 前面的值均比a1 小,a1 后面的值都比a1 大(这里假设数据元素的类型具有可比性, 不妨设为整型),操作前后如图2.5所示。这一操作称为划分。a1 也称为基准。划分的方法有多种,下面介绍的划分算法其思路简单,性能较差。基本思路:从第二个元素开始到最后一个元素,逐一向后扫描:(1)当前数转载 2013-11-18 19:48:46 · 4137 阅读 · 1 评论 -
单链表的应用举例
例2.5 已知单链表H,写一算法将其倒置。即实现如图2.22的操作。(a)为倒置前,(b)为倒置后。算法思路:依次取原链表中的每个结点,将其作为第一个结点插入到新链表中去,指针p用来指向当前结点,p为空时结束。算法如下:void reverse (Linklist H){ LNode *p;p=H->next; /*p指向第一个数据结点*/H->next=NULL;转载 2013-11-18 19:50:04 · 3790 阅读 · 0 评论 -
嵌入式C常见笔试题:字符串
一.strcat、strcpy、strcmp、strlen函数的实现1实现strcat函数格式:extern char *strcat(char *dest,char *src);功能:把src所指字符串添加到dest结尾处并添加'\0';返回:指向dest的指针。实现:char *Mystrcat(char*dest,con转载 2015-06-12 22:13:01 · 839 阅读 · 0 评论