【1】绪论

本文深入解析数据结构中的逻辑结构(线性、层次和网状)、存储结构(顺序、链式、索引和散列)以及算法的关键特性,探讨算法设计与数据结构的关系,重点讲解时间复杂度和空间复杂度,涵盖线性表实例和常见算法分析方法。
摘要由CSDN通过智能技术生成

【1】数据结构

​ 概念:数据的逻辑结构存储结构及操作

1.数据

​ 数据:不只是一个单独的数值,是一个集合的概念
​ 数据元素:数据的基本单位,由基本的数据项构成。
​ (如:整个图书馆就是一个数据,一本书就是一个数据元素。
​ 描述这本数据的每个信息就是数据项。)

 数据项:是数据元素的基本单位,描述数据元素拥有的信息
 节点:就是数据元素
2.逻辑结构

​ 概念:描述数据之间的逻辑规律和数据之间的联系
​ (元素与元素之间的关系)

逻辑结构的分类:

1.线性结构–>线性存储->一对一的关系–>线性表
头节点无前驱,尾节点无后继

2.层次结构–>树–>一对多的关系–>树
根节点无前驱,叶子节点无后继

3.网状结构–>图–>多对多的关系–>图
举例:运动会体育项目,同一时间段举行项目如下
1.A B 2.C D 3.E F

3.存储结构

概念:数据的逻辑结构在计算机中的具体实现。

存储结构分类:
1.顺序存储:内存空间开辟是连续
数组:内存空间连续开辟,数据元素类型相同
2.链式存储:通过地址将数据元素联系在一起
3.索引存储:通过索引表找到数据元素存放位置,拿到数据
存在两个表格–》索引表 和 数据表
书名—》数据表中查寻书的位置
4.散列存储结构 (哈希存储)
数据元素的存放和位置之间存在一个关系。

​ 散列存储:存在一个关系函数和关键值(key)
​ 将key代码关系函数可以计算出数据存放的位置。
​ 存安照对应位置存,取按照对应位置取。

4.操作
增 删 改 查

【2】算法

1.算法和程序

​ 算法:解决问题的思想办法
​ 程序:用计算机语言对算法的具体实现

2.算法和数据 结构

​ 算法+数据结构=程序

  算法的设计:依赖于逻辑结构
  算法的实现:依赖于存储结构

3.算法的特性
1)有穷性:执行步骤是有限的
2)确定性:每个步骤,无二义性,没有歧义
3)可行性:能够在有限时间内完成
4)输入和输出:一个算法可以有一个或多个输入和输出

4.如何评价一个算法的好坏
正确性:保证算法是可以正确完成功能的实现
易读性:容易被解读
健壮性:容错(错误)处理
高效性:执行效率,算法执行快慢容易受到计算机性能的影响,
不可以作为评判算法高效性的标准,这通过可执行语句重复执行
次数来衡量算法是否高效 。(时间复杂度)
低存储性:占用空间小 (空间复杂度)

【4】时间复杂度–》程序运行速度
算法的可执行语句重复执行的次数–》频度和

语句频度:算法的可执行语句重复执行的次数
通常时间复杂度用一个问题规模函数表示:T(n)=O(f(n))
 T(n)--》问题规模的时间函数
 O --》时间数量级
 f(n)--》算法中可执行语句重复执行的次数 ,用问题规模n的
 某个函数f(n)来表示
 n--》是问题的规模,指的是输入数据量的大小	 

 举例:有数组  int st[10]; 10个数据排序(冒泡排序)
        10 个数据 就是规模

  for(i=0;i<10-1;i++)
  {
     for(j=0;j<10-1-i;j++)
	 {
	    if()
		交换
	 }
  }
  f(n)-->f(10)=45  T(n)=O(f(n))=O(1)
  
  举例2:1+...+100的和
    for(i=1;i<=100;i++)
	{
	   sum=sum+i;//重复执行语句
	}
	
	f(n)-->f(100)=100  -->T(n)=O(100)
	
	变成:T(n)=O(1)
	  sum=na1+n(n-1)d/2
	  
	  sum=100+100(100-1)/2=100+50*99=5050
	
举例:有数组  int st[n]; n个数据排序(冒泡排序)
        n 个数据 就是规模

  for(i=0;i<n-1;i++)
  {
     for(j=0;j<n-1-i;j++)
	 {
	    if()
		交换
	 }
  }
  i=0  n-1
  i=1  n-2
  i=2  n-3
  ....
  i=n-4 3
  i=n-3 2
  i=n-2 1
  
  f(n)-->f(n)=(n-1)n/2     2(n-1)/2+(n-1)(n-1-1)/2
             =n^2/2-n/2	
	T(n)=O(n^2)

计算大O的方法
(1)根据问题规模n写出表达式 f(n)
(2)如果有常数项,将其置为1
//当f(n)的表达式中只有常数项的时候,有意义 f(n) = 8
//T(n)=O(1)
(3)只保留最高项,其它项舍去
(4)如果最高项系数不为1,除以最高项系数

【5】空间复杂度
算法占用的空间大小。一般将算法的辅助空间作为衡量空间复杂度的标准。
算法占用的存储空间包括:
1)输入输出数据所占空间
2)算法本身所占空间
3)额外需要的辅助空间
void swap(int *a,int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
输入输出数据所占空间是必须,算法本身所占空间可以通过
精简算法来缩减,而在运行时候使用的辅助变量所占空间,
即辅助空间是衡量 空间复杂度的关键因素。

【6】线性表
线性表:顺序表 链表(单向链表,单向循环链表,双向链表,双向循环链表)
栈、队列
逻辑结构:线性结构
存储结构:顺序存储结构
链式存储结构

特点:一对一的关系,头节点没有前驱、尾节点没有后继

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值