学习笔记之数据结构基础知识点及个人理解

十年热恋 提交于 2019-11-30 05:49:42

1.数据结构

a)个人见解:姑且认为数据结构是数据间的联系、数据的组织形式,对数据的基本操作算法:增、删、查、改、排,以及研究算法的复杂度的研究。若有错误,日后再修正。
b)数据结构在描述数据间的联系时,则称为逻辑结构;
逻辑结构的类型:
非线性的有:集合;
树:不包括根结点和终端结点的其他结点,都有唯一的父结点和子结点;
图;
线性:不包括头结点和终端结点的其他结点,都有唯一的前驱和后继);
数据结构在表示数据在计算机存储组织形式时,则称为物理结构;如链表就是种物理结构。
物理结构(亦叫存储结构)的类型:
顺序存储结构:数据元素存储在地址连续的一段内存中,通过相对地址完成对数据元素的操作;
链式存储结构:数据元素在内存中的地址可能是连续的,也可能是不连续的,存储的数据包括数据域和指针域,通过指针实现对数据元素的操作;
索引存储结构:数据元素存储在地址不连续的内存中,并建立一个索引表来保存数据元素的地址;
散列存储结构:数据元素在内存中的地址是连续的,通过散列函数根据关键码来计算出哈希值;(尚未完全理解,待补充);

2.数据元素、数据项、数据对象三者的联系

假设一条单向链表,其结点存储的数据是学生的基本信息:姓名、学号、年级。
数据对象由数据元素组成,数据元素则由数据项组成。
“姓名”、“学号”、“年级”分别为数据项,由三个数据项组合而成的“姓名、学号、年级”则为一个学生这样的数据元素,由许多个这样的学生结点组合而成的是数据对象。
数据项是数据对象这个系统里最小的组成,不可再将进一步分解,如果将数据项分解,研究数据项就没有意义了,比如将“姓名”分解,分解后的“姓名”就是单一的文字。

3.数据结构的形式定义

数据结构的名称 = (D,S);其中D是数据对象,S是数据间的关系的有限集合;
D = {数据对象A,数据对象B,…,条件约束C,条件约束D,…}
S = {<数据对象A,数据对象B,…> |条件约束C,条件约束D}

4.算法可以没有输入,但是一定要有输出,没有输出的算法肯定不能作为解决的“灵魂”。正确的算法是具有兼容、容错能力
的,也就是算法的结构是较完整的,思考算法的时候,可以先把算法的核心搞定,不考虑算法的容错能力,容错能力是在完成了算法的核心之后,再来考虑的。
5.影响算法的时间复杂度的因素:算法、问题规模、硬件。

算法的时间复杂度的计算:
1.事后统计:在程序运行的时候计算,不常用;
2.事前分析估算:以基本语句的重复执行次数为参数,通过O(n)来衡量T(n);
第二种方法的计算要点:
Step1:找到最深层的且为算法核心的基本语句;
Step2:根据条件得到对求和变量的求和公式;
Step3:按照层次,一层一层写出到达基本语句的∑;
Step4:求和得到计算结果,去掉与n同级别的数字即运算符,最终结果是求n;
6.不同种类运算符的优先级:算术>关系>逻辑>赋值。
7.线性表的表示:线性表名称=(数据元素A,数据元素B,…);
8.顺序线性表的实现
相关概念:a)随机存取:获取数据元素,不需要从头遍历的操作方式;
b)位置与下标的区别:位置从1开始,而下标从0开始;
顺序线性表类型的声明:
struct 顺序线性表的名称{
elemType*data;//该指针指向数据元素;
intlength;//当前线性表的元素个数;
intlistSize;//线性表可容下元素的最大个数;
}
基本运算的声明:
a)int InitList(顺序线性表的引用);
//核心:使用malloc函数分配初始空间,返回地址给data;
b)voidDestroyList(顺序线性表的引用);
//核心:使用free函数释放data所指的空间;
c)void ClearList();
//核心:将length置为0即可;
d)int ListEmpty(顺序线性表的引用);
//核心:看length是否为0;
e)int GetElem(顺序线性表的引用,int i,elemType e);
//核心:将下标为i-1的数据元素赋给e所指的空间;
f)int LocateElem(顺序线性表的引用,要查找的数据元素elemType e);
//核心:遍历顺序线性表,若有e,则返回其位置;
g)int InsertElem(顺序线性表的引用,要插入的位置int i,elemType e);
//核心:右移。若顺序线性表的内存空间已满,则使用realloc(void
p,调整后的大小)函数重新调整顺序线性表的容量;另外插入的位置可不是随意的,注意不可以破坏顺序的连续特性;
h)int DelElem(顺序线性表的引用,int i);
//核心:左移;
i)顺序线性表的优缺点:
缺点:插入、删除平均要移动约一半的元素,其时间复杂度为O(1)或O(n);长度不好分配;
优点:查找比较高效,可随机存取;

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!