【数据结构与算法】之一什么是数据结构

官方没有统一的定义…
《数据结构、算法与应用》sartaj Sahni
"数据结构是数据对象,以及存在于该对象的实例和组成实例的数据元素之间的各种联系。这些联系可以通过定义相关的函数来给出。”
《数据结构与算法分析》Clifford A.Shaffer
"数据结构是ADT(抽象数据类型Abstract Data Type)的物理实现。“
中文维基百科
”数据结构(data structure)是计算机中存储、组织数据的方式。通常情况下,精心选择的数据结构可以带来最优效率的算法。“

解决问题方法的效率,跟数据的组织方式有关。

信息是目前在生活和工作最经常听到的一个词汇,人们都说今天已经进入信息时代。但是,要想给信息这个概念一个容易理解的确切定义却不容易。直观地看,任何存在着的事物,其形态和运动都蕴含着信息,人的思想和行为也产生信息。人们希望用计算机处理的终极对象就是客观存在的各种信息,因此说计算机是处理信息的工具。计算机本质上具有与人类发明的其它工具截然不同的性质。
显然,要用计算机处理信息,首先必须把信息转变成计算机能处理的形式。在计算机科学技术领域,数据(data)就是指计算机(程序)能够处理的符号形式的总和,或者说是经过了编码的信息(新的的编码表示)。
数据元素(data element)用于指最基本的数据单位。在计算机硬件层面,所有被存储和处理的数据最终都编码为二进制代码形式。一切数据最终都表现为二进制位的序列,最基本的数据元素就是一个二进制位。但在计算机应用的各个层面上,数据可能具有更加丰富多彩的表现形式,这时说一个数据元素就是指在当前的上下文中作为整体保存和处理的一个数据单元。一批数据元素和它们之间的联系一起,反映了需要处理的问题的相关信息。
数据结构(data structure)研究数据之间的关联和组合的形式,总结其中的规律性,发掘特别值得注意的有用结构,研究这些结构的性质,进而研究如何在计算机里实现这些有用的数据结构,以支持相应组合数据的高级使用,支持处理它们的高效算法。在考虑数据结构时,其数据元素作为原子性的单元,可以任意简单或复杂,没有任何限制。
在这里插入图片描述

解决问题方法的效率,跟空间的利用效率有关有关。
写程序实现一个函数PrintN,使得 传入一个正整数为N的参数后,能顺序 打印从1到N的全部正整数

循环实现

void PrintN(int N)
{
	int i;
	for(i=1;i<=N;i++)
	{
		printf("%d\n",i);
	}
	return;
}

递归实现

void PrintN(int N)
{
	if(N)
	{
		printN(N-1);
		printf("%d\n",N);
	}
	return;
}

解决问题方法的效率,跟算法的巧妙程度有关。
写程序计算给定多项式在给定点x 处的f(x)= a 0 a_0 + a 1 a_1 x+ \cdots + a n 1 a_{n-1} x n 1 x^{n-1} + a n a_n x n x^n

按数学公式

double f(int n,double a[],doubel x)
{
	int i;
	double p=a[0];
	for(i=1;i<=n;i++)
	{
		p +=(a[i]*pow(x,i));
		return p;
    }
}

变通下思路(或数学公式形式)
f(x)= a 0 a_0 +x( a 1 a_1 +x( \cdots ( a n 1 a_{n-1} +x( a n a_n )) \cdots ))

double f(int n,double a[],double x)
{
	int i;
	double p=a[n];
	for(i = n;i>0;i--)
		p=a[i-1]+x*p;
	return p;
}

可以通过clock()扑捉程序花费的时间。常数CLK_TCK(或CLOCKS_PER_SEC):机器时钟每秒所走的时钟打点数。

所以到底什么是数据结构???

  • 数据对象在计算机中的组织方式
    *逻辑结构(比如,一开始把书架想象成一长条一层的架子,所有的数一个挨着一个放,除了两头,其它的书都是前面有一本书后面有一本书,如果每一本书都有一个编号,那么这个编号对应的就是一本书,这种结构是一对一的结构,称之为线性结构;另外一种组织方式,先把图书分类,如果每一类一个编号的话,那么一个类别里面对应着很多本书,这时一对多的逻辑关系树
    *物理存储结构(连续放,还是隔开放;用数组放还是链表放
  • 数据对象必定与一系列加在其上的操作相关联
  • 完成这些操作所用的方法就是算法

描述数据结构的方法

抽象数据类型
在这里插入图片描述
在这里插入图片描述