指针变量

常用算法(冒泡、插入、选择、快速)和二叉树详解

浪子不回头ぞ 提交于 2020-04-08 13:59:31
  同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。   计算机科学中,算法的 时间复杂度 是一个函数,它定量描述了该算法的运行时间。这是一个关于代表算法输入值的字符串的长度的函数。时间复杂度常用大O符号(Order)表述,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是渐近的,它考察当输入值大小趋近无穷时的情况。 定义   在计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。这是一个关于代表算法输入值的字符串的长度的函数。时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。 算法复杂度   算法复杂度分为时间复杂度和空间复杂度。其作用: 时间复杂度是指执行算法所需要的计算工作量;而空间复杂度是指执行这个算法所需要的内存空间。(算法的复杂性体现在运行该算法时的计算机所需资源的多少上,计算机资源最重要的是时间和空间(即寄存器)资源,因此复杂度分为时间和空间复杂度)。 时间复杂度   1. 一般情况下,算法的基本操作重复执行的次数是模块n的某一个函数f(n),因此,算法的时间复杂度记做:T(n)=O(f(n)) 分析:随着模块n的增大,算法执行的时间的增长率和 f(n) 的增长率成正比,所以 f(n) 越小,算法的时间复杂度越低,算法的效率越高。   2.

深入malloc() 和free()

拟墨画扇 提交于 2020-04-07 13:17:49
一、malloc()和free()的基本概念以及基本用法: 1、函数原型及说明: void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针。如果分配失败,则返回一个空指针(NULL)。 关于分配失败的原因,应该有多种,比如说空间不足就是一种。 void free(void *FirstByte): 该函数是将之前用malloc分配的空间还给程序或者是操作系统,也就是释放了这块内存,让它重新得到自由。 2、函数的用法: 其实这两个函数用起来倒不是很难,也就是malloc()之后觉得用够了就甩了它把它给free()了,举个简单例子: // Code... char *Ptr = NULL; Ptr = (char *)malloc(100 * sizeof(char)); if (NULL == Ptr) { exit (1); } gets(Ptr); // code... free(Ptr); Ptr = NULL; // code... 就是这样!当然,具体情况要具体分析以及具体解决。比如说,你定义了一个指针,在一个函数里申请了一块内存然后通过函数返回传递给这个指针,那么也许释放这块内存这项工作就应该留给其他函数了。 3、关于函数使用需要注意的一些地方: A、申请了内存空间后, 必须检查 是否分配成功。 B

80C51存储器与C51内存优化

一个人想着一个人 提交于 2020-04-07 12:13:32
80C51在物理结构上有四个存储空间:片内程序存储器、片外程序存储器、片内数据存储器和片外数据存储器。但在逻辑上,即从用户使用的角度上,80C51有三个存储空间:片内外统一编址的64KB的程序存储器地址空间(用16位地址)、256B的片内数据存储器的地址空间(用8位地址,其中128B的专用寄存器地址空间仅有21个字节有实际意义)以及64KB片外存储器地址空间。 1、程序存储器 程序存储器用于存放编好的程序和表格常数。80C51片内有4KB ROM,片外16位地址线最多可扩展64KB ROM,两者是统一编址的。如果EA端保持高电平,80C51的程序计数器PC在0000H——0FFFH范围内(即前4KB地址)是执行片内ROM的程序。当寻址范围在1000H——FFFFH时,则从片外存储器取指令。当EA端保持低电平时,80C51的所有取指令操作均在片外程序存储器中进行,这时片外存储器可以从0000H开始编址。 程序存储器中,以下6个单元具有特殊功能。 0000H:80C51复位后,PC=0000H,即程序从0000H开始执行指令。 0003H:外部中断0入口。 000BH:定时器0溢出中断入口。 0013H:外部中断1入口。 001BH:定时器1溢出中断入口。 0023H:串行口中断入口。 2、数据存储器 数据存储器用于存放中间运算结果、数据暂存和缓冲、标志位等。80C51片内有256B

【C语言】23-typedef

久未见 提交于 2020-04-07 07:32:26
一、typedef作用简介 * 我们可以使用typedef关键字为各种数据类型定义一个新名字(别名)。 1 #include <stdio.h> 2 3 typedef int Integer; 4 typedef unsigned int UInterger; 5 6 typedef float Float; 7 8 int main(int argc, const char * argv[]) { 9 Integer i = -10; 10 UInterger ui = 11; 11 12 Float f = 12.39f; 13 14 printf("%d %d %.2f", i, ui, f); 15 16 return 0; 17 } 在第3、第4、第6行分别给int、unsigned int、float起了个别名,然后在main函数中使用别名定义变量,用来跟原来的基本类型是完全一样的。输出结果: 当然,给类型起别名后,原来的int、float还是可以正常使用的: int i = 10; float f = 10.0f; * 也可以在别名的基础上再起一个别名 typedef int Integer; typedef Integer MyInteger; 二、typedef与指针 除开可以给基本数据类型起别名,typedef也可以给指针起别名 1 #include

网友:c++与Python,究竟谁才是大哥?

拥有回忆 提交于 2020-04-06 16:46:21
一直以来,在 TIOBE 编程语言排行榜中,简单易用的新贵 Python 和老将 C++ 是强劲的竞争对手,不过 C++ 和 Python 都是非常流行的编程语言,对于开发者而言,在选择语言利器时究竟有何参考标准?本文将基于两种语言的关键性能对比,带领大家深入不一样的 Python 与 C++。 在编程生涯的早期阶段,我参与过一款C++数学优化应用程序的开发,这个程序对性能的要求很高。至今我依然记得那段艰难的经历。 在那个项目中,我遇到了一些概念,比如指针、并发和垃圾回收,刚开始的时候这些概念非常难以理解。 然而,如果你问我对C++的看法,那么我会很高兴地向想要构建实时应用程序的人推荐C++。 C++是一门非常强大的编程语言。 很多小伙伴在学习Python的过程中往往因为没有资料或者没人指导从而导致自己不想学下去了,因此我特意准备了大量的PDF书籍、视频教程,都免费送给大家!不管你是零基础还是有基础都可以获取到自己相对应的学习礼包!包括Python软件工具和2019最新入门到实战教程,(https://url.cn/59RWE1Z)复制到浏览器打开! 最近,我一直在从事有关机器学习和数据科学解决方案的架构和实现工作。我选择的语言是Python。我承认也很欣赏这种语言的简单性和强大性。有些程序员认为Python是一种原型编程语言,当然他们有自己的正当理由。但是

C语言编程优化运行速度

混江龙づ霸主 提交于 2020-04-06 04:02:18
1、选择合适的算法和数据结构 选择一种合适的数据结构很重要,如果在一堆随机存放的数中使用了大量的插入和删除指令,那使用链表要快得多。数组与指针语句具有十分密切的关系,一般来说,指针比较灵活简洁,而数组则比较直观,容易理解。对于大部分的编译器,使用指针比使用数组生成的代码更短,执行效率更高。 在许多种情况下,可以用指针运算代替数组索引,这样做常常能产生又快又短的代码。与数组索引相比,指针一般能使代码速度更快,占用空间更少。使用多维数组时差异更明显。下面的代码作用是相同的,但是效率不一样。 数组索引 指针运算 For(;;){ p=array A=array[t++]; for(;;){ a=*(p++); 。。。。。。。。。 。。。。。。 } } 指针方法的优点是, array 的地址每次装入地址 p 后,在每次循环中只需对 p 增量操作。在数组索引方法中,每次循环中都必须根据 t 值求数组下标的复杂运算。 2、使用尽量小的数据类型 能够使用字符型 (char) 定义的变量,就不要使用整型 (int) 变量来定义;能够使用整型变量定义的变量就不要用长整型 (long int) ,能不使用浮点型 (float) 变量就不要使用浮点型变量。当然,在定义变量后不要超过变量的作用范围,如果超过变量的范围赋值, C 编译器并不报错,但程序运行结果却错了,而且这样的错误很难发现。 在

c语言中的代码优化《转》

痴心易碎 提交于 2020-04-06 03:03:44
在性能优化方面永远注意80-20原则,即20%的程序消耗了80%的运行时间,因而我们要改进效率,最主要是考虑改进那20%的代码。不要优化程序中开销不大的那80%,这是劳而无功的。 第一招:以空间换时间   计算机程序中最大的矛盾是空间和时间的矛盾,那么,从这个角度出发逆向思维来考虑程序的效率问题,我们就有了解决问题的第1招--以空间换时间。比如说字符串的赋值: 方法A:通常的办法 #define LEN 32 char string1 [LEN]; memset (string1,0,LEN); strcpy (string1,"This is a example!!"); 方法B: const char string2[LEN] ="This is a example!"; char * cp; cp = string2 使用的时候可以直接用指针来操作。 从上面的例子可以看出,A和B的效率是不能比的。在同样的存储空间下,B直接使用指针就可以操作了,而A需要调用两个字符函数才能完成。B的缺点在于灵活 性没有A好。在需要频繁更改一个字符串内容的时候,A具有更好的灵活性;如果采用方法B,则需要预存许多字符串,虽然占用了大量的内存,但是获得了程序执 行的高效率。 如果系统的实时性要求很高,内存还有一些,那我推荐你使用该招数。 第二招: 使用宏而不是函数。   这也是第一招的变招

指针运算(C++)

一世执手 提交于 2020-04-06 00:31:34
//本文是学习《C++程序设计教程--设计思想与实现》的笔记。 1、指针可以进行加减运算。 数组名本身,没有方括号和下标,实际上是一个地址,表示数组起始地址。 整型数组的数组名本事得到一整数地址,字符数组的数组名得到一字符地址。 可以把数组起始地址赋值给一指针,通过移动指针(加减指针)来对数组元素进行操作。 例如:下面程序用指针运算来计算数组元素的和: #include<iostream.h> int main(){ int iArray[10]; int sum = 0; int * iPtr = iArray;//用数组名 iArray给指针初始化 //int *iPtr; //iPtr = iArray;这两句和上面一句是相等的//iPtr = &iArray[0];这句与左边那句相同 for(int i = 0;i < 10;i++){ iArray[i] = i * 2; cout<<"*iArray["<<i<<"]"<<"is "<<iArray[i]<<endl; } for(int idex = 0; idex < 10; idex++){ sum += *iPtr; cout<<"*iPtr is "<<*iPtr<<endl; iPtr++; } cout<<"sum is"<<sum<<endl; } sum += *iPtr; iPtr++; 等同于

c语言-指针

孤街醉人 提交于 2020-04-05 15:34:03
指针 一、指针的地址 1、变量的地址 计算机中,数据存储在内存中,内存可划分为若干存储单元,每个单元可以存放8位二进制数,即1个字节。内存单元采用线性地址编码,每个单元具有唯一一个地址编码。 【1】变量的地址: 系统 为变量分配的内存单元的地址(内存中每一个字节都有一个编号, 就是“地址”,是一个 无符号整型数 ) 【2】变量的有关概念 存储内容:数据值 空间大小:数据类型 空间位置:地址 生存周期:存储类别 2、变量的访问方式 【1】直接访问 int a; float b; a = 3; //直接将3放入a的地址 b = 4; 【2】间接访问:定义一个变量p,存放a的地址,通过p来访问a 3、指针变量: 存放地址的变量 例:p为指针变量,它存放整型变量a的首地址,就称指针变量p 指向 整型变量a 二、指针变量的定义与引用 指针变量在使用前必须定义,使其指向特定类型的变量,指针变量存放地址,必须定义为“指针类型”。 1、定义方法   类型符 *指针变量名 指针变量的类型 所指向的内存中存放的数据的类型 int *p1,*p2; char *ps; float *pf1,*pf2; 2、指针变量的赋值 【1】指针变量的值为地址,是一个无符号整数, 但不能直接将整型常量赋给指针变量 。 注:变量的类型必须与指针变量的类型相同,若不赋值,则指针变量的值是随机的( 会很危险

c语言的typedef

浪尽此生 提交于 2020-04-04 22:33:43
一、typedef作用简介 1.作用:给已经存在的类型起一个新的名称 2.使用场合: 1> 基本数据类型 2> 指针 3> 结构体 4> 枚举 5> 指向函数的指针 * 我们可以使用typedef关键字为各种数据类型定义一个新名字(别名)。 1 #include <stdio.h> 2 3 typedef int MyInt; 4 typedef MyInt MyInt2; 5 int main() 6 { 7 // 定义结构体变量 8 int a; 9 MyInt i = 10; 10 MyInt2 c = 20; 11 12 13 printf("i is %d\n", i); 14 printf("c is %d\n", c); 15 16 return 0; 17 } 1 #include <stdio.h> 2 3 typedef int Integer; 4 typedef unsigned int UInterger; 5 6 typedef float Float; 7 8 int main(int argc, const char * argv[]) { 9 Integer i = -10; 10 UInterger ui = 11; 11 12 Float f = 12.39f; 13 14 printf("%d %d %.2f", i, ui, f); 15