论数据结构与ACM的关系

来源:互联网 发布:关于tensorflow社区 编辑:程序博客网 时间:2024/06/09 16:03

数据结构  :

       首先,数据结构是一门计算机语言学的基础学科,它不属于任何一门语言,其体现的是几乎所有标准语言的算法的思想。

    上面的概念有一些模糊,我们现在来具体说一说,相信你门的数据结构使用的是一门具体的语言比如C/C++语言来说明,那是为了辅助的学习数据结构,而数据结构本身不属于任何语言(相信你把书上的程序敲到电脑里面是不能通过的吧,其只是描述了过程,要调试程序,还需要修改和增加一些东西)。你们的书上开始应该在讲究数据的物理存储结构/逻辑存储结构等概念,说明数据结构首先就是“数据的结构”,在内存上的存储方式,就是物理的存储结构,在程序使用人员的思想上它是逻辑的。

   我认为任何数据结构都可以从线性表演进而来。以顺序表为例,最简单的顺序表是无序的,那么增加一个要求,使其是有序的,那么只需要改动一下插入操作。

   依理类推,堆栈和队列,只需要改动插入和删除操作,即可。你看科研论文或实际项目,也是有一个较简单的数据结构,演变而来。

串:在线性表的基础上,增加了子串的操作,变动大一些,有回溯过程。

数组,结构稍有变动,操作也是增加得多一些,例如:回文。

树:结构改得较大,有分支了。性质也多一些。最基本的操作方法,是查询。

图:当然最复杂。各种需求。

因此:

线性表---->树---->图。这是一种演进路径。

线性表--->堆栈、队列、串--->数组--->各种线性表;

二叉树--->各种二叉树---->B树、B+树---->红黑树;

   数据结构的本质就在于:如何将现实世界中各种各样的数据放入到内存中,并且如何在内存中操作这些数据,如何评价这些存储方案和操作方法。

   ACM中的数据结构本质在于,使用普通数据结构进行进一步延伸而得到的高级算法解决具体问题:

常用的数据结构有:

集合结构--->并查集

线性结构--->数组--->栈,队列,双端队列

树状结构--->二叉树,BST--->AVL树,splay树,Treap,Cartesian Tree,Size Balance Tree

图状结构--->邻接矩,阵邻接表,十字链表,邻接多重表

堆形结构--->二叉堆--->左偏堆,斜堆

数学结构--->哈希表

统计结构--->树状数组,线段树

字符结构--->前缀树,后缀树,后缀数组

程序=算法+数据结构,然而一部分算法是基于数据结构上的数据处理。

不同的数据结构其操作集不同,但下列操作必不可缺:
1,结构的生成;
2.结构的销毁;
3,在结构中查找满足规定条件的数据元素;
4,在结构中插入新的数据元素;
5,删除结构中已经存在的数据元素;
6,遍历。


原创粉丝点击