数据结构与算法
文章平均质量分 87
AlbertSjtu
没事瞎琢磨,只为鞭策自己学习
展开
-
数据结构:表
表是一种线性的数据结构,对于形如 A0,A1,A2,...,AN−1A_{0} ,A_{1} ,A_{2},...,A_{N-1} 一般的表,这个表大小是 N,我们将表长为 0 的表称为空表。 表的数组实现: printList 时间复杂度:O(N) findKth 时间复杂度:O(1) insert 和 delete 时间复杂度:O(N)链表实现: 为了避免插入和删除的线性时间复杂度我们原创 2017-10-09 15:16:34 · 460 阅读 · 0 评论 -
数据结构:堆和栈
基本介绍 堆栈数据结构是通过对线性表的插入和删除操作进行限制得到的,因此也是一种特殊的线性表,也就可以通过对线性表类的派生来产生堆栈类,虽然这种方法比较简便但是还是会引起一定的效率损失,同时堆栈类本身就是一种基本的数据结构,所以一般的程序设计也会单独给出基于公式描述和基于链表结构的堆栈类(而非从其他类派生过来),效率上也会有明显的提升。 定义 堆栈(stack)是一种线性表,其插入和删除操作都原创 2017-10-09 09:49:09 · 450 阅读 · 0 评论 -
数据结构:队列
和栈一样,队列也是表。但是和栈不同的是队列的插入在一端进行,删除则是在另一端进行。 队列的基本操作是 enqueue(入队),它是在表的末端(队尾)插入一个元素;dequeue(出队),它是删除(并返回)表的开头(队头)的元素。先进先出。 队列的数组实现: 成员变量front :记录队头位置 back :记录队尾位置 currentSize :记录队长 队列的操作: x 元素入队 e原创 2017-10-10 09:56:48 · 228 阅读 · 0 评论 -
数据结构:二叉树
一般对于大量数据访问,如果通过链表的线性访问时间会过长,不宜使用。二叉树可以很很好的解决这个问题,其大部分操作的运动平均时间为 O(lgN)。 树的定义: 一棵树可以看作是一些点的集合。这个集合可以为空集,若不为空集,则可以看作是由根结点(root)和一个或者多个子树组成,这些子树的每一个根结点都和根结点连接。 因此对含有 N 个结点的树拥有 N-1 条边。基于以下事实:每条边原创 2017-10-10 15:55:08 · 252 阅读 · 0 评论 -
数据结构:散列
散列表也是我们常称的哈希表(hash table),他只支持二叉查找树的所允许的一部分操作。 散列表的实现称为散列(hashing)。散列是一种用于以常数平均时间执行插入、删除和查找的技术。但是,那些需要元素间任何排序信息的树操作将不会得到有效的支持。因此,诸如 findMin 和 findMax 以及在线性时间内按照顺序打印整个表的操作都是散列所不支持的。 理想的散列表数据结构只不过是一个包含原创 2017-10-11 22:38:52 · 393 阅读 · 0 评论 -
数据结构:优先队列
一般我们前面介绍的队列,队列的一个特性是先进先出。但是在作业调度的过程中我们总是希望很短的作业可以优先处理,这样我们就不用一味的等待短的作业而花费很长的时间去处理。但是同时有些短的但是很重要的作业也应该享有优先权。 优先队列至少允许以下两种操作,insert(插入)和 deleteMin(删除最小项)。insert 操作等同于 enqueue(入队),而 deleteMin 则是队列操作的 deq原创 2017-10-12 17:01:48 · 364 阅读 · 0 评论