"数据结构与网络知识精要"
在计算机科学中,数据结构是组织、存储和处理数据的特定方式,对于高效的算法设计至关重要。以下是关键知识点的详细讲解:
A. 排列:常见的排序算法包括冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序、堆排序等。稳定排序算法如冒泡排序和归并排序,不会改变相等元素的相对顺序。快速排序平均时间复杂度为O(nlogn),但最坏情况为O(n^2)。
B. 查找:哈希查找通过哈希函数直接定位,时间复杂度理想情况下为O(1)。二叉树查找通常指二分查找,时间复杂度为O(logn)。哈希映射是一种快速查找的数据结构,而哈希表是其实现形式。
C. 链表和数组:链表适合动态增删操作,不需连续内存空间,但访问速度慢;数组则反之,访问速度快,但增删元素需移动元素,效率较低。
D. 栈和队列:栈是后进先出(LIFO)的数据结构,如函数调用栈;队列是先进先出(FIFO)的,如任务调度。
E. 多态:面向对象编程中的多态性允许不同类的对象对同一消息作出不同的响应。overload是重载,同一作用域中函数或操作符名称相同但参数列表不同;override是覆盖,子类重写父类的虚函数。
F. 字符串函数:strcpy用于复制字符串,memcpy用于复制内存块。注意strcpy不检查目标内存是否足够,可能导致溢出,而memcpy会。
G. 继承:面向对象编程中的继承允许子类继承父类的属性和方法,实现代码复用。多继承是子类可以从多个父类继承特性。
H. 面向对象的好处:封装、继承和多态,提高代码的复用性和可维护性,降低复杂性。
I. static关键字:static变量在全局作用域中只有一份,内存分配在静态存储区;在局部作用域中,静态变量仅在编译期间初始化,生命周期贯穿整个程序。
J. 虚函数、纯虚函数和虚析构函数:虚函数用于实现多态,纯虚函数定义抽象类,虚析构函数确保基类的析构函数在派生类析构时被调用,用于清理资源。
K. 内存泄漏:程序分配了内存但未释放,导致系统资源浪费。解决方法包括使用智能指针、垃圾回收机制,以及手动跟踪和释放内存。
网络部分:
1. OSI模型7层结构:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,分别负责物理传输、帧的传输、路由选择、端到端通信等。
2. TCP/IP模型:简化为四层,包括网络接口层、网络层、传输层和应用层,对应OSI模型的部分功能。
3. TCP与UDP区别:TCP提供可靠连接,保证数据顺序和完整性,但效率较低;UDP是无连接的,速度快,但不保证数据传输。
4. TCP建立连接的步骤:三次握手,即SYN-SYNACK-ACK,确保双方都有发送和接收能力。
5. 香农定理:描述了在给定带宽和信噪比下,信道的最大传输速率。
二叉树的非递归遍历是高效解决问题的方法:
1. 先序遍历非递归:利用栈存储节点,先访问根节点,再将左子树压栈,最后处理右子树。
2. 中序遍历非递归:同样用栈辅助,先遍历左子树并压栈,遇到空节点时弹栈并访问,然后处理右子树。
3. 后序遍历非递归:较为复杂,一般使用两个栈,分别处理左子树和右子树,同时记录已访问过的节点。
这些知识点是理解和掌握计算机科学核心概念的基础,对于编程和系统设计至关重要。