美文网首页
C语言&数据结构

C语言&数据结构

作者: yingtaomj | 来源:发表于2017-05-20 11:03 被阅读67次

8C程序占用内存的两个区域:堆和栈

  • 栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
  • 堆区(heap):由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。和数据结构中的堆(二叉树)是两回事,分配方式类似于链表。

代码示例:

main()    
{    
    int   b;   //栈    
    char   *p3   =   "123456";   //123456\0在常量区,p3在栈上。    
    static   int   c   =0;   全局(静态)初始化区    
    p1   =   (char   *)malloc(10); //p1 p2本身是在栈上的   
    p2   =   (char   *)malloc(20);  // 分配得来得10和20字节的区域就在堆区。       
}    

区别列表:

  1. 申请后系统的响应
    栈:只要栈的剩余空间大于申请空间,则分配该区域。否则报错。
    堆:在空闲链表中找到足够大的区域分配。
  2. 申请方式
    栈由系统自动分配。堆由程序员申请。
  3. 申请大小的限制
    栈:不能超过剩余的栈空间。总的栈大小是固定的
    堆:不能超过虚拟内存的大小,比较大。
  4. 申请效率
    栈由系统自动分配,速度较快。
    堆是由new分配的内存,一般速度比较慢。
  5. 存储内容
    栈:函数调用时,进栈的依次是:下一条指令,函数从右往左的各个参数,局部变量。
    堆:是在堆的头部用一个字节存放堆的大小。堆中的具体内容由程序员安排。

static和const:static只声明一次,若在函数内定义则只有函数可见,在文件中定义则只有该文件可见。const即常量,不被改变。

平衡二叉树:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

图的存储方式:邻接矩阵、邻接表(稀疏图)、十字链表(方便计算入度)、邻接多重表、边集数组

NP问题是指还未被证明是否存在多项式算法能够解决的问题,而其中NP完全问题又是最有可能不是多项式问题的问题类型。NP完全问题它可以在多项式时间内求解,当且仅当所有的其他的NP完全问题也可以在多项式时间内求解。

接口:对动作的抽象
抽象类:对根源的抽象(这个对象是什么)

抽象数据类型:一个数学模型以及定义在此数学模型上的一组操作。对一个抽象数据类型进行定义时,必须给出它的名字及各运算的运算符名,即函数名,并且规定这些函数的参数性质。一旦定义了一个抽象数据类型及具体实现,程序设计中就可以像使用基本数据类型那样。

程序=数据结构+算法。数据结构指的是数据与数据之间的逻辑关系,算法指的是解决特定问题的步骤和方法.

红黑树:和AVL类似,都是保持树在进行插入和删除时保持树的平衡。(同时满足二叉查找树的基本要求)

指针滥用会导致内存泄露:已经分配的堆没有释放,造成内存浪费。

C++中struct和class的区别,struct的默认继承方式和默认数据权限是public,class是private。

相关文章

网友评论

      本文标题:C语言&数据结构

      本文链接:https://www.haomeiwen.com/subject/myzuxxtx.html