数据结构基本概念总结

数据结构与算法

数据结构

在计算机科学中,数据结构(data structure)是计算机中存储、组织数据的方式。大多数数据结构都由数列、记录、可辨识联合、引用等基本类型构成。数据结构可透过程式语言所提供的数据类型、引用及其他操作加以实现。一个设计良好的数据结构,应该在尽可能使用较少的时间与空间资源的前提下,支援各种程式执行。不同种类的数据结构适合不同种类的应用,部分资料结构甚至是为了解决特定问题而设计出来的。正确的数据结构选择可以提高演算法的效率(请参考演算法效率)。在电脑程式设计的过程中,选择适当的数据结构是一项重要工作。许多大型系统的编写经验显示,程式设计的困难程度与最终成果的质量与表现,取决于是否选择了最适合的数据结构。

数据结构知识点概览

通用数据结构:数组、链表、树、哈希表
专用数据结构:栈、队列、优先级队列
排序:插入排序、希尔排序、快速排序、归并排序、堆排序
图:邻接矩阵、邻接表
外部存储:顺序存储、索引文件、B-树、哈希方法

算法

编写一段计算机程序一般都是实现一种已有的方法(大多与编程语言无关)来解决某个问题。在计算机科学领域,用算法来描述一种有限、确定、有效的并适合使用计算机程序来实现的解决问题的方法。学习算法的主要原因是它们可以解决许多计算机资源,甚至可以让我们完成以下本不可能完成的任务。但是为一项任务选择合适的算法是困难的,我们需要关注各个算法的之间的性能差异,使得选择的算法能够具有最小的资源消耗。

数据结构与算法之间的关系

数据结构是对在计算机内存中(有时在磁盘中)的数据的一种安排。数据结构包括数组、链表、栈、二叉树、哈希表等。算法对这些结构中的数据进行各种各样的处理,例如,查找一条特殊的数据项或对数据进行排序等。著名的瑞士计算机科学家N.Wirth曾经提出:算法+数据结构=程序。

线性表

线性表是最简单也是最常用的一种数据结构,它的最基本的特点是每个数据元素最多只能有一个直接前驱,一个直接后继;只有第一个数据元素没有直接前驱,最后一个数据元素没有直接后继。

线性表的顺序存储结构

线性表的顺序存储(向量存储)结构中,线性表中结点存放的物理顺序与逻辑顺序完全一致。数据存储的逻辑位置由数组的下标决定,相邻的元素之间具有相邻的存储位置。
线性表中插入和删除元素(存在大量的数据元素移动)的时间复杂度都为O(N),而查找某个元素的时间复杂度为O(1)。

线性表的链式存储结构

单向链表
用一组任意的存储单元来依次存放线性表的结点,这组存储单元既可以是连续的,也可以是不连续的。因此,链表中结点的逻辑次序和物理次序不一定相同。为了能正确表示结点间的逻辑关系,在存储每个结点值的同时,还必须存储指示其后继结点的地址。单向链表不需要事先估计存储空间大小。
对于链式分配线性表,整个链表的存取不许是从头指针开始,头指针指示链表中第一个结点的存储位置。最后一个元素没有后继,其结点的指针为“空”(null)。
在使用单链表结点时,必须完成以下三个步骤:(修改两个指针)
1.创建一个新结点;
2.为该结点赋值,将当前元素的next域赋给新结点的next域;
3.当前结点的前驱的next域要指向新插入的节点。
在删除单链表结点时,需要将当前结点的直接前驱结点的next域指向被删除结点的直接后继结点。(删除及诶单指示将结点从链表中删除,该结点仍然存在)
在单链表中,指针是单一的方向,结点的查找只能从前往后查找,不可反向查找,所以在插入、删除结点时,需要利用结点的前驱结点的指针。因此,单向链表中的头结点非常重要,不可丢失。
循环链表
循环链表又称为循环现行链表,其存储结构基本与单向链表相同。它将单向链表中最后一个结点的指针域的null变成指向第一个结点,逻辑上形成一个环形,可以解决单向链表中单方向查找的缺点。相对于单向链表而言,其优点是在不增加任何空间的情况下,已知任意结点的地址,可以找到链表中的所欲结点。
循环链表插入和删除元素的时间复杂度也都是O(N),插入和删除元素基本上也和单向链表一样,只是查找时的判别条件不同(循环判断条件用curr.next()!=head来替换单向链表的curr.next()!=null)。
双链表
双链表在单向链表的基础上,在每个结点中增加了一个指向其前驱的指针域,这样可以从表中快速确定一个结点的前驱。
插入元素:(修改四个指针)
1.申请新结点,同事给新结点的数据域、两个指针域赋值;
2.将当前结点的next域指向新结点;
3.将当前结点的直接后继的前驱指针指向新结点。
删除结点的步骤:
1.修改当前结点的next域;
2.修改当前结点的后继结点和前驱结点指针
查找元素:与单向链表的查找基本一致
双链表可以直接删除当前指针所指向的节点。而不需要像单向链表中ÿ

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值