C语言学习第四周(220822-220826)

本周是C语言学习的最后一周,除了学习C语言语法本身,还学习了数据结构和算法中的一些内容。

  1. 断言函数assert,用来判断诸如分配内存是否成功等操作,若失败,则程序直接退出,不往下执行。
  2. 链表除了单向链表外,还有双向链表,还有十字链表,循环链表等
  3. 栈,作为一种数据结构,其特点是先进后出,先进的存在栈顶,栈的操作主要有初始化、判断栈是否为空和是否已满、出栈、入栈
  4. 队列,是一种常见的数据结构,特点是先进先出,操作主要由初始化、判断队列是否为空和是否已满、出队、入队。
  5. 二叉树的特点:节点有且仅有一个跟节点,节点最多有两个子节点
  6. 满二叉树:一个深度为n的满二叉树,其节点总数为2^n-1;完全二叉树:从最底层最右边开始删除满二叉树连续的节点;有序二叉树:比当前节点数值大的放节点右边,小的放左边,有序二叉树的查找效率较高。
  7. 二叉树的遍历:分为先序遍历、中序遍历、后续遍历,主要看什么时候访问根节点,就是什么序遍历,比如后续遍历就是先访问左子树,再访问右子树,最后访问根节点。
  8. 哈希表又称散列表,是将关键字与下标一一对应,存入连续的一块内存空间。建立一个哈希表,主要确定如下两个问题:a. 设计一个哈希函数,尽可能少的发生数据存储冲突,一般有线性法和除留余数法,就是取余,b. 发生冲突后怎么解决,一般通过线性探测,或平方探测,也可以通过链地址法
  9. 排序算法,常见的有冒泡排序,选择排序,快排序等,其中快排序的时间复杂度为O(n*logn),其他有双重循环的,都是O(n^2)。还有桶排序,地精排序(无需双重循环)
  10. 本周还用面相过程的C语言做了个学生管理系统小项目,过程中发现面相过程语言,在数据类型的泛型化上,能做的好像比较少,不像面向对象的语言中,有父类子类继承,以及父类可以接收多种类型的子类的值这个多态的概念,很多函数仅仅因为接收或返回不同的数据类型,而需要重写一份,即使这些数据类型及其相似。

C语言的学习,本周结束了,小结一下:

C语言的特点是依靠指针访问和更改数据,无论什么数据类型,包括函数,都可以通过指针来访问,而指针仅仅是一个数据的起始地址,决定该访问多大内存空间的,是这个数据的数据类型,比如int,就是从指针指向的地址开始访问4个字节的内存空间,这也是为什么数据类型在声明变量,和申请内存空间时不可缺少的原因。

学习C语言的同时,也更深入认识了计算机的组成结构,比如通过了解变量的生命周期和作用域,知道了程序运行时的内存四区。

当然C语言只是一门与计算机沟通的语言工具,真正能将想法转化为代码的,还需要数据结构、算法、设计模式等知识积累。换言之,有了这些理论知识的储备,即使换其他语言,也同样能在计算机上很好地实现功能。

你可能感兴趣的:(数据结构,算法,排序算法)