以Niklus Wirth的观点,程序等于什么?
程序等于算法加数据结构。公式:“程序 = 算法 + 数据结构”。
算法的重要特性。
- 有穷性:算法必须能在有限的步骤之后结束。
- 确定性:算法的每一步骤必须明确,没有二义性。
- 可行性:算法中描述的操作都能通过已经实现的基本操作执行有限次来实现。
- 输入:一个算法有零个或多个输入。
- 输出:一个算法应有一个或多个输出,这些输出是对输入的明确响应。
好算法的标准。
- 正确性:算法应正确解决问题,对于所有的输入,都能产生满足要求的输出。
- 效率:算法应尽可能少地使用计算资源,包括时间和空间。
- 简洁性:算法应该尽可能简洁,避免不必要的复杂性。
- 可读性:算法应该易于理解和实现。
- 健壮性:对于非法或异常的输入,算法应有良好的容错能力。
线性结构的特点。
- 有且仅有一个被称为"第一个"的元素。
- 有且仅有一个被称为"最后一个"的元素。
- 除第一个和最后一个元素之外,其他元素都有一个唯一的前驱和唯一的后继。
线性结构与非线性结构的区别。
线性结构和非线性结构的主要区别在于数据元素之间的关系。
线性结构的特点:
- 数据元素之间存在一对一的线性关系。
- 线性结构有两个端点,除了第一个和最后一个元素之外,其他元素都有一个前驱和一个后继。
非线性结构的特点:
- 数据元素之间存在多对多的关系。
- 非线性结构没有明确的端点,每个元素可能有多个前驱和后继。
列出一些线性结构与非线性结构。
线性结构包括:
- 数组
- 链表(包括单链表、双链表、循环链表等)
- 栈
- 队列(包括普通队列、双端队列、优先队列等)
非线性结构包括:
- 树(包括二叉树、二叉搜索树、平衡二叉树、堆、B树、B+树、红黑树等)
- 图(包括有向图、无向图、加权图等)
- 广义表
顺序表的数据结构。
struct SqList {
ElemType *elem;
int length;
int listSize;
};
这个结构体包含三个成员:
elem
是一个指向元素类型ElemType
的指针,用于存储顺序表的元素。length
是一个整数,表示顺序表的当前长度。listSize
是一个整数,表示顺序表的总容量。