数据结构与算法

一、 数据的存储结构 

1. 顺序存储结构 (sequence storage structure) 是逻辑上相邻的节点存储在物理位置上也相邻的存储单元里。

2. 链式存储结构(linked storage structure)不要求逻辑上相邻的节点存储在物理位置上也相邻。

3. 索引存储是在存储节点信息同时,建立一个附加的索引表,然后利用索引表中的索引号的值来确定节点的存储单元地址。

4. 散列存储是根据节点的值累确定存储地址,把节点值作为自变量,通过一个称之为散列函数的计算规则确定该节点存储单元地址。

 

二、 数据类型

1. 高级语言的数据类型分2种:原子类型和结构类型。Char .int float double void 等是原子类型,不可分割,结构类型如数组,它由若干分量组成,每个分量还可以是原子类型,也可是结构类型。

 

三 算法的时间复杂度

1. 算法复杂度(time Complexity) 又称为计算复杂度(Computational Complexity), 它是算法  的时间的一个相对量度。它大致等于计算机执行一种基本操作(如赋值,计较,计算,转换,返回,输入,输出等)所需要的时间与算法进中执行基本操作次数的乘机。一般情况下,算法的运行时间T是问题规模n的函数f(n), 算法的时间度量记做T(n)=O(f(n)) 公式表示当问题规模增大时,算法执行时间的增长率和f(n)的增长率相同,称作算法的时间渐进复杂度(Asymptotic  Time complexity),简称时间复杂度,用数学符号"O"表示,也称”大O表示法“。求一个算法的f(n)就很方便了。此时不必对每一步详细分析,只需分析影响算法时间复杂的的主要部分,并且在分析算法主要部分的时候也可以相对简化,因为算法一般的控制结构只有顺序,选择和玄幻三种(d对于递归散发需要特殊分析),而顺序,选择结构都不会都不会增加时间复杂度,所以一般只需要分析清楚最里层玄幻体内基本操作的执行次数或递归函数的调用次数即可。

例如 

 for(i =1;i<=n;i++)

 {

  For(j=1;j<=n;j++)

  {

一、 For(k=1;i<=n;k++)

 {

 X=i+j+k;

 }

 }

 }

首先找出最里层循环的基本操作,即为 x=i+j+k.

其次,计算基本操作的执行顺序  f(n)=1+(1+2)+....(1+2+3+....n)=n*(n+1)*(n+2)/6 

最后转化为数量级形式 即为 O(f(n))=O(n^3) :

 

如果一个算法只存在顺序和选择结构,没有循环结构,那么算法中基本操作的执行频度与问题规模无关,算法的时间复杂度记做O(1),也称常数阶。如果算法只有一个一重循环,责算法的基本操作的执行频率与问题规模成线性增长关系,算法时间复杂度记做O(n),也称作线性阶。

数据结构/实用算法

 
栈和队列
POSTED @ 2012-02-11 20:04 超薄 阅读(5) | 评论 (0) 编辑
线性表
POSTED @ 2012-02-11 20:02 超薄 阅读(18) | 评论 (0) 编辑
 


原文地址:https://www.cnblogs.com/Leo_wl/p/2348459.html