初识数据结构

来源:互联网 发布:kafka java开发 编辑:程序博客网 时间:2024/05/22 13:35

       前边学习了C语言,在C语言学习的基础上,初步认识了一下数据结构的知识,数据结构其实就是在说明数据存储和操作两方面的问题,在计算机中内存是一维的,而现实中我们需要表达的事物往往会表现在多个方面,为了通过一维的内存去表示负责的存储就出现了数据结构的研究。由于现积累有限,对一些讲解的比较深入的知识理解程度有待在以后的学习中一步步加强,对于数据结构总体上分为了两个方面:线性结构和非线性结构。

 

线性结构

线性结构总体上如下图所示。


       线性的存储方式分为两种:连续的顺序存储(即数组)及离散的链式存储。其中链式存储方式中还包括:单链表、双向链表、循环链表和静态链表;对于顺序和链表存储两种存储方式主要的操作有:创建:创建一个链表或数组;销毁:将整个链表和数组删除;查找:从链表或数组中查找相应元素;遍历:依次对数组和链表中的每个元素进行操作;插入:插入元素;删除:删除元素等。依据这两种存储方式的应用有:栈、队列和串。

 

顺序存储:在内存中找到一段连续的存储空间。这种存储方式存储速度快,但是插入和删除元素会相对复杂。

链式存储:下图中表示了单链表的存储方式。将每个内存空间分为了两部分:数据域和指针域。数据域存储数据而指针域用来存储下一个内存空间的首地址。如此便如同链条一样,一环扣一环形成一条链式的结构。

 

为了更加方便链表的操作,于是在内存空间又分出一部分来存储上一个结点的首地址,如此便形成了双向的链式结构,如下图。

 

栈:实现“先进后出”的存储结构。例如函数的调用、中断请求、表达式求值、递归等都是对栈的一种应用。

 

队列:实现“先进先出”的存储结构。一般分时间先后顺序实现操作的应用就可以考虑用队列实现。

 

非线性结构

对于非线性结构总体上如下图所示。

 

      非线性结构有树和图。树可以分为:一般树、二叉树和森林。在存储过程中一般树和森林都可以转化为二叉树进行存储,存储方式同样是分为连续和链式两种。其中对于一般的树还包括双亲表示法、孩子表示法和孩子兄弟表示法。在遍历树中所有元素的过程中是针对二叉树结构来进行的,分为先序、中序和后序三种遍历方式。对于图的学习只是有了一个简单的认识,对于其应用需要在以后的学习中不断深入。

       对数据结构的学习感想:学完数据结构后没有见到明显的效果,对于写代码的能力也没有明显的提升,但是通过学习数据结构提高了我对编程的认识,从低级语言到高级语言的递进,开阔了自己的视野,对底层的编程有了一个初步认识,为后期的学习奠定了一定的基础!在积累阶段就多多积累吧,后期还需要对其进一步学习。



0 0