去学习吧
1.什么是数据结构?
如果现在要整理书籍,而且书很多,怎么整理?最简单的一个一个摆放;或者把书分类,然后按照大分类进行分类整合;或者直接细分为多个类别,每个类别之间肯定会有很多关系;但是你有没有想过这本书应该放在哪里?什么情况下应该保存?这就需要从不同的角度考虑每种排序方法,是放在一个书架的一楼,还是放在不同的书架隔间,还是放在图书馆不同的书架上;这种提到整理书籍和讨论事情,就是数据结构要研究的。回到我们的程序员,我们需要用计算机记录上面研究的整理方法和存储形式,因为毕竟整理书籍的目的是为了方便管理和使用。所以说到底还是要把这种抽象的数据和数据之间的关系反映到计算中去,用编程语言来实现。那么就可以知道数据结构研究的是数据之间的关系!
2.为什么要研究数据结构?
详细研究数据的管理机制,形成数据结构模型,在实际情况中可以借鉴,更快的应用到编程中,设计编写更好的软件,从本质上提高工程质量!
3.什么是数据结构?
大家应该都知道一个经典的思路:程序=数据结构+算法;
然后再来说两者的关系以及嵌入式程序员应该注意的点。作为嵌入式程序员,要注重嵌入式编程思维,也就是要注重实用性。所以学习的重点是数据结构的管理数据思想;算法是算法工程师的深入研究,是一种研究方法论。我们很少遇到复杂的算法应用。因此,我们学习一些经典数据结构中涉及的算法就足够了。以后如果有兴趣,可以继续深入了解算法这门学科;注意这个阶段学习中心在哪里。
数据结构研究有三个视角:逻辑关系、存储关系和操作关系。
下图显示了数据结构中三个角度的研究关系:
逻辑关系是对数据之间关系的抽象研究。存储关系需要对应物理存储,操作关系是物理存储确定后待研究数据的应用操作。
4.几种经典的线性结构:
(1)顺序表
上图是一个空表,没有存储有效数据。storage 空之间有一个数组,有效数据的最后更新位置记录为整数last,整体表结构为结构体。
结构代码模型如下:
#定义最大尺寸10
typedef int datatype
typedef int postype
结构列表{
数据类型数据[N];
postype last
};
(2)单向链表
上图是一个单向链表,有头节点,不断增加新的数据节点。storage 空之间有一个结构,结构中有一个数据字段和一个指针字段。数据字段存储要存储的数据,指针字段记录下一个数据节点的第一个地址。
结构代码模型如下:
typedef int datatype
typedef结构节点{
数据类型数据;
struct node * next
}Linknode,* Linklist
(3)双向循环链表
上图是一个双向循环链表,有头节点和n个数据节点。storage 空之间有一个结构,需要一个数据字段和两个指针字段。数据字段存储要存储的数据。第一指针字段记录前一数据节点的第一地址,第二指针字段记录下一数据节点的第一地址。
结构代码模型如下:
typedef int datatype
typedef结构节点{
数据类型数据;
结构节点* previous;
struct node * next
}DLinkNode,* DLinkList
(4)线性结构的应用结构:
(1)堆栈-先进先出
1)序列堆栈:
上图是一个序列栈,有n个数据存储空。结构是堆栈结构,需要有一个数据字段和两个整数标签。数据字段是要存储在阵列存储中的数据。第一个tag top要记录最后一个堆栈数据的数组下标,第二个tag len要记录整个存储的大小空,方便知道堆栈的存储容量。
结构代码模型如下:
typedef int datatype
typedef结构节点{
数据类型*数据;
int maxlen
int top
}SeqStack,* SEqstack _ t;
2)链栈
上图是头节点和n个数据存储空之间的链栈。结构是一个数据节点,需要一个数据字段和一个指针字段。数据字段是要存储在阵列存储中的数据。指针字段应该记录前一个栈节点的第一个地址,栈顶是链表头节点之后的第一个数据节点。
结构代码模型如下:
typedef int datatype
typedef结构节点{
数据类型数据;
struct lstacknode * next
} LinkStacknode,* Linkstatknode _ t;
(1)排队-先进先出、后进先出
1)序列队列
上图显示了一个有n个数据存储的顺序队列空。需要注意的是,这只是一个理想的模型。在实际使用中,需要丢弃一个store 空来判断空表已满,只使用n-1个store空。结构是一个顺序队列,结构中有两个标签,分别为data storage 空。第一个标记记录队列头数据所在的前一个位置的数组下标,第二个标记记录队列尾数据的数组下标。
结构代码模型如下:
#定义N 10
typedef int datatype
typedef结构seqqueue{
数据类型数据[N];
在前部、后部;
}SeqQueue,* SeqQueue _ t;
2)链式队列
上图是头节点和n个数据存储空之间的链式队列。链式队列有两种结构模型,数据节点是第一种结构。这个结构需要有一个数据字段和一个指针字段。数据字段是要存储在数组存储中的数据,指针字段应该记录下一个队列节点的第一个地址。第二种结构是队列模型,需要两个指针字段。指针类型是第一个结构类型的指针。一个指针,前,记录队列头的头地址,这是链表头节点之后的第一个数据节点,另一个指针,后,记录队列尾的头地址,这是链表的最后一个数据节点。
结构代码模型如下:
typedef int datatype
typedef结构节点{
数据类型数据;
struct linkqueuenode * next
}Queuenode,* queue node _ t;
typedef struct linkqueue{
linkqueue_pnode前置,后置;
}LinkQueue,* Linkqueue _ t;
数据结构中还有其他非线性数据模型,空间有限,这里就不一一列举了。下次再聊。以上结构应用广泛。有兴趣的话一定要学习实践!
1.《入是什么结构 嵌入式程序员要学习的 经典数据结构》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《入是什么结构 嵌入式程序员要学习的 经典数据结构》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/junshi/1511970.html