黑马程序员技术交流社区

标题: 数据结构有什么用? [打印本页]

作者: 蔡纯富    时间: 2012-4-4 10:43
标题: 数据结构有什么用?
学了数据结构,可是平时基本没用,希望大家举点例子,比如什么地方我们会用到数据结构,
平时用得多的数据结构也就那两个 List 和 Dictionary,而且这是微软本身提供的,什么地方会需要要我们自己设计自己的数据结构?望高手指点!
作者: 曾驰文    时间: 2012-4-4 11:01
的确 平时开发 很少用,  但是 你如果 开发游戏  就可能  涉及  最简单 在 俄罗斯方块 中 一个矩阵(二维数组)的应用  再就是 在面试 时候经常考到 尤其是大公司
作者: 曾驰文    时间: 2012-4-4 11:05
还有一个 简单的应用 您在做权限管理  在构造 管理的多级菜单管理的时候 此时 有要用一个简单的 数据结构-递归
作者: 曾驰文    时间: 2012-4-4 11:05
还有一个 简单的应用 您在做权限管理  在构造 管理的多级菜单管理的时候 此时 有要用一个简单的 数据结构-递归
作者: 步飞烟    时间: 2012-4-4 12:07
常用数据结构
数组 (Array)
  在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在C语言中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。
栈 (Stack)
  是只能在某一端插入和删除的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。
队列 (Queue)
  一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。
链表 (Linked List)
  是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。
树 (Tree)
  是包含n(n>0)个结点的有穷集合K,且在K中定义了一个关系N,N满足 以下条件:   (1)有且仅有一个结点 k0,他对于关系N来说没有前驱,称K0为树的根结点。简称为根(root)。 (2)除K0外,k中的每个结点,对于关系N来说有且仅有一个前驱。   (3)K中各结点,对关系N来说可以有m个后继(m>=0)。
图 (Graph)
  图是由结点的有穷集合V和边的集合E组成。其中,为了与树形结构加以区别,在图结构中常常将结点称为顶点,边是顶点的有序偶对,若两个顶点之间存在一条边,就表示这两个顶点具有相邻关系。
堆 (Heap)
  在计算机科学中,堆是一种特殊的树形数据结构,每个结点都有一个值。通常我们所说的堆的数据结构,是指二叉堆。堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。
散列表 (Hash)
  若结构中存在关键字和K相等的记录,则必定在f(K)的存储位置上。由此,不需比较便可直接取得所查记录。称这个对应关系f为散列函数(Hash function),按这个思想建立的表为散列表。
作者: 徐刚    时间: 2012-4-4 15:42
“程序=数据结构+算法”这句话大家应该都听过的,可是算法无不依附于具体的数据结构,数据结构直接关系到算法的选择和效率!
数据结构是基础学科,是很通用的,总的来说,就是可以体现你编程的基本功到底有多深!而且你的技术越高,数据结构越显重要!
在具体的游戏开发就能体现出数据结构的重要性:
比如你要编一个类似帝国的游戏,如果不懂数据结构,人口最高只敢100,否则机器就特慢,人家就敢让人口到300甚至更高;你的农民遇到石头就停住了,人家的农民就能绕过去,找最近的路。
比如你要编FIFA、PES、FM之类的足球游戏,足球就只能是16面体,否则机器就特慢,人家就敢做65536面体;你的球员数据就只敢有500人,还不敢查询,人家就敢有4千、4万人,还可以直接按名字查询。
作者: 杨伟芬    时间: 2012-4-4 17:05
数据结构可以说是编程的灵魂,给程序开发人员一个开发思路,讲的主要是已经成熟的编程思想和算法。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2