数据结构--数据结构及数组

数据结构

http://zh.wikipedia.org/wiki/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84

计算机科学信息科学中,数据结构英语data structure)是计算机中存储、组织数据的方式。通常情况下,精心选择的数据结构可以带来最优效率算法

在许多类型的程序设计中,选择适当的数据结构是一个主要的考虑因素。许多大型系统的构造经验表明,封装的困难程度与最终成果的质量与表现,都取决于是否选择了最优的数据结构。在许多时候,确定了数据结构后便能很容易地得到算法。而有些时候,思路则会颠倒过来:例如当某个关键作业需要特定数据结构下的算法时,会反过来确定其所使用的数据结构。然而,不管是哪种情况,数据结构的选择都是至关重要的。

系统构造的关键因素是数据结构而非算法的这一深入理解,导致了多种形式化的设计方法与编程语言的出现。绝大多数的语言都带有某种程度上的模块化思想,通过将数据结构的具体实现封装隐藏于受限接口之后的方法,来让不同的应用程序能够安全地重用这些数据结构。C++JavaPython面向对象的编程语言可使用来完成这一功能。

因为数据结构的重要性毋庸置疑,现代编程语言及其运行环境在标准库中都包含了多种数据结构,例如 C++ 标准模板库中的容器、Java集合框架以及微软的.NET Framework

大多数数据结构都由数列记录可辨识联合引用等基本类型构成。举例而言,可空引用(nullable reference,一种可被置空的引用)是引用与可辨识联合的结合体,而最简单的链式结构链表则是由记录与可空引用构成。

数据结构意味着接口封装:一个数据结构可被视为两个函数之间的接口,或者是由数据类型联合组成的存储内容的访问方法封装。

常见的数据结构

数组

http://zh.wikipedia.org/wiki/%E9%99%A3%E5%88%97

数组是计算机编程语言上,对于“Array”的中文称呼。它十分类似数学上的“矩阵

数学上的矩阵看起来像这样:


a=egin{bmatrix} 3 & 6 & 2 \ 0 & 1 & -4 \ 2 & -1 & 0end{bmatrix}

而计算机上的数组看起来像这样,例如C语言中的数组:

    int a[3][3]={ 
                    { 3,  6,  2 },
                    { 0,  1, -4 },
                    { 2, -1,  0 }
                 };

虽然数组在各种计算机编程语言中的表示式略有不同,但是几乎每一种编程语言都有这种结构和观念,它已经不只是一种编程专用的术语,而是计算机运作中非常重要的技术和概念。

字符串也是基于数组的一种重要数据结构。数据库也是数组概念的一种扩充和延伸。

多维数组

普通数组采用一个整数来作下标。多维数组的概念特别是在数值计算和图形应用方面非常有用。我们在多维数组之中采用一系列有序的整数来标注,如在[ 3,1,5 ] 。这种整数列表之中整数的个数始终相同,且被称为数组的“维度”。关于每个数组维度的边界称为“维”。维度为k的数组通常被称为k维。

程序设计

数组设计之初是在形式上依赖内存分配而成的,所以必须在使用前预先请求空间。这使得数组有以下特性:

  1. 请求空间以后大小固定,不能再改变(数据溢出问题);
  2. 在内存中有空间连续性的表现,中间不会存在其他程序需要调用的数据,为此数组的专用内存空间;
  3. 在旧式编程语言中(如有中阶语言之称的C),程序不会对数组的操作做下界判断,也就有潜在的越界操作的风险(比如会把数据写在运行中程序需要调用的核心部份的内存上)。

因为简单数组强烈倚赖计算机硬件之内存,所以不适用于现代的程序设计。欲使用可变大小、硬件无关性的数据类型,Java等程序设计语言均提供了更高级的数据结构:ArrayListVector动态数组

原文地址:https://www.cnblogs.com/wangziqiang/p/3593378.html