数据结构00

数据结构分为逻辑结构跟物理结构,逻辑结构依赖于物理结构

逻辑结构:集合结构 线性结构 树形结构 图形结构

物理结构:顺序结构(内存)和链接结构

程序的灵魂(算法)
算法的5大基本特性:输入 输出 有穷性 确定性 可行性
其他特性:性价比(效率)
事后统计法:比较运行时间
问题:严重依赖硬件和运行时环境因素,编写相应程序

事前分析估算法
影响算法效率的主要因素
1)选择的策略和方法 //这个课程主要遵循这两个
分析执行次数:
2)问题的输入规模(例如排序算法,排序1个跟排序10000个)
3)编译器所产生的代码
4)计算机执行速度

算法的效率只关注最高阶项就可以了–》定性描述,符合定向 O(n)

定性描述-》算法复杂度分为时间复杂度和空间复杂度
数据结构课程重点关注的是算法的效率问题,即集中于时间复杂度

大O(Operation操作)表示法
操作数量的估算可以作为时间复杂度的估算
=>首先关注操作数量的最高次项
O(1)
O(n)
O(n2)
O(n3)

线性阶的时间复杂度:O(n)
对应的代码

对数接的时间复杂度 O(logn)
int i=1
while(i <n)
{ 
	i* =2		//不用管这里是2还是其他
}

平方阶 O(n2)
for (i =0 ;i <n ;i++)
{
 	for(j=0;j<n;j++)
 	{
        }
}

平方阶 O(n2)  由于是(n,n-1,n-2,...,1,0for(i=0;i<n;i++)
{ 
	for(j=i;j<n;j++)
	{
	
	}
}

for(i=0;i<n;i++)		O(n)
{ 
	for(j=i;j<n;j++)	O(n)
 	{
 		t(i)  //=>这里是n,具体不写出来 O(n)
 	}
}
=》总的是 O(n3)

算法效率的度量

常用的时间复杂度
效率依次递减
O(1) > O(n) > O(nlogn) > O(n^2) > O(n^3)「工程开发最次的选择」 > O(2^n) > O(n ! )「后面这些实践开发是不会采用的」
常数阶 > 对数阶 > 线性阶 》 nlogn 接 平方阶 立方阶 指数阶 阶乘阶

考虑的是最坏的复杂度

空间复杂度S(空间:内存空间) (Space Complexity)
S(n)=S(f(n)) // n为算法的问题规模

=================================================================

数据元素 组成数据的基本单位 人类中 数据元素—人
数据项:一个数据元素由若干个数据项组成 数据项----眼耳口鼻子
数据对象: 性质相同的数据元素的集合 人都有姓名、生日、性别等相同数据项
数据结构 : 数据元素间关系
逻辑结构 物理结构
逻辑结构:集合结构(平等,无关系) 线性结构 (1对1) 树型结构(1对多) 图形结构(多对多)
物理结构:顺序存储结构 链式存储结构
顺序存储结构:分配联系地址,第一个位置很重要

c语言数据类型
原子类型:整形、字符型、浮点型
结果类型:整形数组

抽象数据类型(ADT)

线性表:0个或多个数据元素的线性表
数组的静态链表,怪怪的

顺序存储结构—随机存储特点,查找O(1) ,但是插入O(n)
单链表 :查找第一个结点O(1),最后一个点O(n),插入O(1)
单循环链表:引入尾指针,查找第一个结点O(1),查找最后一个点O(1), 查找上一个结点O(n),插入O(1)
双向链表: 查找上一个结点O(1),插入和删除改变两个指针变量,空间换时间 :顺序 先处理插入点s的前驱和后继 ,在处理后结点的前驱,最后处理前结点的后继

栈(STACK):限定仅在表尾(栈顶)进行插入和删除的线性表压栈 出栈,先进后出
从待求解的问题出发,一直分解到已经已知答案的最小问题为止,然后再逐级返回,从而得到大问题的解(一个非常形象的例子就是分类回归树 classification and regression tree,从root出发,先将root分解为
而迭代则是从已知值出发,通过递推式,不断更新变量新值,一直到能够解决要求的问题为止
=斐波那契数列的求解=======
递归实际上不断地深层调用函数,直到函数有返回才会逐层的返回,因此,递归涉及到运行时的堆栈开销(参数必须压入堆栈保存,直到该层函数调用返回为止),所以有可能导致堆栈溢出的错误;但是递归编程所体现的思想正是人们追求简洁、将问题交给计算机,以及将大问题分解为相同小问题从而解决大问题的动机。
迭代大部分时候需要人为的对问题进行剖析,将问题转变为一次次的迭代来逼近答案。迭代不像递归一样对堆栈有一定的要求,另外一旦问题剖析完毕,就可以很容易的通过循环加以实现。迭代的效率高,但却不太容易理解,当遇到数据结构的设计时,比如图‘表、二叉树、网格等问题时,使用就比较困难,
递归算法从思想上更加贴近人们处理问题的思路,而且所处的思想层级算是高层(神),而迭代则更加偏向于底层(人),所以从执行效率上来讲,底层(迭代)往往比高层(递归)来的高,但高层(递归)却能提供更加抽象的服务,更加的简洁

队列(queue):只允许在队尾进入插入操作,而在队头进行删除操作的线性表。一段进,一端出,先进先出(FIFO),允许插入的一端叫队尾,允许删除的一端叫队头
eg:键盘输入与显示

串(string):零个或多个字符组成的有限序列,也叫字符串

顺序循环队列: 队列的头尾相接的顺序循环结构

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值