数据结构(C++版)第一章总结

本文探讨程序设计的核心要素:数据结构与算法。详细介绍了数据结构的概念、分类及算法的设计原则,同时讨论了算法的特性、描述方法及其效率评估方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  程序设计的实质是数据表示数据处理,其核心分别为数据结构算法。图灵奖获得者沃思给出一著名公式:数据结构+算法=程序 数据是信息的载体,分为数值数据非数值数据,数据元素是数据的基本单位。数据结构是指相互之间存在一定关系的数据元素的集合,按照视点的不同分为逻辑结构存储结构。

                                                                                               

          


算法是对特定问题求解步骤的一种描述,是指令的有序序列。算法必须满足五个特性 :

1.输入:一个算法有零个或多个输入(即算法可以没有输入)

2.输出:一个算法有一个或多个输出(即算法必须要有输出)

3.有穷性:一个算法必须总是在执行有穷步之后结束,且每一步都在有穷时间内完成

4.确定性:算法中每一条指令必须有确切的含义,不存在二义性

5.可行性:算法描述的操作可以通过已经实现的基本操作执行有限次来实现

  一个“好”算法除要满足上述五大特性还需要具备正确性鲁棒性简单性抽象分级高效性等特性。算法设计者在构思和设计了一个算法之后,必须清楚准确地将所设计的求解步骤记录下来,即描述算法,常用的描述算法有自然语言(优点:易理解;缺点:易出现二义性且算法通常很冗长)、流程图(优点:直观易懂;缺点:严密性不如程序设计语言,灵活性不如自然语言)、程序设计语言(优点:能由计算机直接执行;缺点:抽象性差)和伪代码(介于自然语言和程序设计语言之间的方法,被称为“算法语言”或“第一语言”)等。

  通常我们采用事前分析估算的方法——渐进复杂度来度量一个算法的效率,它是对算法所消耗资源的一种估算方法。影响算法时间代价的最主要因素是问题规模。为了客观地反映一个算法的执行时间,可以用算法中基本语句的执行次数来度量算法的工作量,基本语句是执行次数与整个算法的执行次数成正比的语句,对算法运行时间的贡献最大,是算法中最重要的操作。

  当分析一个算法时,一般来说,最好情况不能作为算法性能的代表,因为它发生的概率太小,对于条件的考虑太乐观了。但是,当最好情况出现的概率较大时,应该分析最好情况。分析最差情况有一个好处:它能让你知道算法的运行时间最坏能坏到什么程度。通常需要分析均情况的时间代价。

  算法的空间复杂度是指在算法的执行过程中,需要的辅助空间数量。辅助空间是除算法本身和输入输出数据所占据的空间外,算法临时开辟的存储空间。通常记作:

                S(n)=O(f(n))

其中,n为问题规模,分析方法与算法的时间复杂度类似。

内含资源如下: 1.基本数据结构 1.1.Array ........... 动态数组 1.2.LinkedList ... 链表 1.3.BST .............. 二分搜索树 1.4.MapBST ..... 二分搜索树(用于实现映射) 1.5.AVLTree ...... AVL树 2.接口 2.1.Queue ........... 队列接口 2.2.Stack .............. 栈接口 2.3.Set .................. 集合接口 2.4.Map ............... 映射接口 2.5.Merger .......... 自定义函数接口 2.6.UnionFind ..... 并查集接口 3.高级数据结构 3.1.ArrayQueue .......................... 队列_基于动态数组实现 3.2.LinkedListQueue .................. 队列__基于链表实现 3.3.LoopQueue ........................... 循环队列_基于动态数组实现 3.4.PriorityQueue ....................... 优先队列_基于最大二叉堆实现 3.5.ArrayPriorityQueue ............. 优先队列_基于动态数组实现 3.6.LinkedListPriorityQueue ..... 优先队列_基于链表实现 3.7.ArrayStack ............................. 栈_基于动态数组实现 3.8.LinkedListStack ..................... 栈_基于链表实现 3.9.BSTSet ..................................... 集合_基于二分搜索树实现 3.10.LinkedListSet ....................... 集合_基于链表实现 3.11.BSTMap ................................ 映射_基于二分搜索树实现 3.12.AVLTreeMap ....................... 映射_ 基于AVL树实现 3.13.LinkedListMap .................... 映射_基于链表实现 3.14.MaxHeap ............................. 最大二叉堆 3.15.SegmentTree ...................... 线段树 3.16.Trie ......................................... 字典树 3.17.QuickFind ............................ 并查集_基于数组实现 3.18.QuickUnion ......................... 并查集_基于树思想实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值