数据结构与算法:第一部分
发表时间: 2022-11-16 22:56
我们知道,程序=数据结构+算法。提到数据结构,首先我们需要了解两个重要的概念:
(1)什么是数据?
(2)什么是结构?
输入到计算机中的,能够被其认识、处理和存储的一系列符号,数据由数据元素组成,每个数据元素一般是由若干个字段和域组成,数据是有类型的,l例如字符型(char,unsigned char)或者整型(int,unsigned int)等,不同的数据类型意味着运算方式和取值范围有所差异。
逻辑结构:数据之间的某种关系,这种关系是抽象的,分为线性结构(线性表、栈、队列)和非线性结构(树、图)。
存储结构:逻辑结构在计算机中的具体实现,分为顺序存储、链式存储、索引存储、散列存储。
顺序存储:将若干个元素按照逻辑顺序存储在一片连续的空间中,例如数组。特点:(1)随机存储。(2)删除和插入需要移动其它元素。
d0 | d1 | d2 | d3 | d4 | d5 | d6 |
链式存储:各个元素之间根据地址建立一定的关系。特点:(1)每个结点由数据域和指针域组成。(2)可以比较灵活地实现数据的插入和删除。(3)查找节点时链式存储要比顺序存储慢。(4)逻辑上相邻的节点位置不一定相邻。
索引存储:索引表和数据文件相结合实现数据的存储的一种方法。特点:用节点的索引号来确定节点的存储地址,优点是检索速度快,缺点是占用较多的存储空间。
散列存储:又称hash存储,以节点的关键字key为自变量,通过一个确定的函数关系f,计算出对应的函数值,将这个函数值理解为节点的存储地址,将节点存入到f(key)所指的存储位置上,在查找时再根据要查找的关键字,用同样的函数计算地址,然后到相应的位置读取。特点:散列的数据访问速度高于数组,时间复杂度为O(1),而数组遍历的时间复杂度为O(n)。
此外,还有一个重要的方面,数据有了,结构有了,对数据怎么操作呢?这就涉及到数据的运算:排序、查询、插入、修改、删除。