【算法】C基础知识记录

 目录

1.算法的空间复杂度

2.算法的时间复杂度

3.数据的逻辑结构与储存结果不是一一对应的。

4.队列的修改

5.循环队列中的元素个数随队头和队尾指针变化而动态变化。

6.C语言的result只是一个自己定义的量 


1.算法的空间复杂度

算法在执行过程中所需要的内存空间。

2.算法的时间复杂度

执行程序所需的时间。

常用时间复杂度从小到大的排序:O(1)<O(logn)<O(n)<O(nlogn)<O(n²)<O(n³)<O(2ⁿ)<O(n!)

3.数据的逻辑结构与存储结构不是一一对应的。

-逻辑结构指的是关系:比如集合、线性、非线性。抽象的

-存储结构是指数据元素的表示和关系的表示。具体的,可实现的

-同一种逻辑结构采用不同的存储方法,可以得到不同的存储结构。比如线性结构采用顺序存储方法,可以得到顺序表,采用链式存储方法可以的到链表。

4.队列的修改

-队列是一个插入操作和删除操作受到限制的线性数据结结构。

-被限制在表的两端。插入操作在一端进行,删除在另一端进行,故而队列是先进先出的表。

5.循环队列中的元素个数随队头和队尾指针变化而动态变化。

la.front==0;la.rear==n;对内元素总数为n-1.

6.C语言的result只是一个自己定义的量       

c语言里没有result这个关键字,是自己定义的变量名。考察的是对关键字和变量名的认识。

7.队空和队满时,头尾指针均相等。

8.冒泡法是在扫描过程中逐次比较相邻两个元素的大小。

-冒泡法是一种稳定排序算法。

-详细运行机制看下面的链接。

冒泡排序算法(超级详细) (biancheng.net)icon-default.png?t=M1L8http://c.biancheng.net/view/6506.html-冒泡法优化:

  • 针对问题:

数据的顺序排好之后,冒泡算法仍然会继续进行下一轮的比较,直到arr.length-1次,后面的比较没有意义的。

  • 方案:

设置标志位flag,如果发生了交换flag设置为true;如果没有交换就设置为false。

这样当一轮比较结束后如果flag仍为false,即:这一轮没有发生交换,说明数据的顺序已经排好,没有必要继续进行下去。

  • 以Java为例

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

public static void BubbleSort1(int [] arr){

 

    int temp;//临时变量

    boolean flag;//是否交换的标志

    for(int i=0; i<arr.length-1; i++){   //表示趟数,一共arr.length-1

        // 每次遍历标志位都要先置为false,才能判断后面的元素是否发生了交换

        flag = false;

        for(int j=arr.length-1; j>i; j--){ //选出该趟排序的最大值往后移动

            if(arr[j] < arr[j-1]){

                temp = arr[j];

                arr[j] = arr[j-1];

                arr[j-1] = temp;

                flag = true;  //只要发生了交换,flag就置为true

            }

        }

    // 判断标志位是否为false,如果为false,说明后面的元素已经有序,就直接return

        if(!flag) break;

    }

 }

9. 对象间的信息传递靠消息        

对象之间通过消息进行交互。

-补充:在UML中,消息表示为箭头线,线的类型代表消息类型。

-消息类型:1.简单消息2.同步消息

 3.异步消息4.同步并返回

-UML :(Unified Modeling Language)统一建模语言。图形化语言,视图

10.多态性

是指同一个操作可以是不同对象的行为。操作——对象。 

11.C/C++内存的类型

C中:内存分为5个区:堆(malloc)、栈(如局部变量、函数参数)、程序代码区(存放二进制代码)、全局/静态存储区(全局变量、static变量)和常量存储区(常量)。

C++中有自由存储区(new)

全局变量、static变量会初始化为默认值,而堆和栈上的变量是随机的,不确定的。

12.堆和栈

  1. 堆存放动态分配的对象。即那些在程序运行时动态分配的对象,比如new出来的对象,其生存期由程序控制;
  2. 栈用来保存定义在函数内非static对象,比如局部变量,仅在其定义的程序块运行时才存在;
  3. 静态内存用来保存static对象,类static数据成员以及定义在任何函数外部的变量,static对象在使用之前分配,程序结束时销毁;
  4. 栈和静态内存的对象由编译器自动创建和销毁。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值