说真的,任何说起嵌入式软件怎么入门啊?需要学些什么东西啊,我差不多一致的回答都是:软件方面C语言和数据结构加上一些简单常用的算法,这些需要学好。
顺序存储和链式存储数组—顺序存储借着自己的回顾学习,我也写一些基础的数据结构知识,多画图,少BB,与大家一起学习数据结构
数组作为一个顺序储存方式的数据结构,可是有大作为的,它的灵活使用为我们的程序设计带来了大量的便利;
但是,但是,数组最大的缺点就是我们的插入和删除时需要移动大量的元素,所以呢,大量的消耗时间,以及冗余度难以接受了。
以C语言数组插入一个元素为例,当我们需要在一个数组{1,2,3,4}的第1个元素后的位置插入一个’A’时,我们需要做的有:
- 将第1个元素后的整体元素后移,形成新的数组{1,2,2,3,4}
- 再将第2个元素位置的元素替换为我们所需要的元素’A’
- 最终形成我们的预期,这需要很多的操作喔。
上图可以看出,使用数组都有这两大缺点:
- 插入删除操作所需要移动的元素很多,浪费算力。
- 必须为数组开足够的空间,否则有溢出风险。
由于数组的这些缺点,自然而然的就产生链表的思想了。
链表通过不连续的储存方式,自适应内存大小,以及指针的灵活使用,巧妙的简化了上述的内容。
链表的基本思维是,利用结构体的设置,额外开辟出一份内存空间去作指针,它总是指向下一个结点,一个个结点通过NEXT指针相互串联,就形成了链表。
其中DATA为自定义的数据类型,NEXT为指向下一个链表结点的指针,通过访问NEXT,可以引导我们去访问链表的下一个结点。
对于一连串的结点而言,就形成了链表如下图:
上文所说的插入删除操作只需要修改指针所指向的区域就可以了,不需要进行大量的数据移动操作。如下图: